20180929 first commit

This commit is contained in:
lishu
2018-09-29 14:57:32 +08:00
commit 19cfcaf353
1283 changed files with 2427387 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
#ifndef _AV_INTERFACE_H
#define _AV_INTERFACE_H
#define PROTO_VERSION 3
#define PROTO_MAGICNUM 0x5641
/*from papp*/
#define MSG_DATA_META 0x31
#define MSG_DATA_BODY 0x32
#define MSG_DATA_TAIL 0x33
/*live*/
#define MSG_LIVE_CHECK 0x41 //from sapp
#define MSG_LIVE_RESPONS 0x42 //to sapp
/*from av_analyse*/
#define MSG_RESP_CHECKRESULT 0x11 // Check Result notification
#define MSG_RESP_REJECT 0x12 // Reject Message notification, not proc now
#define MSG_RESP_CHARACTER 0x13 // Character notification, 1. wins ack, 2. send to sapp
#define MSG_RESP_CHECKRESULT_ACK 0x14 //not send now
#define MSG_PROG_SYNC 0x15 //not proc now
/*prog sync*/
#define SYNC_SENDER_VIDEO_ANALYZER 0x01
#define SYNC_SENDER_AUDIO_ANALYZER 0x02
#define SYNC_ACTION_STOP_TO_SUBSYSTEM 0x01
#define SYNC_ACTION_STOP_TO_MAINSYSTEM 0x02
#define SYNC_ACTION_ELIMINATE_PROGRAM 0x03
/*Ԫ<><D4AA>ϢlocalIPѡ<50><EFBFBD><EEA3AC><EFBFBD><EFBFBD>*/
#define OPT_SOURCE_IP 0x41
/*=================================monitor service===============================================*/
#define SERVICE_AUDIO_LANG 0x97 //<2F><>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_AUDIO_LANG_FULL 0x98 //<2F><>ƴװ<C6B4><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
/*=================================ack msg===============================================*/
typedef struct msg_data_ack_s
{
char prog_id[8];
uint16_t pad;
uint64_t ack_offset:48;
}msg_data_ack_t;
/*=================================data msg===============================================*/
#define MSG_HEADER_LEN sizeof(msg_header_t)
typedef struct msg_header_s
{
uint16_t magic_num;
uint8_t version;
uint8_t msg_type; // msg data type
uint32_t cont_len;
}msg_header_t; /* sizeof = 8B */
#define MSG_MEDIAINFO_HEAD_LEN 24
/*Data_flag defination*/
typedef struct msg_metainfo_s
{
char prog_id[8];
char flag;
uint8_t hitservice;
uint64_t prog_len:48;
uint32_t cap_IP;
uint8_t protocol;
uint8_t media_type;
uint8_t data_flag;
uint8_t opt_num;
}msg_metainfo_t;
#define MSG_DATA_HEAD_LEN (sizeof(msg_data_t))
typedef struct msg_data_s
{
char prog_id[8];
union
{
struct
{
uint8_t pad;
uint8_t flags;
};
uint16_t frag_seq;
};
uint64_t offset:48;
}msg_data_t;
/*==============================response msg==================================================*/
typedef struct msg_prog_sync_s
{
char prog_id[8];
uint8_t sender; //0:reserved,1: video analyzer,2:audio analyzer
char action; //0:reserved,1:stop send to subsystem,2:stop send to main system,3:eliminate this programm
}msg_prog_sync_t;
#define MSG_RESP_CHECKRESULT_LEN (sizeof(resp_checkresult_t))
typedef struct resp_checkresult_s
{
char prog_id[8];
uint8_t service;
char level; //the level of check result
char pad[2];
uint32_t cfg_id; //config ID
uint32_t file_header_size;
uint32_t file_packet_size;
}resp_checkresult_t;
typedef struct msg_log_s
{
char prog_id[8]; // program rule id;
uint32_t cfg_id; // hitted rule id;
uint32_t fount_time; // found time
uint32_t server_ip; // server ip;
uint32_t client_ip; // client ip;
uint16_t server_port; // server port;
uint16_t client_port; // client port;
uint8_t protocol; // translation protocol num;
uint8_t service; // service type;
uint8_t level; // result level;
uint8_t fd_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0<><30>ʾ<EFBFBD><CABE>̬<EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>2<EFBFBD><32>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>С<EFBFBD>
}msg_log_t;
typedef enum
{
RECV_RESP=0,
RECV_RESP_WHITELIST,
RESP_MEDIA_NOFOUND,
RESP_REPEAT,
RESP_AUDIO_LANG_MONITOR_NEW,
RESP_AUDIO_LANG_MONITOR_OLD,
RESP_SEND_BLOCK,
RECV_PROG_SYNC,
RECV_PROG_SYNC_NOFOUND,
RECV_PROG_SYNC_AUDIO_STOP,
RECV_PROG_SYNC_VIDEO_STOP,
RECV_PROG_SYNC_UNKNOW,
SEND_CONFIG_MONITOR,
SEND_LANG_MONITOR,
}RESP_LOG_TYPE;
void resp_write_to_log(int type, resp_checkresult_t* check_res, void* param1, void* param2);
#endif

54
src/tool/backend/Makefile Normal file
View File

@@ -0,0 +1,54 @@
vpath %.a ../lib
vpath %.h ./inc
PAPP_PATH=/home/mesasoft/frag_rssb/
#CFLAGS = -g3 -Wall -fPIC -Werror -O
#CFLAGS = -g3 -Wall -fPIC -O
INCLUDES = -I./inc/
INCLUDES += -I/usr/include/MESA/
#INCLUDES += -I./support/hiredis-vip-master/
CFLAGS = -g3 -Wall -fPIC -D__STDC_FORMAT_MACROS
CFLAGS += $(INCLUDES)
#LDDICTATOR = -Wl,-wrap,malloc -Wl,-wrap,calloc -Wl,-wrap,free -Wl,-wrap,realloc
LDDICTATOR =
CC = g++
CCC = g++
LIB = -L./lib/
LIB += -lMESA_handle_logger -lMESA_htable -lpthread -lrt
LIB += ./lib/libmy_socket.a
LIB += ./lib/usm_comm.a
#LIB += ./lib/libdictator_debug.a
LIB_FILE = $(wildcard ../lib/*.a)
SOURCES = $(wildcard *.c)
SOURCESCPP = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.c=.o)
OBJECTSCPP = $(SOURCESCPP:.cpp=.o)
#DEPS = $(SOURCES:.c=.d)
TARGET = backend
.PHONY:clean all
all:$(TARGET)
$(TARGET):$(OBJECTS) $(OBJECTSCPP) $(LIB_FILE)
#$(CCC) -shared $(CFLAGS) $(OBJECTS) $(LIB) -o $@
$(CCC) $(CFLAGS) $(OBJECTS) $(OBJECTSCPP) $(LIB) $(LDDICTATOR) -o $@
.c.o:
#%.d:%.c
# $(CCC) $< -MM $(INCLUDES) > $@
.cpp.o:
#%.dpp:%.cpp
$(CCC) $(CFLAGS) -c $<
-include $(DEPS)
clean :
rm -f $(OBJECTS) $(DEPS) $(TARGET)

148
src/tool/backend/backend.c Normal file
View File

@@ -0,0 +1,148 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include "MESA_handle_logger.h"
#include "AV_interface.h"
#include "my_socket.h"
#include "usm_api.h"
#define UNIX_SOCKET_RECV 0
#define USM_RECV 1
typedef struct backend_parameter_s
{
void* logger;
/*resp msg*/
int recv_data_fd;
int loglevel;
}backend_parameter_t;
backend_parameter_t g_run;
int main (int argc, char *argv[])
{
#if UNIX_SOCKET_RECV
int size = 0;
char buf[2048] = {0};
fd_set rset;
msg_header_t* mhead = NULL;
msg_metainfo_t* minfo = NULL;
msg_data_t* mdata = NULL;
char* data = NULL;
char* opt_ptr = NULL;
g_run.logger = MESA_create_runtime_log_handle("./log/recv_data",10);
g_run.recv_data_fd = init_recv_unix_socket("/home/mesasoft/frag_rssb/tool/backend/un_recv");
if(-1==g_run.recv_data_fd)
{
printf("init_recv_unix_socket error.\n");
return -1;
}
FD_ZERO(&rset);
FD_SET(g_run.recv_data_fd,&rset);
while(1)
{
if(-1==select(g_run.recv_data_fd+1,&rset,NULL,NULL,NULL))
{
printf("recv_data select error.\n");
continue;
}
size = recv_unix_socket_recv(g_run.recv_data_fd, (char*)buf, sizeof(buf));
mhead = (msg_header_t*)buf;
minfo = (msg_metainfo_t*)(buf + MSG_HEADER_LEN);
mdata = (msg_data_t*)(buf + MSG_HEADER_LEN);
data = (char*)mdata + MSG_DATA_HEAD_LEN;
opt_ptr = NULL;
/* Ignore invalid packet */
if(PROTO_MAGICNUM != mhead->magic_num || PROTO_VERSION != mhead->version|| size <= (int)MSG_HEADER_LEN || size>1600)
{
continue;
}
/*prco msg*/
switch(mhead->msg_type)
{
case MSG_DATA_META:
MESA_handle_runtime_log(g_run.logger, RLOG_LV_INFO, "",
"RECV META [PID:%llu, media_len:%llu, meida_type:0x%02x]",
*(uint64_t*)minfo->prog_id, minfo->prog_len, minfo->media_type);
break;
case MSG_DATA_BODY:
case MSG_DATA_TAIL:
/*write log*/
MESA_handle_runtime_log(g_run.logger, RLOG_LV_DEBUG, "",
"RECV DATA [PID:%llu, offset:%llu, datalen:%u]",
*(uint64_t*)mdata->prog_id, mdata->offset, mhead->cont_len-MSG_DATA_HEAD_LEN);
break;
}
}
#endif
#if USM_RECV
char* data[372]={0};
int datalen[372] = {0};
int data_cnt = 0;
int rst = 0;
int i = 0;
msg_header_t* mhead = NULL;
msg_metainfo_t* minfo = NULL;
msg_data_t* mdata = NULL;
char* opt_ptr = NULL;
g_run.logger = MESA_create_runtime_log_handle("./log/recv_data",10);
USM_t* a_usm_handle = USM_handle(1635151988,100000,USM_READER);
unsigned int reader_id = 0;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
char reader_path[] = "/home/mesasoft/frag_rssb/tool/backend/un_recv";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),0);
USM_set_opt(a_usm_handle,LOG_HANDLE,NULL,4,0);
rst = USM_init(a_usm_handle);
while(1)
{
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
for(i =0;i< data_cnt;i++)
{
mhead = (msg_header_t*)data[i];
minfo = (msg_metainfo_t*)(data[i] + MSG_HEADER_LEN);
mdata = (msg_data_t*)(data[i] + MSG_HEADER_LEN);
opt_ptr = NULL;
/* Ignore invalid packet */
if(PROTO_MAGICNUM != mhead->magic_num || PROTO_VERSION != mhead->version|| datalen[i] <= (int)MSG_HEADER_LEN || datalen[i]>1600)
{
continue;
}
/*prco msg*/
switch(mhead->msg_type)
{
case MSG_DATA_META:
MESA_handle_runtime_log(g_run.logger, RLOG_LV_INFO, "",
"RECV META [PID:%llu, media_len:%llu, meida_type:0x%02x]",
*(uint64_t*)minfo->prog_id, minfo->prog_len, minfo->media_type);
break;
case MSG_DATA_BODY:
case MSG_DATA_TAIL:
/*write log*/
MESA_handle_runtime_log(g_run.logger, RLOG_LV_DEBUG, "",
"RECV DATA [PID:%llu, offset:%llu, datalen:%u]",
*(uint64_t*)mdata->prog_id, mdata->offset, mhead->cont_len-MSG_DATA_HEAD_LEN);
break;
}
}
}
#endif
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,28 @@
#ifndef _MY_SOCKET_H_
#define _MY_SOCKET_H_
#include <stdint.h>
#include <sys/un.h>
#define SOCKET_BUF_SIZE 1500
#ifdef __cplusplus
extern "C" {
#endif
int init_unix_socket(const char* file_name);
int unix_socket_send(int sockfd, struct sockaddr_un *dest_un, const char*data, int datalen);
int init_recv_udp_socket(uint16_t port);
int recv_udp_socket_recv(int sockfd, uint32_t *src_ip, uint8_t *buf, uint32_t buf_size);
int init_recv_unix_socket(const char* file_name);
int recv_unix_socket_recv(int sockfd,char*buf,int buf_len);
int init_send_udp_socket();
int send_udp_socket_send(int sockfd, uint32_t addr, uint16_t port, char *data, int datalen);
#ifdef __cplusplus
}
#endif
#endif

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,42 @@
LIB_PATH=./
SRC=./
OBJ=./
INCLUDE=-I ./inc
INCLUDE+=-I /usr/include/MESA/
LIB=-L./lib -lsitdc++ -lpthread
CC=g++ -g
G_FLAG_SO = -Wall -fPIC $(INCLUDE)
G_FLAG = -Wall $(INCLUDE)
SRCFILE= $(wildcard $(SRC)*.c)
DETACHDIR= $(notdir $(SRCFILE))
OBJECTS = $(patsubst %.c, $(OBJ)%.o, $(DETACHDIR))
TARGETLIB = $(LIB_PATH)libmy_socket.a
TARGETSO = $(LIB_PATH)libmy_socket.so
$(OBJ)%.o:$(SRC)%.c
$(CC) -c -o $@ $(G_FLAG_SO) $<
all:$(TARGETLIB)
#all:$(TARGETSO)
$(TARGETLIB):$(OBJECTS)
ar rs $@ $^
cp $@ ../bin/
cp $@ ../../../lib/
cp my_socket.h ../../../inc/
$(TARGETSO):$(OBJECTS)
$(CC) -o $@ $(G_FLAG) -shared $^
cp $@ ../bin/
cp $@ ../../../lib/
cp my_socket.h ../../../inc/
clean:
-rm -rf $(OBJECTS) $(TARGETSO) $(TARGETLIB) *.o
install:
cp *.a ../../../lib/
.PHONY:all clean

Binary file not shown.

View File

@@ -0,0 +1,280 @@
// output.c
//
//
//
// MODIFIED by
// CREATED BY Guo Le, 08/24/2010
// use sendnto instead of sendto, zhengchao@iie.ac.cn 2012-05-30
// add Unix-domain sokcet,zhengchao@iie.ac.cn 2012-06-04
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/un.h>
#include <stddef.h>//offsetof
#include "my_socket.h"
int init_send_udp_socket()
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd)
{
return -1;
}
return sockfd;
}
void output_udp_clear(int sockfd)
{
close(sockfd);
}
// send udp packet
int send_udp_socket_send(int sockfd, uint32_t addr, uint16_t port, char *data, int datalen)
{
struct sockaddr_in dst_addr; /* connector's address information */
dst_addr.sin_family = AF_INET; /* host byte order */
dst_addr.sin_port = port; /* short, network byte order */
dst_addr.sin_addr.s_addr = addr;
bzero(&(dst_addr.sin_zero), 8); /* zero the rest of the struct */
int to_send_len=datalen;
int already_sended_len=0;
while(to_send_len>0)
{
already_sended_len=sendto(sockfd,data,
to_send_len-already_sended_len,
0,
(struct sockaddr *)&(dst_addr),
sizeof(dst_addr));
if(already_sended_len==-1)
{
if((EAGAIN == errno)||( EINTR == errno )|| (EWOULDBLOCK==errno))
{
continue;
}
else
{
return -1;
}
}
to_send_len-=already_sended_len;
}
return already_sended_len;
}
int output_udp_init_connect(uint32_t addr, uint16_t port, char *dev)
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd) {
return -1;
}
struct sockaddr_in dst_addr; /* connector's address information */
dst_addr.sin_family = AF_INET; /* host byte order */
dst_addr.sin_port = port; /* short, network byte order */
dst_addr.sin_addr.s_addr = addr;
bzero(&(dst_addr.sin_zero), 8); /* zero the rest of the struct */
if (-1 == connect(sockfd, (struct sockaddr*)&dst_addr, sizeof(dst_addr)))
{
return -1;
}
if (dev) {
struct ifreq interface;
strncpy(interface.ifr_ifrn.ifrn_name, dev, IFNAMSIZ);
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface)) < 0) {
return -1;
}
}
return sockfd;
}
void output_udp_clear_connect(int sockfd)
{
close(sockfd);
}
// send udp packet
int output_udp_send_connect(int sockfd, uint8_t *data, int datalen)
{
int to_send_len=datalen;
int already_sended_len=0;
while(to_send_len>0)
{
already_sended_len= send(sockfd, data, datalen, 0);
if(already_sended_len==-1)
{
if((EAGAIN == errno)||( EINTR == errno )|| (EWOULDBLOCK==errno))
{
continue;
}
else
{
printf("udpout_send_connect: loss data %s\n",strerror(errno));
return -1;
}
}
to_send_len-=already_sended_len;
}
return already_sended_len;
}
void input_udp_clear(int sockfd)
{
close(sockfd);
}
int init_unix_socket(const char* file_name)
{
int sockfd = -1;
int len = 0;
struct sockaddr_un un;
struct timeval send_timeout;
int send_buf_size = 1024*1024*4;
if(strlen(file_name)+8>sizeof(un.sun_path))
{
printf("Unix-domain socket file name too long.\n");
return -1;
}
sockfd=socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd<0)
{
printf("Get Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
send_timeout.tv_sec = 0;
send_timeout.tv_usec = 100000;
memset(&un,0,sizeof(un));
un.sun_family = AF_UNIX;
if(-1==setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,&send_timeout,sizeof(send_timeout)))
{
printf("Set Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
if(-1==setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&send_buf_size,sizeof(send_buf_size)))
{
printf("Set Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
snprintf(un.sun_path,sizeof(un.sun_path),"%s",file_name);
len = offsetof(struct sockaddr_un, sun_path) + strlen(un.sun_path);
unlink(un.sun_path);
if(0 > bind(sockfd,(struct sockaddr*)&un,len))
{
printf("Bind Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
return sockfd;
}
int unix_socket_send(int sockfd, struct sockaddr_un *dest_un, const char*data, int datalen)
{
int to_send_len = datalen;
int already_sended_len = 0;
int sock_addr_len=offsetof(struct sockaddr_un,sun_path)+strlen(dest_un->sun_path);
while(to_send_len>0)
{
already_sended_len= sendto(sockfd, data, datalen,0,(struct sockaddr*)dest_un, sock_addr_len);
if(already_sended_len==-1)
{
return -1;
}
to_send_len -= already_sended_len;
}
return already_sended_len;
}
int init_recv_udp_socket(uint16_t port)
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd)
{
perror("listener: socket");
return -1;
}
struct sockaddr_in my_addr; /* my address information */
my_addr.sin_family = AF_INET; /* host byte order */
my_addr.sin_port = port; /* short, network byte order */
my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */
bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("listener: bind");
close(sockfd);
return -1;
}
return sockfd;
}
int recv_udp_socket_recv(int sockfd, uint32_t *src_ip, uint8_t *buf, uint32_t buf_size)
{
if (NULL == buf) return -1;
int numbytes;
struct sockaddr_storage their_addr;
socklen_t addr_len = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, buf, buf_size , 0,(struct sockaddr *)&their_addr, &addr_len)) == -1)
{
perror("recvfrom");
return -1;
}
*src_ip = ((struct sockaddr_in *)&their_addr)->sin_addr.s_addr;
return numbytes;
}
int init_recv_unix_socket(const char* file_name)
{
int sockfd=-1;
int len;
struct sockaddr_un un;
if(strlen(file_name)+8>sizeof(un.sun_path))
{
printf("Unix-domain socket file name too long.\n");
return -1;
}
sockfd=socket(AF_UNIX,SOCK_DGRAM,0);
if(sockfd<0)
{
printf("Get Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
memset(&un,0,sizeof(un));
un.sun_family=AF_UNIX;
snprintf(un.sun_path,sizeof(un.sun_path),"%s",file_name);
len=offsetof(struct sockaddr_un,sun_path)+strlen(un.sun_path);
unlink(un.sun_path);
if(0>bind(sockfd,(struct sockaddr*)&un,len))
{
printf("Bind Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
return sockfd;
}
int recv_unix_socket_recv(int sockfd,char*buf,int buf_len)
{
int recv_len = 0;
struct sockaddr_storage sa;
socklen_t sa_len;
recv_len = recvfrom(sockfd,buf,buf_len,0,(struct sockaddr*)&sa,&sa_len);
return recv_len;
}

View File

@@ -0,0 +1,28 @@
#ifndef _MY_SOCKET_H_
#define _MY_SOCKET_H_
#include <stdint.h>
#include <sys/un.h>
#define SOCKET_BUF_SIZE 1500
#ifdef __cplusplus
extern "C" {
#endif
int init_unix_socket(const char* file_name);
int unix_socket_send(int sockfd, struct sockaddr_un *dest_un, const char*data, int datalen);
int init_recv_udp_socket(uint16_t port);
int recv_udp_socket_recv(int sockfd, uint32_t *src_ip, uint8_t *buf, uint32_t buf_size);
int init_recv_unix_socket(const char* file_name);
int recv_unix_socket_recv(int sockfd,char*buf,int buf_len);
int init_send_udp_socket();
int send_udp_socket_send(int sockfd, uint32_t addr, uint16_t port, char *data, int datalen);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,12 @@
all:
cd src; $(MAKE);
cd test; $(MAKE);
cd test_readfile; $(MAKE);
cd test_md5;$(MAKE);
clean:
cd src; $(MAKE) clean;
cd test; $(MAKE) clean;
cd test_readfile; $(MAKE) clean;
cd test_md5;$(MAKE) clean;
rm -f lib/usm_comm*;

View File

@@ -0,0 +1,68 @@
#ifndef MESA_HANDLE__LOGGER_H
#define MESA_HANDLE__LOGGER_H
/*
* runtime_log with handle,
* based on runtime_log.
* yang wei
* create time:2014-03-24
* version:20140324
*/
#ifdef __cplusplus
extern "C"
{
#endif
#define RLOG_LV_DEBUG 10
#define RLOG_LV_INFO 20
#define RLOG_LV_FATAL 30
#define MESA_HANDLE_RUNTIME_LOG(handle, lv, mod, fmt, args...) \
MESA_handle_runtime_log((handle), (lv), (mod), "file %s, line %d, " fmt, \
__FILE__, __LINE__, ##args)
/*
* name: MESA_create_runtime_log_handle
* functionality: get runtime_log handle;
* params:
* file_path: path of log file, like "./log/runtime_log";
* level: level of log;
* returns:
* not NULL, if succeeded;
* NULL, if file is not absolute path, or failed to create log file;
*/
void *MESA_create_runtime_log_handle(const char *file_path, int level);
/*
* name: MESA_handle_runtime_log
* functionality: appends log message to runtime log file;
* params:
* handle:handle of runtime log, which is created by MESA_create_runtime_log_handle;
* level: log level, messages with level value smaller the global var
* "runtime_log_level" are ignored;
* module: name of loggin module;
* fmt: format string;
* returns:
* none;
*/
void MESA_handle_runtime_log(void *handle, int level, const char *module, const char *fmt, ...);
/*
* name: MESA_destroy_runtime_log_handle
* functionality: release runtime log handle memory.
* params:
* handle: runtime log handle which is going to be released;
* returns:
* none;
*/
void MESA_destroy_runtime_log_handle(void *handle);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,114 @@
#ifndef _MESA_LIST_V3_H_
#define _MESA_LIST_V3_H_
#ifdef __cplusplus
extern "C"
{
#endif
#define MESA_LQUEUE_VERSION "MESA_lqueue_2014.03.24_12:00:00"
/*
MESA_list <20><><EFBFBD><EFBFBD><EFBFBD>
1-<2D><><EFBFBD><EFBFBD><EFBFBD>̰߳<DFB3>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>;
2-<2D><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>ṹ, <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ӿڸ<D3BF><DAB8><EFBFBD><EFBFBD><EFBFBD>;
3-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><E1B9B9>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>;
*/
#define MESA_LIST_OP_PLACE_HEAD (0x1)
#define MESA_LIST_OP_PLACE_TAIL (0x2)
#define MESA_list_GET (0x1)
#define MESA_list_JOIN (0x2)
#define MESA_list_BOLCK (0x4)
#define MESA_list_NONBOLCK (0x8)
#define MESA_list_JOIN_BLOCK (MESA_list_JOIN|MESA_list_BOLCK)
#define MESA_list_JOIN_NONBLOCK (MESA_list_JOIN|MESA_list_NONBOLCK)
#define MESA_list_GET_BLOCK (MESA_list_GET|MESA_list_BOLCK)
#define MESA_list_GET_NONBLOCK (MESA_list_GET|MESA_list_NONBOLCK)
typedef void * MESA_lqueue_head;
typedef int (* MESA_lqueue_cb_t)(void *data, long data_len, void *arg);
/* All of the following functions return value */
typedef enum{
MESA_QUEUE_RET_OK = 0, /* success */
MESA_QUEUE_RET_COMMON_ERR = -1, /* general<61><6C>undefined errors */
MESA_QUEUE_RET_ARG_ERR = -2, /* invalid args */
MESA_QUEUE_RET_NUM_FULL = -3, /* queue number full */
MESA_QUEUE_RET_MEM_FULL = -4, /* queue memory full */
MESA_QUEUE_RET_QEMPTY = -5, /* queue empty */
MESA_QUEUE_RET_LEN_ERR = -6, /* length error */
MESA_QUEUE_RET_CANT_GET_LOCK = -7, /* can't get lock in non-block mode */
MESA_QUEUE_RET_GET_LOCK_TMOUT = -8, /* get lock timeout */
}MESA_queue_errno_t;
/*
args description:
[IN]
thread_safe : 1:create thread safe queue; 0:without thread safe insurance.
max_item_num: maximum queue items of the queue, 0 means infinity.
*/
MESA_lqueue_head MESA_lqueue_create(int thread_safe, long max_item_num);
/*
attention:
The follow two functions is get some value of queue in a moment,
however, the value you got is not exactly,
because it's maybe changed immediately by other thread when this functions is return.
*/
long MESA_lqueue_get_mem_used(MESA_lqueue_head head);
long MESA_lqueue_get_count(MESA_lqueue_head head);
/*
args description:
[IN]:
lq_head : the handler of MESA_lqueue.
[OUT]:
data : receive buffer.
[IN && OUT]:
data_len:
is value-result argument, like "addrlen of recvfrom(2)",
the caller should initialize the size of the 'data',
will modified on return to indicate the actual size of the queue item.
*/
int MESA_lqueue_read_head(MESA_lqueue_head lq_head, void *data, long *data_len);
int MESA_lqueue_get_head(MESA_lqueue_head lqhead, void *data, long *data_len);
/*
if return value of "cb" is 0, the behaviour is like MESA_lqueue_read_head(),
else if return value of "cb" is not 0, the behaviour is like MESA_lqueue_get_head().
*/
int MESA_lqueue_detect_get_head(MESA_lqueue_head lq_head, MESA_lqueue_cb_t cb, void *data, long *data_len, void *cb_arg);
int MESA_lqueue_get_tail(MESA_lqueue_head lq_head, void *data, long *data_len);
int MESA_lqueue_join_head(MESA_lqueue_head lq_head, const void *data, long data_len);
int MESA_lqueue_join_tail(MESA_lqueue_head lq_head, const void *data, long data_len);
/* these functions features same with above no "try",
except shall return immediately, in other word is "Non-block mode"!
*/
int MESA_lqueue_try_read_head(MESA_lqueue_head lq_head, void *data, long *data_len);
int MESA_lqueue_try_get_head(MESA_lqueue_head lq_head, void *data, long *data_len);
int MESA_lqueue_try_get_tail(MESA_lqueue_head lq_head, void *data, long *data_len);
int MESA_lqueue_try_join_head(MESA_lqueue_head lq_head, const void *data, long data_len);
int MESA_lqueue_try_join_tail(MESA_lqueue_head lq_head, const void *data, long data_len);
void MESA_lqueue_destroy(MESA_lqueue_head head, MESA_lqueue_cb_t cb, void *cb_arg);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,107 @@
#ifndef __MESA_RING_QUEUE_H_
#define __MESA_RING_QUEUE_H_ 1
#ifdef __cplusplus
extern "C"
{
#endif
typedef void * MESA_ring_queue_head;
#define MESA_RING_QUEUE_VERSION_MACRO (20160708)
extern const unsigned int MESA_RING_QUEUE_VERSION_INT;
/* All of the following functions return value */
typedef enum{
MESA_RQUEUE_RET_OK = 0, /* success */
MESA_RQUEUE_RET_COMMON_ERR = -1, /* general<61><6C>undefined errors */
MESA_RQUEUE_RET_ARG_ERR = -2, /* invalid args */
MESA_RQUEUE_RET_NUM_FULL = -3, /* queue number full */
MESA_RQUEUE_RET_MEM_FULL = -4, /* queue memory full */
MESA_RQUEUE_RET_QEMPTY = -5, /* queue empty */
MESA_RQUEUE_RET_LEN_ERR = -6, /* length error */
MESA_RQUEUE_RET_CANT_GET_LOCK = -7, /* can't get lock in non-block mode */
MESA_RQUEUE_RET_GET_LOCK_TMOUT = -8, /* get lock timeout */
}MESA_ring_queue_errno_t;
/*
args description:
[IN]
thread_safe : 1:create thread safe queue; 0:without thread safe insurance.
max_item_num: maximum queue items of the queue, must more than zero.
*/
MESA_ring_queue_head MESA_ring_queue_born(void);
enum MESA_rq_opt{
RQO_THREAD_SAFE = 0, /* must be int, 1:create ring qqueue with thread safe features, default is 1 */
RQO_RING_ELEMENT_NUM, /* must be unsigned int, defalut is 1000. */
RQO_PRE_ALLOC_BUF_LEN, /* must be unsigned int, Ԥ<>ȷ<EFBFBD><C8B7><EFBFBD>ÿ<EFBFBD><C3BF>item<65><6D><EFBFBD>ڴ<EFBFBD>, <20>Ժ<EFBFBD>ֻ<EFBFBD><D6BB>memcpy */
RQO_MULTI_THREAD_LOCK_FREE, /* must be int, default is 0, conflict with RQO_THREAD_SAFE */
};
/*
to set features of specified MESA_ring_queue_headhandle.
opt_type: option type, refer to enum MESA_htable_opt;
opt_val : option value, depend on opt type;
opt_len : opt_val size, depend on opt type;
return value:
0 :success;
<0:error;
*/
int MESA_ring_queue_set_opt(MESA_ring_queue_head rq, enum MESA_rq_opt opt_type, void *opt_val, int opt_len);
/*
Construct ring queue and ready to running.
return value:
0 : success;
<0: error.
*/
int MESA_ring_queue_mature(MESA_ring_queue_head rq);
int MESA_ring_queue_get_count(MESA_ring_queue_head head);
/*
args description:
[IN]:
lq_head : the handler of MESA_ring_queue.
[OUT]:
data : receive buffer.
[IN && OUT]:
data_len:
is value-result argument, like "addrlen of recvfrom(2)",
the caller should initialize the size of the 'data',
will modified on return to indicate the actual size of the queue item.
*/
int MESA_ring_queue_read(MESA_ring_queue_head rq_head, void *data, int *data_len);
int MESA_ring_queue_get(MESA_ring_queue_head rqhead, void *data, int *data_len);
int MESA_ring_queue_join(MESA_ring_queue_head rq_head, const void *data, int data_len);
/* these functions features same with above no "try",
except shall return immediately, in other word is "Non-block mode"!
*/
int MESA_ring_queue_try_read(MESA_ring_queue_head rq_head, void *data, int *data_len);
int MESA_ring_queue_try_get(MESA_ring_queue_head rqhead, void *data, int *data_len);
int MESA_ring_queue_try_join(MESA_ring_queue_head rq_head, const void *data, int data_len);
typedef int (* MESA_rqueue_cb_t)(void *data, long data_len, void *arg);
void MESA_ring_queue_destroy(MESA_ring_queue_head rq_head, MESA_rqueue_cb_t cb, void *cb_arg);
const char *MESA_ring_queue_strerror(MESA_ring_queue_errno_t error_num);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,9 @@
#ifndef _OUTPUT_H_
#define _OUTPUT_H_
#include <stdint.h>
#include <sys/un.h>
// send udp packet
int init_output_un_socket(const char* file_name);
int named_unix_domain_socket_send(int un_sd,struct sockaddr_un *dest_un,const char*data,int datalen);
#endif /* _OUTPUT_H_ */

View File

@@ -0,0 +1,78 @@
/*
* usm_api.h
*
* Created on: 2017-1-17
* Author: dmj
*/
#ifndef __USM_COMM_H_INCLUDE_
#define __USM_COMM_H_INCLUDE_
#ifdef __cplusplus
extern "C" {
#endif
/*
#ifndef uint64_t
typedef unsigned long long uint64_t;
#endif
#ifndef uint16_t
typedef unsigned int uint16_t;
#endif
*/
typedef struct
{
}USM_t;
#define USM_READER 0x01
#define USM_WRITER 0x02
enum USM_rst_t
{
USM_SUCC = 0,
USM_RD_SHMGET_ERR = -1,
USM_SHMCTL_ERR = -2,
USM_WT_SHMGET_ERR = -3,
USM_SHMAT_ERR = -4,
USM_SOCKET_INIT_ERR = -5,
USM_QUEUE_INIT_ERR = -6
};
enum USM_opt_t
{
SHM_BUF_SIZE,//WRITER and READER VIEW.VALUE is interger,SIZE=sizeof(int). DEFAULT:65535.
READER_CNT,//WRITER VIEW.
SMOOTH_TIME,//WRITER VIEW.but every reader need to set
READER_ID,//READER VIEW.VALUE is interger,SIZE=sizeof(int). 0-7.Reader needs set read_id first.
MAX_LQUEUE_SIZE,//READER VIEW.VALUE is interger,SIZE=sizeof(int). DEFAULT:1500.
READER_PATH,//READER VIEW.data is a const char* und_path, define the reader's Unix named domain socket file path. return reader id if success.
LOG_HANDLE
};
enum USM_stat_t
{
WRITED_SIZE,
WRITED_CNT,
WRITING_CLASH_SIZE,
WRITING_CLASH_CNT,
SENDED_CNT, //READERS
READED_SIZE,
READED_CNT,
READER_DROP_SIZE,//number of reader missed due to overwrite
READER_DROP_CNT,
READING_CLASH_SIZE,
READING_CLASH_CNT,
LQ_COUNT
};
USM_t* USM_handle(int shm_key,uint64_t shm_size,int role);
int USM_init(USM_t* handle);
int USM_write(USM_t* handle,const char* data,int datalen);
int USM_read(USM_t* handle,char** data,int* datalen,int* data_cnt);
int USM_set_opt(USM_t* handle,enum USM_opt_t type,void* data,int size,int reader_id);
uint64_t USM_stat(USM_t* handle,enum USM_stat_t type,int reader_id);
#ifdef __cplusplus
}
#endif
#endif

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,29 @@
CC=gcc
CCC=g++
CFLAGS=-g -Wall -fPIC -shared
LIBPATH=../lib/
H_DIR=-I../inc
OBJS=usm.o output.o
TARGET=usm_comm.a usm_comm.so
all:$(TARGET)
.c.o:
$(CC) -c $(CFLAGS) -I. $(H_DIR) $<
.cpp.o:
$(CCC) -c $(CFLAGS) -I. $(H_DIR) $<
usm_comm.a: $(OBJS)
echo making static lib ...
(rm -f $@ ;ar -r $@ $^; cp $@ $(LIBPATH);)
usm_comm.so: $(OBJS)
echo making dynamic lib ...
(rm -f $@; gcc -o $@ $(CFLAGS) $^; cp $@ $(LIBPATH);)
clean:
rm -f *.o $(TARGET)

View File

@@ -0,0 +1,94 @@
// output.c
//
//
//
// MODIFIED by
// CREATED BY Guo Le, 08/24/2010
// use sendnto instead of sendto, zhengchao@iie.ac.cn 2012-05-30
// add Unix-domain sokcet,zhengchao@iie.ac.cn 2012-06-04
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/un.h>
#include <stddef.h>//offsetof
#include "output.h"
int init_output_un_socket(const char* file_name)
{
int sd=-1;
int len;
struct sockaddr_un un;
struct timeval send_timeout;
//int send_buf_size=1024*16;
int send_buf_size=1024*1024*4;
if(strlen(file_name)+8>sizeof(un.sun_path))
{
printf("Unix-domain socket file name too long.\n");
return -1;
}
sd=socket(AF_UNIX,SOCK_DGRAM,0);
if(sd<0)
{
printf("Get Unix-domain socket error:%s\n",strerror(errno));
return -1;
}/*
flags=fcntl(sd,F_GETFL);
flags|=O_NONBLOCK;
if(fcntl(sd,F_SETFL,flags)==-1)
{
printf("Set Unix-domain socket error:%s",strerror(errno));
return -1;
}*/
send_timeout.tv_sec=0;
send_timeout.tv_usec=100000;
memset(&un,0,sizeof(un));
un.sun_family=AF_UNIX;
if(-1==setsockopt(sd,SOL_SOCKET,SO_SNDTIMEO,&send_timeout,sizeof(send_timeout)))
{
printf("Set Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
if(-1==setsockopt(sd,SOL_SOCKET,SO_SNDBUF,&send_buf_size,sizeof(send_buf_size)))
{
printf("Set Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
snprintf(un.sun_path,sizeof(un.sun_path),"%s",file_name);
len=offsetof(struct sockaddr_un,sun_path)+strlen(un.sun_path);
unlink(un.sun_path);
if(0>bind(sd,(struct sockaddr*)&un,len))
{
printf("Bind Unix-domain socket error:%s\n",strerror(errno));
return -1;
}
return sd;
}
int named_unix_domain_socket_send(int un_sd,struct sockaddr_un *dest_un,const char*data,int datalen)
{
int to_send_len=datalen;
int already_sended_len=0;
int sock_addr_len=offsetof(struct sockaddr_un,sun_path)+strlen(dest_un->sun_path);
while(to_send_len>0)
{
already_sended_len= sendto(un_sd, data, datalen,0,(struct sockaddr*)dest_un, sock_addr_len);
if(already_sended_len==-1)
{
//DEBUG_PRINTF("Unix-domain send data: loss data %s\n",strerror(errno));
return -1;
}
to_send_len-=already_sended_len;
}
return already_sended_len;
}

View File

@@ -0,0 +1,690 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
#include <pthread.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/shm.h>
#include <sys/mman.h>
#include <assert.h>
#include "usm_api.h"
#include "output.h"
#include "MESA_ring_queue.h"
#include "MESA_handle_logger.h"
#define USM_COMM "usm_comm.so"
#define MAX_READER_NUM 7
#define MAX_UND_PATH_SIZE 128
#define MAX_WRAP_NUM ((1500 - 8 - 4)/sizeof(uint32_t))//372
#define SUIT_WRAP_NUM 20
#define MTU_SIZE 1500
#define MAX_LQ_SIZE_DE 8*1024*1024
#define SM_TM_DE 1000000//nsec
#define atomic_t unsigned long long
void usm_version_0_9_20170314()
{
//20170117 V0.1 create the new project,define api
//20170208 V0.2 first whole project.reader side is muti-threading
//20170210 V0.3 alter reader side to single thread
//20170214 v0.4 test for 10w write.
//20170216 v0.5 test online first.alter the use of timespec and mesa_lq
//20170221 v0.6 tentative joint debugging with ict
//20170222 v0.7 attempt memory barrier
//20170223 v0.8 muti_users md5 verify succeed,use uint64_t flag in _pkt_node
//20170309 v0.9 intergrate usm_read
//20170310 v0.9 debug for single thread
//20170313 v0.9 support no_block for sending_thread
//20170314 v0.9 support muti-thread by atomic
//20170314 v0.9 alter MESA_ring_queue
}
struct _msg_header
{
uint16_t magic_num;
uint8_t version;
uint8_t msg_type;
uint32_t cont_len;
};
#define MSG_HEADER_LEN sizeof(struct _msg_header)
typedef struct msg_metainfo_s
{
char prog_id[8];
char flag;
uint8_t hitservice;
uint64_t prog_len:48;
uint32_t cap_IP;
uint8_t protocol;
uint8_t media_type;
uint8_t data_flag;
uint8_t opt_num;
}msg_metainfo_t;
/*
struct _pkt_node
{
union{
volatile char flag[2];
volatile short iflag;
};
time_t timestamp;
uint16_t pkt_len;
char pkt_data[MTU_SIZE];
};*/
struct _pkt_node
{
uint64_t flag[MAX_READER_NUM + 1];
time_t timestamp;
uint64_t pkt_len;
char pkt_data[MTU_SIZE+4];
};
struct _usm_stat_t
{
uint64_t wt_pktnum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
uint64_t wt_datalen;
uint64_t err_wting_pktnum;//<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>¼
uint64_t err_wting_datalen;
};
struct _usm_reader_stat_t
{
uint64_t sd_pktnum;//<2F>ѷ<EFBFBD><D1B7><EFBFBD>
uint64_t rd_pktnum;//<2F><><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>ȡ
uint64_t rd_datalen;
uint64_t not_rd_pktnum;//δ<><CEB4><EFBFBD>ɶ<EFBFBD>ȡ
uint64_t not_rd_datalen;
uint64_t err_rding_pktnum;//<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>¼
uint64_t err_rding_datalen;
uint64_t lq_count;
};
struct _usm_dest_t
{
int un_sd;
int max_lqueue_size;
//int lq_flag;//err:1
void* log_handle;
MESA_ring_queue_head msg_queue;//writer:send_msg_queue
long smooth_time;
struct _usm_reader_stat_t stat;
char reader_path[MAX_UND_PATH_SIZE];
};
struct _usm_writer
{
int reader_cnt;
unsigned long long latest_wt_ofst;
struct _usm_dest_t readers[MAX_READER_NUM];
struct _usm_stat_t wt_view_stat;
};
struct _usm_reader
{
int reader_id;
int un_sd;
//int max_lqueue_size;
void* log_handle;
//MESA_lqueue_head pkt_queue;
char reader_path[MAX_UND_PATH_SIZE];
};
struct _usm_handle_t
{
int shm_key;
int role;
struct _pkt_node* shm_addr;
uint64_t shm_size;
union
{
struct _usm_writer writer_info;
struct _usm_reader reader_info;
};
};
struct _usm_outer_msg_t
{
struct _msg_header header;
uint32_t msg_cnt;
uint32_t offset[MAX_WRAP_NUM];
};
USM_t* USM_handle(int shm_key,uint64_t shm_size,int role)
{
struct _usm_handle_t* _handle = (struct _usm_handle_t*)malloc(sizeof(struct _usm_handle_t));
memset(_handle,0,sizeof(struct _usm_handle_t));
_handle->shm_key = shm_key;
_handle->shm_size = shm_size;
_handle->role = role;
if(_handle->role == USM_WRITER)
{
int i =0;
for(i =0;i<MAX_READER_NUM;i++)
{
_handle->writer_info.readers[i].max_lqueue_size = MAX_LQ_SIZE_DE;
_handle->writer_info.readers[i].smooth_time = SM_TM_DE;
}
}
return (USM_t*)_handle;
}
int USM_set_opt(USM_t* handle,enum USM_opt_t type,void* data,int size,int reader_id)
{
struct _usm_handle_t *_handle = (struct _usm_handle_t*)handle;
switch(type)
{
case READER_CNT:
_handle->writer_info.reader_cnt = *(const int*)data;
break;
case READER_ID:
_handle->reader_info.reader_id = *(const int*)data;
break;
case SMOOTH_TIME:
if(_handle->role == USM_WRITER)
{
_handle->writer_info.readers[reader_id].smooth_time = *(const int*)data;
}
break;
case MAX_LQUEUE_SIZE:
if(_handle->role == USM_WRITER)
{
_handle->writer_info.readers[reader_id].max_lqueue_size = *(const int*)data;
}
break;
case READER_PATH:
if(_handle->role == USM_READER)
{
memcpy(_handle->reader_info.reader_path,(const char*)data,size);
}
else
{
memcpy(_handle->writer_info.readers[reader_id].reader_path,(const char*)data,size);
}
break;
case LOG_HANDLE:
if(_handle->role == USM_READER)
{
_handle->reader_info.log_handle = data;
}
else
{
_handle->writer_info.readers[reader_id].log_handle = data;
}
break;
default:
break;
}
return USM_SUCC;
}
void* sending_thread(void * reader)
{
int rst = 0;
struct _usm_dest_t *_reader=(struct _usm_dest_t *)reader;
struct _usm_outer_msg_t to_send;
memset(&to_send,0,sizeof(struct _usm_outer_msg_t));
to_send.header.magic_num = 0x5641;
to_send.header.version = 3;
to_send.header.msg_type = 0x50;
struct timespec last_send_time,now;
struct sockaddr_un dest_un;
memset(&dest_un,0,sizeof(struct sockaddr_un));
dest_un.sun_family=AF_UNIX;
snprintf(dest_un.sun_path,sizeof(dest_un.sun_path),"%s",_reader->reader_path);
uint32_t offset = 0;
long offset_len = sizeof(offset);
long lq_count = 0;
clock_gettime(CLOCK_MONOTONIC,&last_send_time);//init
int sent_cnt = 0;
int send_len = 0;
while(1)
{
clock_gettime(CLOCK_MONOTONIC,&now);
//lq_count = MESA_lqueue_get_count(_reader->msg_queue);
//lq_count = MESA_ring_queue_get_count(_reader->msg_queue);
//_reader->stat.lq_count = lq_count;
//if(lq_count > 0)
//{
//p = (struct _usm_inner_msg_t*)malloc(sizeof(struct _usm_inner_msg_t));
//q = p;
if(to_send.msg_cnt < MAX_WRAP_NUM)//boundary protection
{
//if(MESA_ring_queue_get_count(_reader->msg_queue))
//{
rst = MESA_ring_queue_get(_reader->msg_queue,&offset,&offset_len);
if(rst < 0)
{
MESA_handle_runtime_log(_reader->log_handle, RLOG_LV_FATAL, USM_COMM,
"MESA_rqueue_get failed. error num is %d.\n",rst);
}
else
{
//debug
//MESA_handle_runtime_log(_reader->log_handle, RLOG_LV_FATAL, USM_COMM,
//"GET offset is %d.",offset);
to_send.offset[to_send.msg_cnt] = offset;
to_send.msg_cnt++;
}
//}
}
else
{
//empty
}
if((to_send.msg_cnt >= SUIT_WRAP_NUM)||
((now.tv_sec - last_send_time.tv_sec)*1000000000 + (now.tv_nsec - last_send_time.tv_nsec) > _reader->smooth_time))
//if(to_send.msg_cnt >= SUIT_WRAP_NUM)
{
to_send.header.cont_len = to_send.msg_cnt*sizeof(uint32_t) + sizeof(uint32_t);
send_len = sizeof(struct _msg_header) + to_send.header.cont_len;
//clock_gettime(CLOCK_MONOTONIC,&test_now);
//printf("send before: %lluus.\n",test_now.tv_sec*1000000 + test_now.tv_nsec/1000);
rst = named_unix_domain_socket_send(_reader->un_sd,&dest_un,(const char*)&to_send,send_len);
//clock_gettime(CLOCK_MONOTONIC,&test_now);
//printf("send after: %lluus.\n",test_now.tv_sec*1000000 + test_now.tv_nsec/1000);
if(-1 == rst)
{
MESA_handle_runtime_log(_reader->log_handle, RLOG_LV_FATAL, USM_COMM,"Unix-domain send data: loss data %s.",strerror(errno));
}
else
{
MESA_handle_runtime_log(_reader->log_handle, RLOG_LV_DEBUG, USM_COMM,
"Send msg%d to %s. un_sd:%d. msg_cnt:%llu.last offset is %llu. Time:%lds %ldns.",
sent_cnt,_reader->reader_path,_reader->un_sd,to_send.msg_cnt,to_send.offset[to_send.msg_cnt -1],
now.tv_sec,now.tv_nsec);
//debug
/*int i =0;
for(i = 0;i<to_send.msg_cnt;i++)
{
MESA_handle_runtime_log(_reader->log_handle, RLOG_LV_DEBUG, USM_COMM,
"offset is %llu.",to_send.offset[i]);
}*/
_reader->stat.sd_pktnum += to_send.msg_cnt;
sent_cnt ++;
last_send_time = now;
}
to_send.msg_cnt = 0;//reset
}
//}
}
}
int USM_init(USM_t* handle)
{
struct _usm_handle_t *_handle = (struct _usm_handle_t*)handle;
pthread_t thread_id[_handle->writer_info.reader_cnt];
//pthread_attr_t attr;
uint16_t i = 0;
uint32_t rq_buflen = sizeof(uint32_t);
uint32_t rq_num = 0;
int shmid;
shmid = shmget((key_t)_handle->shm_key, sizeof(struct _pkt_node)*_handle->shm_size, 0666 | IPC_CREAT);
if(shmid == -1)
{
if(_handle->role == USM_READER)
{
return USM_RD_SHMGET_ERR;
}
else
{
//get err with writer
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
return USM_SHMCTL_ERR;
}
shmid = shmget((key_t)_handle->shm_key, sizeof(struct _pkt_node)*_handle->shm_size, 0666 | IPC_CREAT);
if(shmid == -1)
{
return USM_WT_SHMGET_ERR;
}
}
}
printf("Apply the shared memory SUCCEED. The shmid is %d.\n",shmid);
//shmat to local variable, namely shm_addr
_handle->shm_addr = (struct _pkt_node*)shmat(shmid, (void *)0, 0);
if(_handle->shm_addr == (void*)-1)
{
return USM_SHMAT_ERR;
}
printf("Link the shared memory SUCCEED.\n");
if(_handle->role == USM_WRITER)
{
memset(_handle->shm_addr,0,sizeof(struct _pkt_node)*_handle->shm_size);
printf("Clean the shm finished.\n");
}
/*if(0 > mprotect(_handle->shm_addr,sizeof(struct _pkt_node)*_handle->shm_size,PROT_NONE))
{
printf("mprotect PROT_NONE error: %s.",strerror(errno));
}*/
char file_name[128]={0};
if(_handle->role == USM_READER)
{
_handle->reader_info.un_sd = init_output_un_socket(_handle->reader_info.reader_path);
if(_handle->reader_info.un_sd == -1)
{
return USM_SOCKET_INIT_ERR;
}
/*
struct timeval ti;
ti.tv_sec = 10;
ti.tv_usec = 0;
setsockopt(_handle->reader_info.un_sd,SOL_SOCKET,SO_RCVTIMEO,&ti,sizeof(ti));*/
}
else
{
for(i = 0; i < _handle->writer_info.reader_cnt; i++)
{
sprintf(file_name,"/home/usm_send%d",i);
//_handle->writer_info.readers[i].msg_queue = MESA_lqueue_create(1,_handle->writer_info.readers[i].max_lqueue_size);
_handle->writer_info.readers[i].msg_queue = MESA_ring_queue_born();
rq_num = _handle->writer_info.readers[i].max_lqueue_size;
MESA_ring_queue_set_opt(_handle->writer_info.readers[i].msg_queue,RQO_RING_ELEMENT_NUM,&(rq_num),sizeof(int));
MESA_ring_queue_set_opt(_handle->writer_info.readers[i].msg_queue,RQO_PRE_ALLOC_BUF_LEN,&rq_buflen,sizeof(uint32_t));
if(MESA_ring_queue_mature(_handle->writer_info.readers[i].msg_queue))
{
return USM_QUEUE_INIT_ERR;
}
_handle->writer_info.readers[i].un_sd = init_output_un_socket(file_name);
//_handle->writer_info.readers[i].un_sd = init_output_un_socket(_handle->writer_info.readers[i].reader_path);
if(_handle->writer_info.readers[i].un_sd == -1)
{
return USM_SOCKET_INIT_ERR;
}
pthread_create(&thread_id[i],NULL,sending_thread,&(_handle->writer_info.readers[i]));
//pthread_create(&thread_id[i],&attr,sending_thread,&(_handle->readers[i]));
}
}
return USM_SUCC;
}
int USM_write(USM_t * handle, const char * data, int datalen)
{
struct _usm_handle_t *_handle=(struct _usm_handle_t*)handle;
//int j=0;
int rst = 0;
/*for(j=0;j<_handle->writer_info->reader_cnt;j++)
{
if(_handle->writer_info->readers[j].lq_flag == 1)
{
}
}*/
//struct _usm_inner_msg_t *q=NULL;
//struct _usm_inner_msg_t p;
//memset(&p,0,sizeof(struct _usm_inner_msg_t));
uint32_t cur_offset = 0;
struct _pkt_node *curnode=NULL;
uint16_t i = 0;
unsigned long long to_use_offset=0;
assert( datalen <= MTU_SIZE );
//debug
/*struct _msg_header* msgheader = (struct _msg_header*)data;
msg_metainfo_t* msginfo = (msg_metainfo_t*)(data + MSG_HEADER_LEN);
assert(msgheader->magic_num == 22081);
if(msgheader->msg_type == 49)
{
assert(msginfo->opt_num == 0);
}*/
to_use_offset = __sync_fetch_and_add(&(_handle->writer_info.latest_wt_ofst),1);
to_use_offset = to_use_offset % _handle->shm_size;
curnode = _handle->shm_addr + to_use_offset;
//MESA_handle_runtime_log(_handle->writer_info.readers[0].log_handle, RLOG_LV_DEBUG, USM_COMM,
// "wt_ofst is %d.",_handle->writer_info.latest_wt_ofst);
/*if(0 > mprotect(_handle->shm_addr,sizeof(struct _pkt_node)*_handle->shm_size,PROT_WRITE))
{
printf("mprotect PROT_WRITE error: %s.",strerror(errno));
}*/
/*for(i = 0;i< _handle->writer_info.reader_cnt; i++)
{
MESA_handle_runtime_log(_handle->writer_info.readers[i].log_handle, RLOG_LV_DEBUG, USM_COMM,
"Cur_offset is %d. Before write flag is %o,%o. The buff length is %d. The fgets buff is %s. ",
_handle->writer_info.latest_wt_ofst,curnode->flag[0],curnode->flag[1],datalen,data);
}*/
//int flag = (int)curnode->flag[0] + (int)(curnode->flag[1] << 8);
//mb();
//writing err
//if(curnode->iflag&0x01)
if(curnode->flag[0]&0x01)
{
_handle->writer_info.wt_view_stat.err_wting_pktnum ++;
_handle->writer_info.wt_view_stat.err_wting_datalen += datalen;
}
for(i = 0;i < _handle->writer_info.reader_cnt; i++)
{
//reading err
//if(curnode->iflag&(0x01<<(i*2+2)))
if(curnode->flag[i+1]&0x01)
{
_handle->writer_info.readers[i].stat.err_rding_pktnum++;
_handle->writer_info.readers[i].stat.err_rding_datalen += datalen;
}
//read already
//if(curnode->iflag&(0x01<<(i*2+3)))
if(curnode->flag[i+1]&0x02)
{
_handle->writer_info.readers[i].stat.rd_pktnum++;
_handle->writer_info.readers[i].stat.rd_datalen += datalen;
}
else//not read
{
_handle->writer_info.readers[i].stat.not_rd_pktnum++;
_handle->writer_info.readers[i].stat.not_rd_datalen += datalen;
}
}
curnode->flag[0] |= 0x01;//set writing
curnode->pkt_len = datalen;
memcpy(curnode->pkt_data,data,curnode->pkt_len);
curnode->flag[0] &= 0x00;//set back to not writing
curnode->flag[0] |= 0x02;//set writen already
//set back to not read
for(i = 0;i < _handle->writer_info.reader_cnt; i++)
{
/*if(i<3)
{
curnode->flag[0] &= (~(0x01<<(i*2+3)));
}
else
{
curnode->flag[1] &= (~(0x01<<(i*2-5)));
}*/
curnode->flag[i+1]&=0x00;
}
/*if(0 > mprotect(_handle->shm_addr,sizeof(struct _pkt_node)*_handle->shm_size,PROT_NONE))
{
printf("mprotect PROT_NONE error: %s.",strerror(errno));
}*/
for(i=0;i<_handle->writer_info.reader_cnt;i++)
{
//MESA_handle_runtime_log(_handle->writer_info.readers[i].log_handle, RLOG_LV_DEBUG, USM_COMM,
//"After write flag is %o,%o.\n",curnode->flag[0],curnode->flag[1]);
}
cur_offset = to_use_offset;
//MESA_handle_runtime_log(_handle->writer_info.readers[0].log_handle, RLOG_LV_FATAL, USM_COMM,
//"cur offset is %d.",cur_offset);
for(i=0;i<_handle->writer_info.reader_cnt;i++)
{
//make a duplication of p
//q=(struct _usm_inner_msg_t*)malloc(sizeof(struct _usm_inner_msg_t));
//memcpy(q,&p,sizeof(p));
//rst = MESA_lqueue_join_tail(_handle->writer_info.readers[i].msg_queue,&cur_offset,sizeof(cur_offset));
rst = MESA_ring_queue_join(_handle->writer_info.readers[i].msg_queue,&cur_offset,sizeof(cur_offset));
//debug
//MESA_handle_runtime_log(_handle->writer_info.readers[i].log_handle, RLOG_LV_FATAL, USM_COMM,
// "JOIN offset is %d.",cur_offset);
if(rst < 0)
{
MESA_handle_runtime_log(_handle->writer_info.readers[i].log_handle, RLOG_LV_FATAL, USM_COMM,
"MESA_rqueue_join failed. error num is %d.\n",rst);
}
//int lq_count = MESA_lqueue_get_count(_handle->writer_info.readers[i].msg_queue);
//printf("MESA_lqueue cur_count %llu.\n",lq_count);
//MESA_handle_runtime_log(_handle->writer_info.readers[i].log_handle, RLOG_LV_DEBUG, USM_COMM,
//"MESA_lqueue cur_count %llu.\n",lq_count);
}
// _handle->writer_info.latest_wt_ofst = (_handle->writer_info.latest_wt_ofst + 1) % _handle->shm_size;
_handle->writer_info.wt_view_stat.wt_pktnum ++;
_handle->writer_info.wt_view_stat.wt_datalen += datalen;
return USM_SUCC;
}
int USM_read(USM_t* handle,char** data,int* datalen,int* data_cnt)
{
struct _usm_handle_t *_handle = (struct _usm_handle_t*)handle;
//MESA_lqueue_head pkt_queue = _handle->reader_info.pkt_queue;
int un_sd = _handle->reader_info.un_sd;
struct _pkt_node* shm_addr = _handle->shm_addr;
struct _pkt_node *curnode = NULL;
struct sockaddr sa;
socklen_t sa_len = sizeof(struct sockaddr);
struct _usm_outer_msg_t to_recv;
memset(&to_recv,0,sizeof(struct _usm_outer_msg_t));
int recv_len = 0;
int i = 0;
//uint64_t cur_offset = 0;
//long offset_len = sizeof(uint64_t);
//int rst = 0;
recv_len = recvfrom(un_sd,&to_recv,sizeof(struct _usm_outer_msg_t),0,(struct sockaddr*)&sa,&sa_len);
if(recv_len < 0)
{
MESA_handle_runtime_log(_handle->reader_info.log_handle, RLOG_LV_FATAL, USM_COMM,
"Unix-domain recv data: %s\n",strerror(errno));
return -1;
}
else
{
/*if(0 > mprotect(_handle->shm_addr,sizeof(struct _pkt_node)*_handle->shm_size,PROT_READ))
{
printf("mprotect PROT_READ error: %s.",strerror(errno));
}*/
*data_cnt = to_recv.msg_cnt;
for(i =0; i < to_recv.msg_cnt; i++)
{
curnode = shm_addr + to_recv.offset[i];
//MESA_handle_runtime_log(_handle->reader_info.log_handle, RLOG_LV_DEBUG, USM_COMM,
//"Recv flag is %d,%d.",curnode->flag[0],curnode->flag[1]);
//mb();
//set reading
/*if(_handle->reader_info.reader_id <3)
{
curnode->flag[0] |= (0x01 << (_handle->reader_info.reader_id*2 + 2));
}
else
{
curnode->flag[1] |= (0x01 << (_handle->reader_info.reader_id*2 - 6));
}*/
curnode->flag[_handle->reader_info.reader_id+1] |= 0x01;
//if(datalen[i] > curnode->pkt_len)
//{
datalen[i] = curnode->pkt_len;
//}
data[i] = curnode->pkt_data;//only copy pointer
//set not reading and set read already
/*if(_handle->reader_info.reader_id <3)
{
curnode->flag[0] &= (~(0x01 << (_handle->reader_info.reader_id*2 + 2)));
curnode->flag[0] |= (0x01 << (_handle->reader_info.reader_id*2 + 3));
}
else
{
curnode->flag[1] &= (~(0x01 << (_handle->reader_info.reader_id*2 - 6)));
curnode->flag[1] |= (0x01 << (_handle->reader_info.reader_id*2 - 5));
}*/
curnode->flag[_handle->reader_info.reader_id+1] &= 0x00;
curnode->flag[_handle->reader_info.reader_id+1] |= 0x02;
/*MESA_handle_runtime_log(_handle->reader_info.log_handle, RLOG_LV_DEBUG, USM_COMM,
"After read flag is %d,%d. The length is %d. The read out buff is %s.",
curnode->flag[0],curnode->flag[1],*datalen,data); */
}
}
return 0;
}
uint64_t USM_stat(USM_t* handle,enum USM_stat_t type,int reader_id)
{
uint64_t i=0;
struct _usm_handle_t *_handle=(struct _usm_handle_t*)handle;
switch(type)
{
case WRITED_SIZE:
i = _handle->writer_info.wt_view_stat.wt_datalen;
break;
case WRITED_CNT:
i = _handle->writer_info.wt_view_stat.wt_pktnum;
break;
case WRITING_CLASH_SIZE:
i = _handle->writer_info.wt_view_stat.err_wting_datalen;
break;
case WRITING_CLASH_CNT:
i = _handle->writer_info.wt_view_stat.err_wting_pktnum;
break;
case SENDED_CNT:
i = _handle->writer_info.readers[reader_id].stat.sd_pktnum;
break;
case READED_SIZE:
i = _handle->writer_info.readers[reader_id].stat.rd_datalen;
break;
case READED_CNT:
i = _handle->writer_info.readers[reader_id].stat.rd_pktnum;
break;
case READER_DROP_SIZE:
i = _handle->writer_info.readers[reader_id].stat.not_rd_datalen;
break;
case READER_DROP_CNT:
i = _handle->writer_info.readers[reader_id].stat.not_rd_pktnum;
break;
case READING_CLASH_SIZE:
i = _handle->writer_info.readers[reader_id].stat.err_rding_datalen;
break;
case READING_CLASH_CNT:
i = _handle->writer_info.readers[reader_id].stat.err_rding_pktnum;
break;
case LQ_COUNT:
i = _handle->writer_info.readers[reader_id].stat.lq_count;
break;
default:
break;
}
return i;
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,19 @@
CC=gcc
CCC=g++
CFLAGS=-g -Wall
INCLUDE=-I../inc/
LIB=-lrt -lpthread -lMESA_htable -lMESA_handle_logger
LIB+=../lib/usm_comm.so
#LIB+=../lib/libcommon.a
TARGET=test_writer test_reader0 test_reader1 test_reader2
all:
gcc $(CFLAGS) -o test_writer test_writer.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o test_reader0 test_reader.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o test_reader1 test_reader1.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o test_reader2 test_reader2.c $(INCLUDE) $(LIB)
clean:
rm -f *.o $(TARGET)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,96 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/reader0"
#define LOG_LEVEL 20
#define SUIT_WRAP_NUM 20
typedef struct msg_header_s
{
uint16_t magic_num;
uint8_t version;
uint8_t msg_type; // msg data type
uint32_t cont_len;
}msg_header_t; /* sizeof = 8B */
#define MSG_HEADER_LEN sizeof(msg_header_t)
typedef struct msg_metainfo_s
{
char prog_id[8];
char flag;
uint8_t hitservice;
uint64_t prog_len:48;
uint32_t cap_IP;
uint8_t protocol;
uint8_t media_type;
uint8_t data_flag;
uint8_t opt_num;
}msg_metainfo_t;
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(1635151988,100000,USM_READER);
//USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
unsigned int reader_id = 0;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
//char reader_path[] = "./usm_test0";
//char reader_path[] = "/home/mcger/un_recv";
char reader_path[] = "/home/mesasoft/usm_test1";
//char reader_path[] = "/home/dumeijie/usm_0";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),0);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,0);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char* data[372]={0};
int datalen[372] = {0};
int data_cnt = 0;
int j = 0;
int i = 0;
msg_header_t* msgheader = NULL;
msg_metainfo_t* msginfo = NULL;
//while(1)
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
/*for(i = 0;i < 372;i++)
{
datalen[i] = 2048;
}*/
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
//debug for online
/*for(i =0;i< data_cnt;i++)
{
msgheader = (msg_header_t*)data[i];
msginfo = (msg_metainfo_t*)(data[i] + MSG_HEADER_LEN);
assert(msgheader->magic_num == 22081);
if(msgheader->msg_type == 49)
{
assert(msginfo->opt_num == 0);
}
}*/
}
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,97 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/reader1"
#define LOG_LEVEL 30
#define SUIT_WRAP_NUM 20
typedef struct msg_header_s
{
uint16_t magic_num;
uint8_t version;
uint8_t msg_type; // msg data type
uint32_t cont_len;
}msg_header_t; /* sizeof = 8B */
#define MSG_HEADER_LEN sizeof(msg_header_t)
typedef struct msg_metainfo_s
{
char prog_id[8];
char flag;
uint8_t hitservice;
uint64_t prog_len:48;
uint32_t cap_IP;
uint8_t protocol;
uint8_t media_type;
uint8_t data_flag;
uint8_t opt_num;
}msg_metainfo_t;
int main()
{
int rst = 0;
//USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
USM_t* a_usm_handle = USM_handle(1635151988,100000,USM_READER);
unsigned int reader_id = 1;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),1);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),1);
//char reader_path[] = "./usm_test1";
//char reader_path[] = "/home/dumeijie/usm_1";
char reader_path[] = "/home/mesasoft/usm_test2";
//char reader_path[] = "/home/audiorecognition/aufilter/un_recv";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),1);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,1);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char* data[372]={0};
int datalen[372] = {0};
int data_cnt =0;
int j =0;
int i =0;
msg_header_t* msgheader = NULL;
msg_metainfo_t* msginfo = NULL;
//while(1)
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
/*for(i = 0;i < 372;i++)
{
datalen[i] = 2048;
}*/
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
//debug for online
/*for(i =0;i< data_cnt;i++)
{
msgheader = (msg_header_t*)data[i];
msginfo = (msg_metainfo_t*)(data[i] + MSG_HEADER_LEN);
assert(msgheader->magic_num == 22081);
if(msgheader->msg_type == 49)
{
assert(msginfo->opt_num == 0);
}
}*/
}
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

View File

@@ -0,0 +1,93 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/reader2"
#define LOG_LEVEL 30
#define SUIT_WRAP_NUM 20
typedef struct msg_header_s
{
uint16_t magic_num;
uint8_t version;
uint8_t msg_type; // msg data type
uint32_t cont_len;
}msg_header_t; /* sizeof = 8B */
#define MSG_HEADER_LEN sizeof(msg_header_t)
typedef struct msg_metainfo_s
{
char prog_id[8];
char flag;
uint8_t hitservice;
uint64_t prog_len:48;
uint32_t cap_IP;
uint8_t protocol;
uint8_t media_type;
uint8_t data_flag;
uint8_t opt_num;
}msg_metainfo_t;
int main()
{
int rst = 0;
//USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
USM_t* a_usm_handle = USM_handle(1635151988,100000,USM_READER);
unsigned int reader_id = 2;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),2);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),2);
//char reader_path[] = "./usm_test2";//test_write
char reader_path[] = "/home/mesasoft/usm_test";//test_frag_rssb
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),2);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,2);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char* data[372]={0};
int datalen[372] = {0};
int data_cnt =0;
int j = 0;
int i = 0;
msg_header_t* msgheader = NULL;
msg_metainfo_t* msginfo = NULL;
//while(1)
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
/*for(i = 0;i < 372;i++)
{
datalen[i] = 2048;
}*/
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
//debug for online
/*for(i =0;i< data_cnt;i++)
{
msgheader = (msg_header_t*)data[i];
msginfo = (msg_metainfo_t*)(data[i] + MSG_HEADER_LEN);
assert(msgheader->magic_num == 22081);
if(msgheader->msg_type == 49)
{
assert(msginfo->opt_num == 0);
}
}*/
}
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

View File

@@ -0,0 +1,154 @@
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "MESA_handle_logger.h"
#include "usm_api.h"
#define LOG_NAME0 "./log/writer0"
#define LOG_NAME1 "./log/writer1"
#define LOG_NAME2 "./log/writer2"
#define LOG_LEVEL 20
int main()
{
int rst = 0;
void* logger_0 = MESA_create_runtime_log_handle(LOG_NAME0,LOG_LEVEL);
void* logger_1 = MESA_create_runtime_log_handle(LOG_NAME1,LOG_LEVEL);
void* logger_2 = MESA_create_runtime_log_handle(LOG_NAME2,LOG_LEVEL);
//USM_t* a_usm_handle = USM_handle(1233,100000,USM_WRITER);
USM_t* a_usm_handle = USM_handle(1635151988,100000,USM_WRITER);
unsigned int reader_cnt = 3;
USM_set_opt(a_usm_handle,READER_CNT,(void*)&reader_cnt,sizeof(unsigned int),0);
unsigned int smooth_time = 1000000;//1
USM_set_opt(a_usm_handle,SMOOTH_TIME,(void*)&smooth_time,sizeof(unsigned int),0);
smooth_time = 1000000;
USM_set_opt(a_usm_handle,SMOOTH_TIME,(void*)&smooth_time,sizeof(unsigned int),1);
smooth_time = 1000000;
USM_set_opt(a_usm_handle,SMOOTH_TIME,(void*)&smooth_time,sizeof(unsigned int),2);
//reader0
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
char reader_path1[] = "/home/mesasoft/usm_test1";
//char reader_path1[] = "/home/mcger/un_recv";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path1,strlen(reader_path1),0);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_0,4,0);
//reader1
//max_lq_size = 512;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),1);
char reader_path2[] = "/home/mesasoft/usm_test2";
//char reader_path2[] = "/home/audiorecognition/aufilter/un_recv";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path2,strlen(reader_path2),1);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_1,4,1);
//reader2
//max_lq_size = 512;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),2);
char reader_path3[] = "/home/mesasoft/usm_test";
//char reader_path3[] = "/home/mesasoft/usm_test";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path3,strlen(reader_path3),2);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_2,4,2);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char data[1024]={1};
int i = 0;
int j = 0;
//int len = 1;
unsigned long long wt_pktnum = 0;
unsigned long long wt_datalen = 0;
unsigned long long err_wting_pktnum = 0;
unsigned long long err_wting_datalen = 0;
unsigned long long sd_pktnum = 0;
unsigned long long rd_pktnum = 0;
unsigned long long rd_datalen = 0;
unsigned long long not_rd_pktnum = 0;
unsigned long long not_rd_datalen = 0;
unsigned long long err_rding_pktnum = 0;
unsigned long long err_rding_datalen = 0;
unsigned long long lqcount = 0;
struct timespec last_send_time,now;
clock_gettime(CLOCK_MONOTONIC,&last_send_time);
for(j = 0;j<1000000;j++)
// while(1)
{
rst = USM_write(a_usm_handle,data,1024);
//len++;
/*
wt_datalen = USM_stat(a_usm_handle,WRITED_CNT,0);
printf("WRITED_CNT: %d.\n",wt_datalen);
wt_pktnum = USM_stat(a_usm_handle,WRITED_SIZE,0);
printf("WRITED_SIZE: %d.\n",wt_pktnum);
err_wting_datalen = USM_stat(a_usm_handle,WRITING_CLASH_CNT,0);
printf("WRITING_CLASH_CNT: %d.\n",err_wting_datalen);
err_wting_pktnum = USM_stat(a_usm_handle,WRITING_CLASH_SIZE,0);
printf("WRITING_CLASH_SIZE: %d.\n\n",err_wting_pktnum);
for(i = 0;i < reader_cnt;i++)
{
//sd_pktnum = USM_stat(a_usm_handle,SENDED_CNT,i);
//printf("Reader %d - SENDED_CNT: %d.\n",i,sd_pktnum);
rd_datalen = USM_stat(a_usm_handle,READED_CNT,i);
printf("Reader %d - READED_CNT: %d.\n",i,rd_datalen);
rd_pktnum = USM_stat(a_usm_handle,READED_SIZE,i);
printf("Reader %d - READED_SIZE: %d.\n",i,rd_pktnum);
not_rd_datalen = USM_stat(a_usm_handle,READER_DROP_CNT,i);
printf("Reader %d - READER_DROP_CNT: %d.\n",i,not_rd_datalen);
not_rd_pktnum = USM_stat(a_usm_handle,READER_DROP_SIZE,i);
printf("Reader %d - READER_DROP_SIZE: %d.\n",i,not_rd_pktnum);
err_rding_datalen = USM_stat(a_usm_handle,READING_CLASH_CNT,i);
printf("Reader %d - READING_CLASH_CNT: %d.\n",i,err_rding_datalen);
err_rding_pktnum = USM_stat(a_usm_handle,READING_CLASH_SIZE,i);
printf("Reader %d - READING_CLASH_SIZE: %d.\n\n",i,err_rding_pktnum);
}*/
//usleep(20);
}
clock_gettime(CLOCK_MONOTONIC,&now);
printf("durtion time is %llu ns.\n",(now.tv_sec - last_send_time.tv_sec)*1000000000+(now.tv_nsec - last_send_time.tv_nsec));
wt_datalen = USM_stat(a_usm_handle,WRITED_CNT,0);
printf("WRITED_CNT: %llu.\n",wt_datalen);
wt_pktnum = USM_stat(a_usm_handle,WRITED_SIZE,0);
printf("WRITED_SIZE: %llu.\n",wt_pktnum);
err_wting_datalen = USM_stat(a_usm_handle,WRITING_CLASH_CNT,0);
printf("WRITING_CLASH_CNT: %llu.\n",err_wting_datalen);
err_wting_pktnum = USM_stat(a_usm_handle,WRITING_CLASH_SIZE,0);
printf("WRITING_CLASH_SIZE: %llu.\n\n",err_wting_pktnum);
for(i = 0;i < reader_cnt;i++)
{
sd_pktnum = USM_stat(a_usm_handle,SENDED_CNT,i);
printf("Reader %d - SENDED_CNT: %llu.\n",i,sd_pktnum);
lqcount = USM_stat(a_usm_handle,LQ_COUNT,i);
printf("Reader %d - LQ_CNT: %llu.\n",i,lqcount);
rd_datalen = USM_stat(a_usm_handle,READED_CNT,i);
printf("Reader %d - READED_CNT: %llu.\n",i,rd_datalen);
rd_pktnum = USM_stat(a_usm_handle,READED_SIZE,i);
printf("Reader %d - READED_SIZE: %llu.\n",i,rd_pktnum);
not_rd_datalen = USM_stat(a_usm_handle,READER_DROP_CNT,i);
printf("Reader %d - READER_DROP_CNT: %llu.\n",i,not_rd_datalen);
not_rd_pktnum = USM_stat(a_usm_handle,READER_DROP_SIZE,i);
printf("Reader %d - READER_DROP_SIZE: %llu.\n",i,not_rd_pktnum);
err_rding_datalen = USM_stat(a_usm_handle,READING_CLASH_CNT,i);
printf("Reader %d - READING_CLASH_CNT: %llu.\n",i,err_rding_datalen);
err_rding_pktnum = USM_stat(a_usm_handle,READING_CLASH_SIZE,i);
printf("Reader %d - READING_CLASH_SIZE: %llu.\n\n",i,err_rding_pktnum);
}
MESA_destroy_runtime_log_handle(logger_0);
MESA_destroy_runtime_log_handle(logger_1);
MESA_destroy_runtime_log_handle(logger_2);
return 0;
}

View File

@@ -0,0 +1,17 @@
CC=gcc
CCC=g++
CFLAGS=-g -Wall
INCLUDE=-I../inc/
LIB=-lrt -lpthread -lcrypto -lssl -lMESA_htable -lMESA_handle_logger
LIB+=../lib/usm_comm.so
TARGET=md5_writer md5_reader0 md5_reader1 md5_reader2
all:
gcc $(CFLAGS) -o md5_reader0 md5_reader.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o md5_reader1 md5_reader1.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o md5_reader2 md5_reader2.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o md5_writer md5_writer.c $(INCLUDE) $(LIB)
clean:
rm -f *.o $(TARGET)

View File

@@ -0,0 +1,72 @@
#include <openssl/md5.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/md5_reader0"
#define LOG_LEVEL 30
#define SUIT_WRAP_NUM 20
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
unsigned int reader_id = 0;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
char reader_path[] = "./usm_test0";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),0);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,0);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
MD5_CTX c;
unsigned char md5[17]={0};
MD5_Init(&c);
//usm_read2
char* data[372]={0};
int datalen[372] = {0};
int data_cnt =0;
int j = 0;
int i = 0;
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
for(i = 0;i < SUIT_WRAP_NUM;i++)
{
datalen[i] = 2048;
}
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
for(i = 0;i < data_cnt;i++)
{
MD5_Update(&c, data[i], datalen[i]);
}
}
MD5_Final(md5,&c);
printf("MD5 is %x%x%x%x.\n",*(int*)md5,*((int*)md5+1),*((int*)md5+2),*((int*)md5+3));
//free(data);
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,70 @@
#include <openssl/md5.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/md5_reader1"
#define LOG_LEVEL 30
#define SUIT_WRAP_NUM 20
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
unsigned int reader_id = 1;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),1);
char reader_path[] = "./usm_test1";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),1);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,1);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
MD5_CTX c;
unsigned char md5[17]={0};
MD5_Init(&c);
char* data[372]={0};
int datalen[372] = {0};
int data_cnt = 0;
int j = 0;
int i = 0;
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
for(i = 0;i < SUIT_WRAP_NUM;i++)
{
datalen[i] = 2048;
}
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
for(i = 0;i < data_cnt;i++)
{
MD5_Update(&c, data[i], datalen[i]);
}
}
MD5_Final(md5,&c);
printf("MD5 is %x%x%x%x.\n",*(int*)md5,*((int*)md5+1),*((int*)md5+2),*((int*)md5+3));
//free(data);
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

View File

@@ -0,0 +1,71 @@
#include <openssl/md5.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/md5_reader2"
#define LOG_LEVEL 30
#define SUIT_WRAP_NUM 20
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(1233,100000,USM_READER);
unsigned int reader_id = 2;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),2);
char reader_path[] = "./usm_test2";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),2);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,2);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
MD5_CTX c;
unsigned char md5[17]={0};
MD5_Init(&c);
char* data[372]={0};
int datalen[372] = {0};
int data_cnt = 0;
int j = 0;
int i = 0;
for(j = 0;j<1000000/SUIT_WRAP_NUM;j++)
{
for(i = 0;i < SUIT_WRAP_NUM;i++)
{
datalen[i] = 2048;
}
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
for(i = 0;i < data_cnt;i++)
{
MD5_Update(&c, data[i], datalen[i]);
}
}
MD5_Final(md5,&c);
printf("MD5 is %x%x%x%x.\n",*(int*)md5,*((int*)md5+1),*((int*)md5+2),*((int*)md5+3));
//free(data);
MESA_destroy_runtime_log_handle(logger);
return 0;
}

Binary file not shown.

View File

@@ -0,0 +1,135 @@
#include <openssl/md5.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME0 "./log/md5_writer0"
#define LOG_NAME1 "./log/md5_writer1"
#define LOG_NAME2 "./log/md5_writer2"
#define LOG_LEVEL 30
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(1233,100000,USM_WRITER);
unsigned int reader_cnt = 3;
USM_set_opt(a_usm_handle,READER_CNT,(void*)&reader_cnt,sizeof(unsigned int),0);
unsigned int smooth_time = 1000000;//1ms
USM_set_opt(a_usm_handle,SMOOTH_TIME,(void*)&smooth_time,sizeof(unsigned int),0);
unsigned int max_lq_size = 2048*2048;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
char reader_path1[] = "./usm_test0";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path1,strlen(reader_path1),0);
void* logger_0 = MESA_create_runtime_log_handle(LOG_NAME0,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_0,4,0);
void* logger_1 = MESA_create_runtime_log_handle(LOG_NAME1,LOG_LEVEL);
void* logger_2 = MESA_create_runtime_log_handle(LOG_NAME2,LOG_LEVEL);
//reader1
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),1);
char reader_path2[] = "./usm_test1";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path2,strlen(reader_path2),1);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_1,4,1);
//reader2
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),2);
char reader_path3[] = "./usm_test2";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path3,strlen(reader_path3),2);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger_2,4,2);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
srand((int)time(0));
int seed = rand();
int data[256]={0};
int k = 0;
for(k = 0;k<256;k++)
{
data[k]= seed;
}
MD5_CTX c;
unsigned char md5[17]={0};
MD5_Init(&c);
int i = 0;
int j = 0;
unsigned long long wt_pktnum = 0;
unsigned long long wt_datalen = 0;
unsigned long long err_wting_pktnum = 0;
unsigned long long err_wting_datalen = 0;
unsigned long long sd_pktnum = 0;
unsigned long long rd_pktnum = 0;
unsigned long long rd_datalen = 0;
unsigned long long not_rd_pktnum = 0;
unsigned long long not_rd_datalen = 0;
unsigned long long err_rding_pktnum = 0;
unsigned long long err_rding_datalen = 0;
unsigned long long lqcount = 0;
struct timespec last_send_time,now;
clock_gettime(CLOCK_MONOTONIC,&last_send_time);
for(j = 0;j<1000000;j++)
{
rst = USM_write(a_usm_handle,(const char*)data,1024);
MD5_Update(&c, data, 1024);
}
clock_gettime(CLOCK_MONOTONIC,&now);
printf("durtion time is %llu ns.\n",(now.tv_sec - last_send_time.tv_sec)*1000000000+(now.tv_nsec - last_send_time.tv_nsec));
MD5_Final(md5,&c);
printf("MD5 is %x%x%x%x.\n",*(int*)md5,*((int*)md5+1),*((int*)md5+2),*((int*)md5+3));
wt_datalen = USM_stat(a_usm_handle,WRITED_CNT,0);
printf("WRITED_CNT: %llu.\n",wt_datalen);
wt_pktnum = USM_stat(a_usm_handle,WRITED_SIZE,0);
printf("WRITED_SIZE: %llu.\n",wt_pktnum);
err_wting_datalen = USM_stat(a_usm_handle,WRITING_CLASH_CNT,0);
printf("WRITING_CLASH_CNT: %llu.\n",err_wting_datalen);
err_wting_pktnum = USM_stat(a_usm_handle,WRITING_CLASH_SIZE,0);
printf("WRITING_CLASH_SIZE: %llu.\n\n",err_wting_pktnum);
for(i = 0;i < reader_cnt;i++)
{
sd_pktnum = USM_stat(a_usm_handle,SENDED_CNT,i);
printf("Reader %d - SENDED_CNT: %llu.\n",i,sd_pktnum);
lqcount = USM_stat(a_usm_handle,LQ_COUNT,i);
printf("Reader %d - LQ_CNT: %llu.\n",i,lqcount);
rd_datalen = USM_stat(a_usm_handle,READED_CNT,i);
printf("Reader %d - READED_CNT: %llu.\n",i,rd_datalen);
rd_pktnum = USM_stat(a_usm_handle,READED_SIZE,i);
printf("Reader %d - READED_SIZE: %llu.\n",i,rd_pktnum);
not_rd_datalen = USM_stat(a_usm_handle,READER_DROP_CNT,i);
printf("Reader %d - READER_DROP_CNT: %llu.\n",i,not_rd_datalen);
not_rd_pktnum = USM_stat(a_usm_handle,READER_DROP_SIZE,i);
printf("Reader %d - READER_DROP_SIZE: %llu.\n",i,not_rd_pktnum);
err_rding_datalen = USM_stat(a_usm_handle,READING_CLASH_CNT,i);
printf("Reader %d - READING_CLASH_CNT: %llu.\n",i,err_rding_datalen);
err_rding_pktnum = USM_stat(a_usm_handle,READING_CLASH_SIZE,i);
printf("Reader %d - READING_CLASH_SIZE: %llu.\n\n",i,err_rding_pktnum);
}
MESA_destroy_runtime_log_handle(logger_0);
MESA_destroy_runtime_log_handle(logger_1);
MESA_destroy_runtime_log_handle(logger_2);
return 0;
}

View File

@@ -0,0 +1,17 @@
CC=gcc
CCC=g++
CFLAGS=-g -Wall
INCLUDE=-I../inc/
LIB=-lrt -lpthread -lMESA_htable -lMESA_handle_logger
LIB+=../lib/usm_comm.so
#LIB+=../lib/libcommon.a
TARGET=write_file read_file
all:
gcc $(CFLAGS) -o write_file write_file.c $(INCLUDE) $(LIB)
gcc $(CFLAGS) -o read_file read_file.c $(INCLUDE) $(LIB)
clean:
rm -f *.o $(TARGET)

View File

@@ -0,0 +1,64 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/reader"
#define LOG_LEVEL 30
#define LOOP_NUM 150//test.txt line_num
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(12345,1000,USM_READER);
unsigned int reader_id = 0;
USM_set_opt(a_usm_handle,READER_ID,(void*)&reader_id,sizeof(unsigned int),0);
char reader_path[] = "/home/dumeijie/usm_testfile";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path,strlen(reader_path),0);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,0);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char* data[372]={0};
int datalen[372] = {0};
int data_cnt = 0;
int i = 0;
int j = 0;
int k =0;
FILE *fp;
if(NULL == (fp = fopen("test_2.txt","wb+")))
{
perror("fail to read.\n");
exit(1);
}
while(1)
//for(i =0;i<LOOP_NUM;i++)
{
for(j =0;j<372;j++)
{
datalen[j] = 1000;
}
rst = USM_read(a_usm_handle,data,datalen,&data_cnt);
for(k =0;k<data_cnt;k++)
{
fwrite(data[k],datalen[k],1,fp);
fflush(fp);
}
}
fclose(fp);
MESA_destroy_runtime_log_handle(logger);
return 0;
}

View File

@@ -0,0 +1,4 @@
#!/bin/bash
echo "Begin!"
./write_file &
./read_file &

View File

@@ -0,0 +1,149 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>֮һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>
Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD>׺<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD>ֹϥ<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺã<EFBFBD>ȴ<EFBFBD>Ǹ<EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>˼Ľ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ˣ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰδ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD>
ǰͷ<EFBFBD>Ķ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻõ<EFBFBD>һ<EFBFBD>䣬ȴ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>̫<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Ŵ<EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>кý<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǰ<><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>
<EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD>dz <20><> <20><><EFBFBD>ǣ<EFBFBD>ҹ<EFBFBD><D2B9><EFBFBD><EFBFBD>īԨ<C4AB><D4A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBEB5><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3>Թȣ<D4B9><C8A3><EFBFBD><EFBFBD><EFBFBD><E6A3AC><EFBFBD>ţ<EFBFBD><C5A3>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>๬Ψһ<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD>Ϊҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ҳ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˭<EFBFBD>ĽŲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD>ող<EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Żش𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵İ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ͻȻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD>Ѿ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ治<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD>ܵؽ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD>ج<EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD>ݺ<EFBFBD>Ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ־<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>ͻȻ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥæ<EFBFBD><EFBFBD><EFBFBD>İɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ˯һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ö<EFBFBD><C3B6><EFBFBD> http://www.haoduu.com<6F><6D>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD>ôϲ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ϡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD>ĵĿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ<EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ذ<EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD>ȴ<EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD>Ҿ<EFBFBD>Ҫ<EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>˺ܾõĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣿡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>ɤ<EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һͬƷ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>Ъ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôƵƵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD>ھΣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִٲ<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ֿ<EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD>ĵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD>ѣ<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>յ<EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥɹɹ̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD>ҡ<EFBFBD>Σ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ֻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>é<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ҩֹѪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ̯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>еĺ<EFBFBD><EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>˵<EFBFBD>Ӵ<EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>͵͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ü<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ̫<EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>˻ĵ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD>˭<EFBFBD>ֵܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ǻϵ<EFBFBD>һ˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>Ȼ<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>̥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD>ھ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξþò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ъ<EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>û<EFBFBD>аһ<EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD>ˮϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ÿ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵĻ<EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD>ش𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵȵȰɣ<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>ҹҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳδ<EFBFBD><EFBFBD>֪<EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȻʧЦ<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЪϢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD>ĵĿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD>ҵġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˺ܼ<EFBFBD>į<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôҲû˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Եģ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҹж<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳȷʵ<EFBFBD>𽥵ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>ǣ<EFBFBD>Ҳ<EFBFBD>е<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣬻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><EFBFBD>÷dz<EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧȥ˫<EFBFBD>ۣ<EFBFBD>ʧȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ·<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ͸<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD>Ū<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵĹ<EFBFBD><EFBFBD>غͰ<EFBFBD>Ϸ<EFBFBD><EFBFBD>ֻ<EFBFBD>о<EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ѫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸ô<EFBFBD><EFBFBD>ĵط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûصĵط<EFBFBD><EFBFBD>ɡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>Իص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ȥ<EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD>ֻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻȻץס<EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>¸<EFBFBD>̨<EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>û<EFBFBD>з<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>ӹ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>Ӱ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>һ˫<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ΢<EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Ҵ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôҲû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>Ҵ<EFBFBD>ææ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ް<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>µĵ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻأ<EFBFBD>Ƿ<EFBFBD>˱<EFBFBD><EFBFBD>˵<EFBFBD>ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ҳ<EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ<EFBFBD>Ϳ־<EFBFBD>һ<EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>ʧ̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ъ˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>Ϊʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ψһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵȺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>ź<EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>â<EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>ж<EFBFBD>ô<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>˫<EFBFBD>ۡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ󳹴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>к޹<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>·<EFBFBD>ˣ<EFBFBD>ģģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲶׽<EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ײײ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>Ժ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЦЦ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޡ<EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ֹ<EFBFBD>۾<EFBFBD><EFBFBD>й<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӭȢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD>dzΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴͻȻ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽк<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD>ӵر<EFBFBD><EFBFBD>ҡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD>һ˫<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ܾã<EFBFBD>һֱû<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>νе<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>һ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ú<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ܶ࣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>Ȥ˵ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣬶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD>С<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>֣<EFBFBD>ҪΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ȼ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ޵<EFBFBD>ͬʱ<EFBFBD><EFBFBD>Ҳʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD><EFBFBD><EFBFBD>κο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>·<EFBFBD>ߡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ·<EFBFBD>ϵ<EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ĸо<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨֮<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ϣ<EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չˣ<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD>ַ<EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻȻһ<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȥһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ĵط<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˹µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻҪ<EFBFBD>Ҷ<EFBFBD><EFBFBD>ž<EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD>Ϊʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ψһһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD>û<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>ɬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ܾã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>ֻ<EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><EFBFBD>ѵ<EFBFBD><EFBFBD>ٴο<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>úܺá<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ˺ð<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰһֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϵĹ<EFBFBD><EFBFBD>µģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><CBA1><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>ľ<EFBFBD><EFBFBD>𻰣<EFBFBD>һ˲<EFBFBD><EFBFBD>ȴͻȻ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ̧<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>죬ȴ<EFBFBD><EFBFBD>ͻȻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD>ִӺζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>Щѹ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ҾͿ<EFBFBD><EFBFBD>Իص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ϰ<EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>ҵļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﲻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>Ź<EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǴӴˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ񱩵<EFBFBD>ŭ<EFBFBD>𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûʲôҪ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>ȴ<EFBFBD>ǻҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴҲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǿɵ<EFBFBD>ǧǧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>δ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µķ<EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񡣡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD>޶<EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>١<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>Ƶ<EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ۣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ҩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾Ϳ<EFBFBD><EFBFBD>԰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵøɸɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⼸ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҩζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD>ôŮ<EFBFBD><EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -0,0 +1,148 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>֮һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>
Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD>׺<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD>ֹϥ<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺã<EFBFBD>ȴ<EFBFBD>Ǹ<EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>˼Ľ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ˣ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǧ<EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰδ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD>
ǰͷ<EFBFBD>Ķ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻõ<EFBFBD>һ<EFBFBD>䣬ȴ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>̫<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>Ŵ<EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>кý<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD>ǩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǰ<><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE>
<EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD>dz <20><> <20><><EFBFBD>ǣ<EFBFBD>ҹ<EFBFBD><D2B9><EFBFBD><EFBFBD>īԨ<C4AB><D4A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBEB5><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3>Թȣ<D4B9><C8A3><EFBFBD><EFBFBD><EFBFBD><E6A3AC><EFBFBD>ţ<EFBFBD><C5A3>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>๬Ψһ<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD>Ϊҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ҳ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˭<EFBFBD>ĽŲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD>ող<EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Żش𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵İ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ͻȻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD>Ѿ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ治<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD>ܵؽ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD>ج<EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD>ݺ<EFBFBD>Ϯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ־<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD>ͻȻ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥæ<EFBFBD><EFBFBD><EFBFBD>İɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ˯һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ö<EFBFBD><C3B6><EFBFBD> http://www.haoduu.com<6F><6D>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD>ôϲ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ϡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD>ĵĿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ<EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>ذ<EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD>ȴ<EFBFBD>޲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD>Ҿ<EFBFBD>Ҫ<EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>˺ܾõĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣿡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>ɤ<EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һͬƷ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>Ъ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôƵƵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD>ھΣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִٲ<EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ֿ<EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD>ĵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD>ѣ<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>յ<EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥɹɹ̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD>ҡ<EFBFBD>Σ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ֻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѫ<EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>é<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ҩֹѪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ̯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>еĺ<EFBFBD><EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>˵<EFBFBD>Ӵ<EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>͵͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ü<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ̫<EFBFBD>ӡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>˻ĵ<EFBFBD>Ů<EFBFBD>ӣ<EFBFBD>˭<EFBFBD>ֵܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>Ǻϵ<EFBFBD>һ˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>Ȼ<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>̥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><EFBFBD>ھ<EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξþò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ъ<EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>û<EFBFBD>аһ<EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD>ˮϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ÿ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵĻ<EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD>ش𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵȵȰɣ<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>ҹҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳδ<EFBFBD><EFBFBD>֪<EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȻʧЦ<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЪϢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD>ĵĿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD>ҵġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˺ܼ<EFBFBD>į<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôҲû˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Եģ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҹж<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳȷʵ<EFBFBD>𽥵ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>ǣ<EFBFBD>Ҳ<EFBFBD>е<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣬻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><EFBFBD>÷dz<EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧȥ˫<EFBFBD>ۣ<EFBFBD>ʧȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ·<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ͸<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><EFBFBD><EFBFBD>Ū<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵĹ<EFBFBD><EFBFBD>غͰ<EFBFBD>Ϸ<EFBFBD><EFBFBD>ֻ<EFBFBD>о<EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ѫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸ô<EFBFBD><EFBFBD>ĵط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûصĵط<EFBFBD><EFBFBD>ɡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>Իص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ȥ<EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD>ֻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻȻץס<EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><EFBFBD>¸<EFBFBD>̨<EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>û<EFBFBD>з<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>ӹ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>Ӱ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>һ˫<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ΢<EFBFBD><EFBFBD><EFBFBD>ؿ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Ҵ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôҲû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>Ҵ<EFBFBD>ææ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ް<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>µĵ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻأ<EFBFBD>Ƿ<EFBFBD>˱<EFBFBD><EFBFBD>˵<EFBFBD>ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ף<EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ҳ<EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ<EFBFBD>Ϳ־<EFBFBD>һ<EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>ʧ̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ץס<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ъ˹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪʲôҪ<EFBFBD>ҵ<EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>Ϊʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ψһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵȺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>ź<EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>â<EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD>ж<EFBFBD>ô<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>˫<EFBFBD>ۡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ󳹴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>к޹<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>·<EFBFBD>ˣ<EFBFBD>ģģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD>ߵ<EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲶׽<EFBFBD><EFBFBD>˿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>ײײ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>Ժ<EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЦЦ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޡ<EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ֹ<EFBFBD>۾<EFBFBD><EFBFBD>й<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӭȢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD>dzΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴͻȻ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽк<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢Ц<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ι<EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>һҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD>ӵر<EFBFBD><EFBFBD>ҡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>̫<EFBFBD>ӵ<EFBFBD><EFBFBD>¡<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޵ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>֣<EFBFBD>һ˫<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ܾã<EFBFBD>һֱû<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>νе<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>һ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ú<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ܶ࣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>Ȥ˵ʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>򣬶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD>С<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>֣<EFBFBD>ҪΪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ȼ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ޵<EFBFBD>ͬʱ<EFBFBD><EFBFBD>Ҳʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD>Ҳû<EFBFBD><EFBFBD><EFBFBD>κο<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>·<EFBFBD>ߡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ·<EFBFBD>ϵ<EFBFBD>ܽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD>ĸо<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨֮<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ϣ<EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չˣ<EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD>ַ<EFBFBD><EFBFBD>ġ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻȻһ<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϣ<EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȥһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ĵط<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˹µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻҪ<EFBFBD>Ҷ<EFBFBD><EFBFBD>ž<EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>֪<EFBFBD><EFBFBD>Ϊʲô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ψһһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD>û<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>ɬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ܾã<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>ֻ<EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><EFBFBD>ѵ<EFBFBD><EFBFBD>ٴο<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ؿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>úܺá<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ˺ð<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰһֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ϵĹ<EFBFBD><EFBFBD>µģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><CBA1><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>ľ<EFBFBD><EFBFBD>𻰣<EFBFBD>һ˲<EFBFBD><EFBFBD>ȴͻȻ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ̧<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>죬ȴ<EFBFBD><EFBFBD>ͻȻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD>ִӺζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>Щѹ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ҾͿ<EFBFBD><EFBFBD>Իص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD>ˡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ϰ<EFBFBD>߿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>ҵļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﲻҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD>ٴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷŹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>Ź<EFBFBD><EFBFBD>ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǴӴˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ񱩵<EFBFBD>ŭ<EFBFBD>𣺡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûʲôҪ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>ȴ<EFBFBD>ǻҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴҲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǿɵ<EFBFBD>ǧǧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>δ<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD>˽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>սһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µķ<EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񡣡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><EFBFBD>޶<EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>١<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>Ƶ<EFBFBD>Ѱ<EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺ۣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ôһ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ц<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ҩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾Ϳ<EFBFBD><EFBFBD>԰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵøɸɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⼸ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҩζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -0,0 +1,101 @@
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "usm_api.h"
#include "MESA_handle_logger.h"
#define LOG_NAME "./log/writer"
#define LOG_LEVEL 30
int main()
{
int rst = 0;
USM_t* a_usm_handle = USM_handle(12345,1000,USM_WRITER);
unsigned int reader_cnt = 1;
USM_set_opt(a_usm_handle,READER_CNT,(void*)&reader_cnt,sizeof(unsigned int),0);
unsigned int smooth_time = 1000000;//ns
USM_set_opt(a_usm_handle,SMOOTH_TIME,(void*)&smooth_time,sizeof(unsigned int),0);
//reader0
unsigned int max_lq_size = 1024;
USM_set_opt(a_usm_handle,MAX_LQUEUE_SIZE,(void*)&max_lq_size,sizeof(unsigned int),0);
char reader_path1[] = "/home/dumeijie/usm_testfile";
USM_set_opt(a_usm_handle,READER_PATH,(void*)reader_path1,strlen(reader_path1),0);
void* logger = MESA_create_runtime_log_handle(LOG_NAME,LOG_LEVEL);
USM_set_opt(a_usm_handle,LOG_HANDLE,logger,4,0);
rst = USM_init(a_usm_handle);
if(rst < 0) return 0;
char data[1000]={0};
FILE *fp;
if(NULL == (fp = fopen("test.txt","r")))
{
perror("fail to read.\n");
exit(1);
}
int i = 0;
int len = 1;
unsigned long long wt_pktnum = 0;
unsigned long long wt_datalen = 0;
unsigned long long err_wting_pktnum = 0;
unsigned long long err_wting_datalen = 0;
unsigned long long sd_pktnum = 0;
unsigned long long rd_pktnum = 0;
unsigned long long rd_datalen = 0;
unsigned long long not_rd_pktnum = 0;
unsigned long long not_rd_datalen = 0;
unsigned long long err_rding_pktnum = 0;
unsigned long long err_rding_datalen = 0;
struct timespec last_send_time,now;
clock_gettime(CLOCK_MONOTONIC,&last_send_time);
while(fgets(data,1000,fp)!= NULL)
{
len = strlen(data);
rst = USM_write(a_usm_handle,data,len);
usleep(1);
}
clock_gettime(CLOCK_MONOTONIC,&now);
printf("durtion time is %llu ns.\n",(now.tv_sec - last_send_time.tv_sec)*1000000000+(now.tv_nsec - last_send_time.tv_nsec));
wt_datalen = USM_stat(a_usm_handle,WRITED_CNT,0);
printf("WRITED_CNT: %d.\n",wt_datalen);
wt_pktnum = USM_stat(a_usm_handle,WRITED_SIZE,0);
printf("WRITED_SIZE: %d.\n",wt_pktnum);
err_wting_datalen = USM_stat(a_usm_handle,WRITING_CLASH_CNT,0);
printf("WRITING_CLASH_CNT: %d.\n",err_wting_datalen);
err_wting_pktnum = USM_stat(a_usm_handle,WRITING_CLASH_SIZE,0);
printf("WRITING_CLASH_SIZE: %d.\n\n",err_wting_pktnum);
for(i = 0;i < reader_cnt;i++)
{
sd_pktnum = USM_stat(a_usm_handle,SENDED_CNT,i);
printf("Reader %d - SENDED_CNT: %d.\n",i,sd_pktnum);
rd_datalen = USM_stat(a_usm_handle,READED_CNT,i);
printf("Reader %d - READED_CNT: %d.\n",i,rd_datalen);
rd_pktnum = USM_stat(a_usm_handle,READED_SIZE,i);
printf("Reader %d - READED_SIZE: %d.\n",i,rd_pktnum);
not_rd_datalen = USM_stat(a_usm_handle,READER_DROP_CNT,i);
printf("Reader %d - READER_DROP_CNT: %d.\n",i,not_rd_datalen);
not_rd_pktnum = USM_stat(a_usm_handle,READER_DROP_SIZE,i);
printf("Reader %d - READER_DROP_SIZE: %d.\n",i,not_rd_pktnum);
err_rding_datalen = USM_stat(a_usm_handle,READING_CLASH_CNT,i);
printf("Reader %d - READING_CLASH_CNT: %d.\n",i,err_rding_datalen);
err_rding_pktnum = USM_stat(a_usm_handle,READING_CLASH_SIZE,i);
printf("Reader %d - READING_CLASH_SIZE: %d.\n\n",i,err_rding_pktnum);
}
fclose(fp);
MESA_destroy_runtime_log_handle(logger);
//sleep(10);
return 0;
}

View File

@@ -0,0 +1,78 @@
/*
* usm_api.h
*
* Created on: 2017-1-17
* Author: dmj
*/
#ifndef __USM_COMM_H_INCLUDE_
#define __USM_COMM_H_INCLUDE_
#ifdef __cplusplus
extern "C" {
#endif
/*
#ifndef uint64_t
typedef unsigned long long uint64_t;
#endif
#ifndef uint16_t
typedef unsigned int uint16_t;
#endif
*/
typedef struct
{
}USM_t;
#define USM_READER 0x01
#define USM_WRITER 0x02
enum USM_rst_t
{
USM_SUCC = 0,
USM_RD_SHMGET_ERR = -1,
USM_SHMCTL_ERR = -2,
USM_WT_SHMGET_ERR = -3,
USM_SHMAT_ERR = -4,
USM_SOCKET_INIT_ERR = -5,
USM_QUEUE_INIT_ERR = -6
};
enum USM_opt_t
{
SHM_BUF_SIZE,//WRITER and READER VIEW.VALUE is interger,SIZE=sizeof(int). DEFAULT:65535.
READER_CNT,//WRITER VIEW.
SMOOTH_TIME,//WRITER VIEW.but every reader need to set
READER_ID,//READER VIEW.VALUE is interger,SIZE=sizeof(int). 0-7.Reader needs set read_id first.
MAX_LQUEUE_SIZE,//READER VIEW.VALUE is interger,SIZE=sizeof(int). DEFAULT:1500.
READER_PATH,//READER VIEW.data is a const char* und_path, define the reader's Unix named domain socket file path. return reader id if success.
LOG_HANDLE
};
enum USM_stat_t
{
WRITED_SIZE,
WRITED_CNT,
WRITING_CLASH_SIZE,
WRITING_CLASH_CNT,
SENDED_CNT, //READERS
READED_SIZE,
READED_CNT,
READER_DROP_SIZE,//number of reader missed due to overwrite
READER_DROP_CNT,
READING_CLASH_SIZE,
READING_CLASH_CNT,
LQ_COUNT
};
USM_t* USM_handle(int shm_key,uint64_t shm_size,int role);
int USM_init(USM_t* handle);
int USM_write(USM_t* handle,const char* data,int datalen);
int USM_read(USM_t* handle,char** data,int* datalen,int* data_cnt);
int USM_set_opt(USM_t* handle,enum USM_opt_t type,void* data,int size,int reader_id);
uint64_t USM_stat(USM_t* handle,enum USM_stat_t type,int reader_id);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,482 @@
#ifndef _H_COM_SENDTOBACK_H
#define _H_COM_SENDTOBACK_H
#include <sys/socket.h>
// Defination for all kinds of msg
#define PROTO_MAGICNUM 0x5641
#define PROTO_VERSION 3
// Conf Msg
#define MSG_MANAGER 0x00 // System Manager Configure Message
#define MSG_CONFIG_ALL 0x01 // All Configure Update Message
#define MSG_CONFIG_INC 0x02 // Increase Configure Update Message
#define MSG_CONFIG_REQ 0x03 // Configure Request Message
#define MSG_D_CONFIG_ALL 0x04 // Configure Require's Response Message .
#define MSG_D_CONFIG_INC 0x05 // Configure Require's Response Message .
#define MSG_D_CONFIG_REQ 0x06 // Dynamic Configure Item Require Message This message come from configure server ;
#define MSG_TUPLE5_URL_REQ 0x0A // Tuple5 to url Request;
#define MSG_P2P_D_CONFIG_ALL 0x71 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_INC 0x72 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_REQ 0x73 // Configure Require's Response Message .
// Conf Operation defination
#define CONFIG_OP_TYPE_NO 0x00 // no any operation
#define CONFIG_OP_TYPE_ADD 0x01 // add a config rule
#define CONFIG_OP_TYPE_DEL 0x02 // del a config rule
#define CONFIG_OP_TYPE_MOD 0x03 // modify a config rule
// Response Msg
#define MSG_RESP_CHECKRESULT 0x11 // Check Result notification
#define MSG_RESP_REJECT 0x12 // Reject Message notification
#define MSG_RESP_CHARACTER 0x13 // Character notification
// Log Msg
#define MSG_MANAGER_LOG 0x20 // Manager Log Msg
#define MSG_RESULT_LOG 0x21 // Result Log Msg for Block or Monitor
#define MSG_STATIC_LOG 0x22 // Valid Message
#define MSG_TUPLE5_URL_LOG 0x2A // Tuple response Message
// Data Msg
#define MSG_DATA_METAINFO 0x31
#define MSG_DATA_BODY 0x32
#define MSG_DATA_TAIL 0x33
// Definatin for all types of vidio and audio file;
#define FILE_UNKNOWN 0x00
#define FILE_VIDEO 0x60
#define FILE_WMV 0x61
#define FILE_MPG 0x62
#define FILE_FLV 0x63
#define FILE_RMFF 0x65
#define FILE_AVI 0x66
#define FILE_SWF 0x67
#define FILE_MPG4 0x68
#define FILE_AIFF 0x69
#define FILE_OGG 0x6A
#define FILE_DRC 0x6B
#define FILE_DIRECTSHOW 0x6C
#define FILE_FLIC 0x6D
#define FILE_INDEO 0x6E
#define FILE_MKV 0x6F
#define FILE_AUDIO 0x70
#define FILE_MP3 0x71
#define BE_IMAGE_TYPE(t) ((t>=FILE_IMAGE) && (t<0x90))
#define BE_VIDEO_TYPE(t) ((t>=FILE_VIDEO) && (t<0x70))
#define BE_AUDIO_TYPE(t) ((t>=FILE_AUDIO) && (t<0x80))
#define FILE_IMAGE 0x80
#define FILE_JPG 0x84
#define FILE_BMP 0x85
#define FILE_GIF 0x86
#define MMS_TYPE 0x90
#define HTTP_STREAM_TYPE 0x90
#define RTSP_RDT_TYPE 0x92
#define RTSP_RTP_TYPE 0x91
#define SERVICE_FLAG_FD 0 // FenDu Flag
#define SERVICE_FLAG_JC 1 // JianCe Flag
// Defination of service type ;
#define SERVICE_IPPORT_WHITE 0x01 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK 0x02 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE 0x03 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK 0x04 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE 0x05 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK 0x06 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// added by cxj 20100811
#define SERVICE_P2P_STATIC_WHITEIP 0x15
#define SERVICE_P2P_BI_WHITEIP 0x16
#define SERVICE_P2P_MI_WHITEIP 0x17
#define SERVICE_P2P_EMULE_SERVER 0x51 //
#define SERVICE_P2P_EMULE_KEY 0x52 //
#define SERVICE_P2P_EMULE_FILEID 0x53 //
#define SERVICE_P2P_EMULE_NODE 0x54 //
#define SERVICE_P2P_BT_INFOHASH 0x41 // BT Infohash Black List
#define SERVICE_P2P_BT_NODE 0x44 // BT Bone Node
#define SERVICE_P2P_BT_SERVICE 0x61 // BT DHT Index Server List
#define SERVICE_P2P_BT_ECLIPSE_IPLIST 0x45
#define SERVICE_P2P_BT_POLLUTION_IPLIST 0x46
#define SERVICE_P2P_EMULE_POLLUTION_IPLIST 0x55
//
#define SERVICE_EMULE_SERVER 0x71 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_KEYS 0x72 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FHID 0x73 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FNAME 0x74 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_NODE 0x75 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_WHITE_JC 0x81 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK_JC 0x82 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE_JC 0x83 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK_JC 0x84 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE_JC 0x85 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK_JC 0x86 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_SERVICE_NUM 0xff
// Manager Command Defination
#define MANAGER_AV_SYS_CMD 0x02010000 //<2F><><EFBFBD><EFBFBD>Ƶϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_AV_PIC_CMD 0x02020000 //
#define MANAGER_AV_SYS_QUERY 0x01 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>״̬
#define MANAGER_AV_SYS_OPEN 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CLOSE 0x03 //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CHANGE 0x04 //<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><EFBFBD><E9B4A6>״̬
// add by cxj for P2P Manager Command
#define MANAGER_P2P_BI_GROUP_UPDATE 0x11 // BISys's IP List Update
#define MANAGER_P2P_MI_GROUP_UPDATE 0x12 // MISys's IP List Update
#define MANAGER_P2P_BT_ECLIPSE_UPDATE 0x13 // MISys's IP List Update
// Manager Command state Defination
#define MANAGER_PROCESS_STATE_UNKNOWN 0x00 // δ֪
#define MANAGER_PROCESS_STATE_RUNING 0x10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_PROCESS_STATE_OK 0x20 // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
#define MANAGER_PROCESS_STATE_UNTHORITY 0x30 // δ<><CEB4>Ȩ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
#define MANAGER_PROCESS_STATE_FAILED 0x40 // <20>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MANAGER_PROCESS_STATE_ERROR 0x50 // <20><><EFBFBD>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MATCH_METHOD_SUB 0x00 // sub match;
#define MATCH_METHOD_FUL 0x01 // full match;
#define MsgBodyHeadLen sizeof(struct msg_body_t)
#define UDP_SENDBACK_MAX_LEN 4*1024
#define UDP_SENDBACK_MAX_DATALEN UDP_SENDBACK_MAX_LEN-MsgHeadLen-MsgBodyHeadLen
typedef unsigned char UINT8;
typedef unsigned int UINT;
typedef unsigned long long UINT64;
typedef unsigned int UINT32;
typedef unsigned short UINT16;
typedef unsigned char UCHAR;
typedef char CHAR;
typedef unsigned short USHORT;
#define MSG_HEADER_LEN sizeof(struct msg_header_t)
struct msg_header_t {
USHORT magic_num; /* ħ<><C4A7><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0xECD5BCBC */
UCHAR version; /* <20><EFBFBD>ţ<EFBFBD>ĿǰֵΪ1 */
UCHAR msg_type; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
UINT cont_len; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD> */
}; /* sizeof = 8B */
#define OPT_HEAD_LEN (sizeof(UINT)+1)
struct opt_unit_t {
UINT opt_len; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> */
UCHAR opt_type; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
CHAR *opt_value; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
};
//ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
#define MAX_STATICSSENDNUM 10000
struct statlog_unit_t {
UINT16 unit_len; // <20><>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
UINT16 log_type; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
UINT32 hit_num; // <20><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
char prog_id[8]; // <20><>ĿID
};
struct msg_statlog_t {
UINT32 log_time; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT32 log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA>
};
//<2F><>Ԫ<EFBFBD><EFBFBD><E9B6A8>
struct msg_tup5_req_t {
UINT src_ip;
UINT dst_ip;
USHORT src_port;
USHORT dst_port;
UCHAR protocol;
CHAR pad[3];
};
// Service Configure Unit Defination
struct cfg_unit_t {
UCHAR op_type;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
UINT unit_len;
CHAR * value;
};
#define CFG_UNIT_HEAD_LEN (sizeof(UCHAR)*4 + sizeof(UINT)*2)
// added by cxj 20110811
// dynamic Configure Unit Defination;
struct d_cfg_unit_t{
UINT64 groupid;
UINT service;
UINT unit_len;
CHAR *value;
};
#define D_CFG_UNIT_HEAD_LEN (sizeof(uint64_t) * sizeof(INT) *2)
// Manager Configure Unit Defination
struct cmd_unit_t{
UINT optor_id;
UINT cmd_sn;
UINT cmd_code;
UINT cmd_val;
UINT opt_len;
};
#define CMD_UNIT_HEAD_LEN (sizeof(UINT) *5)
struct msg_cmdlog_t {
UINT log_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A1A3>ֵ<EFBFBD><D6B5>[0,0x7FFFFFFF]<5D><><EFBFBD><EFBFBD>ʱȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ time_t<5F><EFBFBD><E1B9B9>ֵ<EFBFBD><D6B5><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
UINT log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
// struct cmdlog_unit_t[log_num] cmdlog_unit;
};
#define MSG_CMDLOG_HEAD_LEN (sizeof(UINT) *2)
struct cmdlog_unit_t {
UINT CLJ_IP; //ִ<><D6B4>ָ<EFBFBD><D6B8><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT operator_ID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ԱID
UINT cmd_SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
UINT cmd_code; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8>
UCHAR state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>״̬
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT opt_len; // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><D6B7><EFBFBD>
// char * opt_value;
};
#define CMDLOG_UNIT_HEAD_LEN 20
// Dynamic Configure Defination;
// The Unit Defination be same with cfg_struct_t, only the flag value is not same;
#define DYNAMIC_WHITE_FLAG 0
#define DYNAMIC_BLACK_FLAG 1
struct msg_cfg_t {
UINT cfg_time;
UINT cfg_num;
};
#define MSG_CFG_HEAD_LEN (sizeof(UINT) * 2)
struct avs_data_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UINT8 pad;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 flags;// <20><><EFBFBD>ݱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT64 offset:48; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
/* unsigned long long offset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5><C4B6><EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
UINT dst_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
UINT src_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ԴIP<49><50>ַ
USHORT dst_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
USHORT src_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Դ<EFBFBD>˿<EFBFBD>
*/
};
#define AVS_DATA_HEAD_LEN (sizeof(struct avs_data_t))
//Protocol Defination
#define PROTO_HTTP 0x01
#define PROTO_SMTP 0x02
#define PROTO_POP3 0x03
#define PROTO_FTP 0x04
#define PROTO_HTTP_STREAM 0x81
#define PROTO_RTSP_RDT 0x82
#define PROTO_RTSP_RTP 0x83
#define PROTO_MMS 0x84
#define PROTO_ED2K 0x85
#define HITSER_WHITE _IPPORT 0x81
#define HITSER_BLACK _IPPORT 0x82
#define HITSER_WHITE_URL 0x83
#define HITSER_BLACK_URL 0x84
#define HITSER_WHITE_DOMAIN 0x85
#define HITSER_BLACK_DOMAIN 0x86
// Data_flag defination
struct metainfo_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
CHAR flag;
UINT8 hitservice;
UINT64 prog_len:48;
UINT cap_IP;
UCHAR protocol; // Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR media_type; // Media type
UCHAR data_flag; // Data Flag;
UCHAR opt_num; //ѡ<><D1A1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
struct opt_unit_t * opt_unit;
};
#define METAINFO_HEAD_LEN 24
//<2F><>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2>ʽ
struct survey_ind_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UCHAR service; // ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CHAR level; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г̶<D0B3>
CHAR pad[2]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
UINT cfg_id; // <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ID
UINT file_header_size; //
UINT file_packet_size;
};
#define SURVEY_MSG_FIX_LEN (sizeof(struct survey_ind_t))
#define SURVEY_PAYLOAD_LEN_MAX (1460-MSG_HEADER_LEN-SURVEY_MSG_FIX_LEN)
struct msg_survey_ack_t {
CHAR prog_id[8];
UCHAR service;
CHAR level;
CHAR pad[2];
UINT cfg_id;
};
struct live_data_t {
CHAR prog_id[8];
};
// for log
struct msg_log_t
{
CHAR prog_id[8];// program rule id;
UINT cfg_id; // hitted rule id;
UINT fount_time; // found time
UINT server_ip; // server ip;
UINT client_ip; // client ip;
USHORT server_port; // server port;
USHORT client_port; // client port;
UCHAR protocol; // translation protocol num;
UCHAR service; // service type;
UCHAR level; // result level;
UCHAR fd_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0<><30>ʾ<EFBFBD><CABE>̬<EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>2<EFBFBD><32>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>С<EFBFBD>
USHORT opt_num; // option number;
struct opt_unit_t * opt_info; // option point;
};
//#define MSG_LOG_FIX_LEN (sizeof(struct msg_log_t)-sizeof(void *))
#define FD_TYPE_DYNAMIC 0
#define FD_TYPE_STATIC 1
#define FD_TYPE_ANALYSE 2
#define SET_LOG_MSG(log,pid,cid,ft,sip,cip,sport,cport,pro,s,l,ftype,o_num,o_info) \
{ \
memcpy(log.prog_id,pid,8); \
log.cfg_id = cid;\
log.fount_time = ft; \
log.server_ip = sip; \
log.client_ip = cip; \
log.server_port =sport; \
log.client_port =cport; \
log.protocol = pro; \
log.service = s; \
log.level = l; \
log.fd_type = ftype; \
log.opt_num = o_num; \
log.opt_info = o_info; \
}
struct msg_tup5_resp_t {
UINT src_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ԴIP<49><50>ַ
UINT dst_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
USHORT src_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Դ<EFBFBD>˿<EFBFBD>
USHORT dst_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
UCHAR protocol; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT cont_len; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
char *cont; // <20><>Ϣ<EFBFBD><CFA2>URL<52><4C><EFBFBD><EFBFBD>
};
#define MSG_TUP5_RESP_FIX_LEN 16
// Common
int feedback_mem (int service, void *info, char *buf, int buf_len);
// soft balance
int feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len);
// soft balance
int direct_feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len, int thread_num);
// hardware balance
int feedback_mem_balance (unsigned long long pid, char *buf, int buf_len);
// feedback init
int feedback_init();
//void gfn_AppCounterInit();
//void gfn_AppCounterFree();
//int gfn_AppCounterAdd(int ProtolType);
//void gfn_AddSendBackOpt(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,int OptType,char *SrcData,int SrcLen,char **ppOptbuf);
//void gfn_AddSendBackData(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,char *SrcData,int SrcLen,char **ppOptbuf);
//int gfn_iSendToBEnd(tdLog* pstLog, int iLen, CBuffer* pBuf);
//void InitLogMessageLocal();
//int LogMessageLocal(char *buf,int buflen);
#ifdef __cplusplus
extern "C"
{
#endif
struct CFG_Common
{
UCHAR pad;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
};
#define CFG_COMMON_LEN sizeof(struct CFG_Common)
struct CFG_AV_Content
{
struct CFG_Common comm_header; // common header;
UINT contentlen; // length of content;
char * content; // AV config Content;
};
#define CFG_AV_CONTENT_FIXLEN (CFG_COMMON_LEN+sizeof(UINT))
struct CFG_IP_SETTING{
UINT sip; // server ip;
UINT mask; //
USHORT port; // server port;
UCHAR udpkey[4];
}__attribute__((__packed__));
int sendnto(int s, const void *msg, int n, unsigned int flags, const struct sockaddr *to, int tolen);
int gfn_iSetAVNewRuleTable(int iScanType,int iTableType,int iRuleNum,void * pstRTable);
int gfn_CScan_AVSearchMem(int iScanType,int iRuleType, char *data, int datalen, int begPos,struct cfg_unit_t *gResult, int *pFoundPostion, void **ppParam,int thread_num);
#ifdef __cplusplus
}
#endif
#endif

26
src/tool/pktgen/Makefile Normal file
View File

@@ -0,0 +1,26 @@
# CREATED by Guo Le, 08/23/2010
#
CC = gcc
PROGRAM = pktgen
CFLAGS += -g -Wall -D_DEBUG_
LDFLAGS += -lpthread -lm
OBJS = pktgen.o test.o
INCLUDE = -I. -I../common
.PHONY : all clean
all: pktgen
pktgen: pktgen.o
$(CC) $(LDFLAGS) \
pktgen.o common.a -o pktgen
test: test.o
$(CC) $(LDFLAGS) \
test.o ../lib/common.a -o test
$(OBJS): %.o: %.c
$(CC) -c $(CFLAGS) $(INCLUDE) $< -o $@
clean:
$(RM) *.o $(PROGRAM) common.a

BIN
src/tool/pktgen/common.a Normal file

Binary file not shown.

BIN
src/tool/pktgen/pktgen Normal file

Binary file not shown.

434
src/tool/pktgen/pktgen.c Normal file
View File

@@ -0,0 +1,434 @@
// pktgen.c
//
// generatio avs pkt
//
// MODIFIED by
// CREATED by Guo Le, 08/17/2010
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include "Com_SendToBack.h"
#include "loadprof.h"
#include "debug.h"
#include "error.h"
#include "output.h"
#include "log.h"
#include "pktgen.h"
pktgen_t *g_pktgen = NULL;
runtime_para_t *g_para = NULL;
FILE *g_log_prog_fd = NULL;
int thread_num_choice[10] = {1, 1, 1, 1, 1, 10, 20, 30, 40, 50};
int pktgen_readprof (char *fpath)
{
if (NULL == fpath) {
DEBUG_MESSAGE("null pointer");
return -1;
}
static runtime_para_t para;
g_para = &para;
profile_read_uint(fpath, "SYSTEM", "STOP_CONDITION", &g_para->stop_cond, 0);
if (g_para->stop_cond)
profile_read_uint(fpath, "SYSTEM", "STOP_PROG_NUM", &g_para->stop_prog_num, 0);
else
profile_read_uint(fpath, "SYSTEM", "STOP_PKT_NUM", &g_para->stop_pkt_num, 0);
profile_read_uint(fpath, "SYSTEM", "CONN_NUM_MAX", &g_para->conn_num_max, 1);
profile_read_uint(fpath, "SYSTEM", "SEND_RATE_PPS", &g_para->send_rate_pps, 0);
profile_read_uint(fpath, "SYSTEM", "MULTI_THREAD", &g_para->multi_thread, 0);
profile_read_uint(fpath, "SYSTEM", "LOSS_RATIO", &g_para->loss_ratio, 10);
profile_read_uint(fpath, "SYSTEM", "REPITITION_RATIO", &g_para->rep_ratio, 10);
profile_read_uint(fpath, "SYSTEM", "SET_ACK_FLAG", &g_para->set_ack_flag, 0);
profile_read_uint(fpath, "SYSTEM", "REPORT_INTERVAL", &g_para->info_interv, 0);
profile_read_uint(fpath, "SYSTEM", "LOG_PROG", &g_para->log_prog, 0);
profile_read_uint(fpath, "PROTOCOL", "CURRENT_VERSION", &g_para->version_cur, 0x1);
profile_read_uint(fpath, "PROTOCOL", "MAX_PROGRAM_LEN", &g_para->prog_len_max, 1024);
profile_read_naddr(fpath, "OUTPUT", "DST_ADDRESS", &g_para->dstaddr, 1);
return 0;
}
int pktgen_init()
{
if (NULL == g_pktgen || NULL == g_para) {
DEBUG_MESSAGE("null pointer");
return -1;
}
g_pktgen->conn = (conn_info_t *)calloc(g_para->conn_num_max,
sizeof(conn_info_t));
if(NULL == g_pktgen->conn) {
DEBUG_MESSAGE("calloc error");
return -1;
}
g_pktgen->sockfd = output_udp_init();
if (g_pktgen->sockfd < 0) {
printf("Read profile failed!");
exit(1);
}
g_pktgen->conn_num_cur = 0;
g_pktgen->count_pkt = 0;
g_pktgen->count_byte = 0;
g_pktgen->count_prog = 0;
g_pktgen->count_lost = 0;
if (g_para->log_prog) {
g_log_prog_fd = fopen("prog.log","ab+");
if (NULL == g_log_prog_fd)
return -1;
}
return 0;
}
// Clearing before exit
//
// Return:
// void
void pktgen_clear()
{
if (g_pktgen == NULL)
return;
fprintf(stdout, "-----------------------------------------------------------------------\n");
fprintf(stdout, "\nDone generating packets, wheew! ");
fprintf(stdout, " Statistics \n");
fprintf(stdout, " - #pkt: %lu\n", g_pktgen->count_pkt);
fprintf(stdout, " - #byte: %lu\n", g_pktgen->count_byte);
fprintf(stdout, " - #Prog: %u\n", g_pktgen->count_prog);
fprintf(stdout, " - #lost: %u\n", g_pktgen->count_lost);
fprintf(stdout, "=======================================================================\n");
output_udp_clear(g_pktgen->sockfd);
free(g_pktgen);
}
// Signal callback function
//
// Return:
// void
void sig_hand_int(
int signo) // [IN] signal number
{
pktgen_clear();
exit(1);
}
// Push info to stdout
//
// Return
// void
void print_runtime_para()
{
fprintf(stdout, "=======================================================================\n");
fprintf(stdout, " Parameters:\n");
fprintf(stdout, "-----------------------------------------------------------------------\n");
fprintf(stdout, " [SYSTEM]\n");
fprintf(stdout, " - Stop condition : %u\n", g_para->stop_cond);
if (!g_para->stop_cond)
fprintf(stdout, " - Stop pkt num : %u\n", g_para->stop_pkt_num);
else
fprintf(stdout, " - Stop prog num : %u\n", g_para->stop_prog_num);
fprintf(stdout, " - Max concurent connection : %u\n", g_para->conn_num_max);
fprintf(stdout, " - Loss ratio : %u/1,000,000\n", g_para->loss_ratio);
fprintf(stdout, " - Repitition ratio : %u/1,000,000\n", g_para->rep_ratio);
fprintf(stdout, " - Report interval(s) = %d\n", g_para->info_interv);
fprintf(stdout, " - Send rate control(pps) : %d\n", g_para->send_rate_pps);
fprintf(stdout, " - Use Multi-Thread : %s\n", g_para->multi_thread ? "On" : "Off");
fprintf(stdout, " - Set ACK flag : %s\n", g_para->set_ack_flag ? "On" : "Off");
fprintf(stdout, " - Log prog switch : %s\n", g_para->log_prog ? "On" : "Off");
fprintf(stdout, " [PROTOCOL]\n");
fprintf(stdout, " - Max program length : %d Byte\n",
g_para->prog_len_max);
fprintf(stdout, " - Current protocol version : %x\n",
g_para->version_cur);
fprintf(stdout, " [OUTPUT]\n");
char buf[20];
fprintf(stdout, " - Destination address: %s:%d\n",
inet_ntop(AF_INET, &g_para->dstaddr.s_addr, buf, sizeof buf),
ntohs(g_para->dstaddr.sin_port));
fprintf(stdout, "=======================================================================\n");
fprintf(stdout, " | %20s | %10s | %10s | %10s | %10s | %10s | %10s | %10s |\n",
"time", "#pkt", "#byte", "pps", "bps", "#conn", "#prog", "#lost");
fflush(stdout);
}
void *report(void *arg)
{
time_t currTime;
struct tm *now;
char strTime[32];
struct timeval interv_start, interv_end;
uint64_t proc_rate_pps;
uint64_t proc_rate_bps;
uint64_t interv_time;
uint64_t pkt_count_last = 0; // interval packet counter
uint64_t pkt_count_cur = 0;
uint64_t byte_count_last = 0;
uint64_t byte_count_cur = 0;
while (1) {
gettimeofday(&interv_start, NULL);
sleep(g_para->info_interv);
time(&currTime);
now = localtime(&currTime);
memset(strTime, 0, sizeof(strTime));
strftime(strTime, sizeof(strTime), "%Y-%m-%d %H:%M:%S", now);
pkt_count_cur = g_pktgen->count_pkt;
byte_count_cur = g_pktgen->count_byte;
gettimeofday(&interv_end, NULL);
interv_time = 1000000 * (interv_end.tv_sec - interv_start.tv_sec) +
interv_end.tv_usec - interv_start.tv_usec;
proc_rate_pps = 1000000 *
(pkt_count_cur - pkt_count_last) / interv_time;
proc_rate_bps = 8 * 1000000 *
(byte_count_cur - byte_count_last) / interv_time;
fprintf(stdout, " | %20s | %10lu | %10lu | %10lu | %10lu | %10u | %10u | %10u |\n",
strTime,
pkt_count_cur - pkt_count_last,
byte_count_cur - byte_count_last,
proc_rate_pps,
proc_rate_bps,
g_pktgen->conn_num_cur,
g_pktgen->count_prog,
g_pktgen->count_lost
);
pkt_count_last = pkt_count_cur;
byte_count_last = byte_count_cur;
fflush(stdout);
}
return 0;
}
inline uint64_t rand64()
{
uint64_t ret = rand();
ret <<= 32;
ret |= rand();
return ret;
}
void create_conn (int idx)
{
static conn_distributor_t conn_dis = {0};
g_pktgen->count_prog ++;
if (!conn_dis.prog_id) {
conn_dis.prog_id = rand64();
//conn_dis.prog_id = 555 + 1403641;
conn_dis.prog_len = (conn_dis.prog_id % g_para->prog_len_max) + 1;
conn_dis.thread_num = g_para->multi_thread ? thread_num_choice[rand() % 10] : 1;
conn_dis.thread_len = conn_dis.prog_len / conn_dis.thread_num;
conn_dis.thread_cur = 0;
}
conn_info_t *conn_cur = g_pktgen->conn + idx;
conn_cur->prog_id = conn_dis.prog_id;
conn_cur->prog_off = conn_dis.thread_len * conn_dis.thread_cur;
conn_cur->win_size = rand() % 900 + 500; // 500 - 1400
conn_cur->data_len = conn_dis.thread_len;
conn_cur->data_off = 0;
conn_cur->flag = 0;
if (0 == conn_dis.thread_cur) {
SETFLAG(conn_cur->flag, CONN_FLAG_FIRST);
conn_cur->prog_off = conn_dis.prog_len; // store prog_len in prog_off
}
if (conn_dis.thread_num - 1 == conn_dis.thread_cur) {
conn_cur->data_len += conn_dis.prog_len % conn_dis.thread_num;
conn_dis.prog_id = 0;
}
conn_dis.thread_cur ++;
}
void pktgen_run(pktgen_t *g_pktgen)
{
uint8_t buf[2000];
struct msg_header_t *mh = (struct msg_header_t*) buf;
struct metainfo_t *mi = (struct metainfo_t*) (buf + MSG_HEADER_LEN);
struct avs_data_t *ad = (struct avs_data_t*) (buf + MSG_HEADER_LEN);
mh->magic_num = PROTO_MAGICNUM;
mh->version = g_para->version_cur;
mh->msg_type = MSG_DATA_METAINFO;
mh->cont_len = 0;
uint64_t sendone_time, send_time;
if (g_para->send_rate_pps > 0)
sendone_time = 1000000 / g_para->send_rate_pps;
send_time = sendone_time;
int run = 1;
while (run) {
struct timeval sendone_end;
uint32_t idx;
if (g_para->stop_prog_num > 0 && g_pktgen->count_prog >= g_para->stop_prog_num) {
idx = rand() % g_pktgen->conn_num_cur;
} else {
idx = rand() % g_para->conn_num_max;
if (idx >= g_pktgen->conn_num_cur) {
create_conn(g_pktgen->conn_num_cur);
idx = g_pktgen->conn_num_cur;
g_pktgen->conn_num_cur ++;
}
}
conn_info_t *conn_cur = g_pktgen->conn + idx;
if (TESTFLAG(conn_cur->flag, CONN_FLAG_FIRST)) { // metainfo
mh->msg_type = MSG_DATA_METAINFO;
//mh->msg_type = MSG_DATA_BODY;
mh->cont_len = METAINFO_HEAD_LEN;
memcpy(mi->prog_id, &conn_cur->prog_id, 8);
mi->cap_IP = inet_addr("10.53.2.15");
mi->prog_len = conn_cur->prog_off; // [ATTENTION]
mi->media_type = 0x68; //TODO
mi->hitservice = 0x80;
conn_cur->prog_off = 0;
UNSETFLAG(conn_cur->flag, CONN_FLAG_FIRST);
if (g_para->log_prog) {
write_local_log(g_log_prog_fd, "pid %-20llu byte %-15lu",
conn_cur->prog_id,
mi->prog_len);
}
} else {
mh->msg_type = MSG_DATA_BODY;
memcpy(ad->prog_id, &conn_cur->prog_id, 8);
//ad->pad = 0;
ad->offset = conn_cur->prog_off + conn_cur->data_off;
if (g_para->set_ack_flag && ad->offset < 10240)
SETFLAG(ad->flags, AVS_FLAG_ACK);
if (conn_cur->win_size + conn_cur->data_off >= conn_cur->data_len) {
// last pkt
mh->cont_len = AVS_DATA_HEAD_LEN +
conn_cur->data_len - conn_cur->data_off;
*conn_cur = g_pktgen->conn[g_pktgen->conn_num_cur-1];
g_pktgen->conn_num_cur --;
if (!g_pktgen->conn_num_cur)
run = 0;
} else {
mh->cont_len = AVS_DATA_HEAD_LEN + conn_cur->win_size;
conn_cur->data_off += conn_cur->win_size;
}
}
g_pktgen->count_pkt ++;
g_pktgen->count_byte += MSG_HEADER_LEN + mh->cont_len;
// drop
if (g_para->loss_ratio > 0 &&
(uint32_t)rand() < g_para->loss_ratio * RAND_MAX / 1000000) {
g_pktgen->count_lost ++;
continue;
}
// send one
if (output_udp_send(g_pktgen->sockfd, g_para->dstaddr.s_addr, g_para->dstaddr.sin_port, buf, MSG_HEADER_LEN + mh->cont_len) < 0) {
printf("send error");
continue;
}
if (g_para->stop_pkt_num && g_pktgen->count_pkt >= g_para->stop_pkt_num)
run = 0;
if (g_para->send_rate_pps > 0) {
uint64_t now;
gettimeofday(&sendone_end, NULL);
now = sendone_end.tv_sec * 1000000 + sendone_end.tv_usec;
while (now < send_time) {
//usleep(10);
gettimeofday(&sendone_end, NULL);
now = sendone_end.tv_sec * 1000000 + sendone_end.tv_usec;
}
send_time = now + sendone_time;
}
}
return;
}
int main(int argc, char *argv[])
{
char *fprof;
if (argc > 3) {
fprintf(stdout, "\nUsage: %s [<config_file>]\n\n", argv[0]);
exit(0);
}
fprof = DEFAULT_CONFIG;
if (argc > 1)
fprof = argv[1];
fprintf(stdout, "Profile: %s\n", fprof);
if (pktgen_readprof(fprof) < 0) {
printf("Read profile failed!");
exit(1);
}
print_runtime_para();
srand(time(NULL));
g_pktgen = (pktgen_t *)calloc(1, sizeof(pktgen_t));
if (NULL == g_pktgen) {
DEBUG_MESSAGE("calloc error!");
pktgen_clear();
exit(1);
}
if (pktgen_init() < 0) {
printf("pktgen init failed!!");
pktgen_clear();
exit(1);
}
signal(SIGINT, sig_hand_int);
pthread_t report_tid;
if (g_para->info_interv > 0) {
pthread_create(&report_tid, NULL, report, NULL);
}
pktgen_run(g_pktgen);
pktgen_clear();
return EXIT_SUCCESS;
}

72
src/tool/pktgen/pktgen.h Normal file
View File

@@ -0,0 +1,72 @@
#ifndef _PKTGEN_H_
#define _PKTGEN_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "loadprof.h"
#define MAX_ACK 10240
#define DEFAULT_CONFIG "pktgen.ini"
#define AVS_FLAG_ACK 0x1
#define CONN_FLAG_FIRST 0x01
#define CONN_FLAG_LAST 0x02
#define CONN_FLAG_CLOSE 0x04
#define CONN_FLAG_ACK 0x08
#define SETFLAG(x, flag) x |= flag
#define UNSETFLAG(x, flag) x &= ~flag
#define TESTFLAG(x, flag) (0 != (x & flag))
typedef struct conn_info {
uint64_t prog_id; // program id
uint64_t prog_off:48;// program offset
uint16_t win_size; // send window size
uint64_t data_len:48;// data to be transmitted in this conn
uint16_t flag; // new | last
uint64_t data_off; // data that has been sent out
} conn_info_t;
typedef struct runtime_para {
// Parameters in config file
uint32_t stop_cond;
uint32_t stop_pkt_num; // pkt max
uint32_t stop_prog_num; // pkt max
uint32_t conn_num_max; // connection num
uint32_t send_rate_pps;
uint32_t multi_thread;
uint32_t set_ack_flag;
uint32_t log_prog;
uint32_t loss_ratio;
uint32_t rep_ratio;
uint32_t prog_len_max;
uint32_t version_cur; // current version
uint32_t info_interv;
addr4_t dstaddr;
} runtime_para_t;
typedef struct pktgen {
conn_info_t *conn;
uint32_t conn_num_cur;
uint64_t count_pkt;
uint64_t count_byte;
uint32_t count_prog;
uint32_t count_lost;
int sockfd;
} pktgen_t;
typedef struct conn_distributor {
uint64_t prog_id;
uint64_t prog_len:48;
uint64_t thread_len;
uint8_t thread_num; //max 255
uint8_t thread_cur;
} conn_distributor_t;
#endif // _PKTGEN_H_

View File

@@ -0,0 +1,46 @@
# Initialization file
[SYSTEM]
STOP_CONDITION = 0
# Packet num
STOP_PKT_NUM = 0
# Prog num
STOP_PROG_NUM = 2
# Max num of concurrent connections
CONN_NUM_MAX = 100
# Send out rate control
SEND_RATE_PPS = 20000
# Support multi-thread
MULTI_THREAD = 1
# Loss ratio (x/1,000,000)
LOSS_RATIO = 0
# Repitition ratio (x/1,000,000)
REPITITION_RATIO = 0
# ACK flag
SET_ACK_FLAG = 0
# Report interval time (s)
REPORT_INTERVAL = 5
# Log prog info
LOG_PROG = 0
[PROTOCOL]
# current version
CURRENT_VERSION = 3
# Max program length (Byte)
MAX_PROGRAM_LEN = 320000
[OUTPUT]
# destination ip address
#DST_ADDRESS = 10.0.6.203:22082
DST_ADDRESS = 127.0.0.1:22082
#DST_ADDRESS = 10.60.1.15:22082

32
src/tool/pktgen/test.c Normal file
View File

@@ -0,0 +1,32 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <arpa/inet.h>
#include "output.h"
int main() {
uint32_t s_addr = inet_addr("127.0.0.1");
uint16_t sin_port = htons(22082);
//int sockfd = output_udp_init();
int sockfd = output_udp_init_connect(s_addr, sin_port);
uint8_t buf[100];
int i;
int send = 0, error = 0;
while(1) {
//if (output_udp_send(sockfd, s_addr, sin_port, buf, 50) < 0) {
if (output_udp_send_connect(sockfd, buf, 50) < 0) {
error ++;
perror("error");
continue;
}
printf("ok\n");
send++;
sleep(1);
}
output_udp_clear_connect(sockfd);
//output_udp_clear(sockfd);
printf("%d %d\n", send, error);
return 1;
}

View File

@@ -0,0 +1,26 @@
#!/bin/sh
LOG_IPLIST=ip.back.lst
DEPLOY_TGZ=preproc.tgz
DEPLOY_DIR=/home/ictsoft/preproc
USER_NAME=root
USER_PASSWD='111111'
for ip in `cat $LOG_IPLIST`; do
echo $ip;
ping -c1 $ip;
./kr "killall -vq preprocessor r3; mkdir -p $DEPLOY_DIR; rm -rf $DEPLOY_DIR/*" $ip $USER_NAME $USER_PASSWD
./kscp $DEPLOY_TGZ $ip $DEPLOY_DIR $USER_NAME $USER_PASSWD
./kr "cd $DEPLOY_DIR; tar -zxvf $DEPLOY_TGZ; rm -f $DEPLOY_TGZ; ./start" $ip $USER_NAME $USER_PASSWD
done
CHECK_RUN_LOG=runstat.log
for ip in `cat $LOG_IPLIST`; do
echo $ip;
./kr "cd $DEPLOY_DIR/log tail -f preproc*; ps aux |grep preproc" $ip $USER_NAME $USER_PASSWD >>$CHECK_RUN_LOG
done

View File

@@ -0,0 +1,35 @@
#! /bin/sh
LOG_SENDBACK="sendback.log"
LOG_PIDLIST="pidlst.log"
LOG_SUM="sum.log"
#KEYWORD1=192.168.1.101
#KEYWORD2=10.52.210.142
KEYWORD1=124.234.244.160
KEYWORD2=208.166.50.105
LOG_TEMP="temp.log"
LOG_RESULT="front.txt"
echo "Merge $LOG_SENDBACK ..."
cat /home/guole/Prog/SendBackData_* > $LOG_SENDBACK
echo "Generate $LOG_PIDLIST ..."
cat /home/guole/Prog/find_prog.log | grep $KEYWORD1 | grep $KEYWORD2 | awk '{print $4}' |sort -u > $LOG_PIDLIST
echo "Generate $LOG_SUM ..."
./sum $LOG_SENDBACK > $LOG_SUM
echo "Generate $LOG_RESULT ..."
for pid in `cat $LOG_PIDLIST`; do
grep $pid $LOG_SUM >> $LOG_TEMP
done
cat $LOG_TEMP | sort > $LOG_RESULT
rm -f $LOG_TEMP
wc -l $LOG_RESULT

View File

@@ -0,0 +1,30 @@
#! /bin/sh
LOG_IPLIST=ip.back.lst
LOG_PIDLIST=pidlst.log
LOG_WASHOUT=washout.log
LOG_TEMP=temp.log
LOG_DIR=/home/ictsoft/preproc/log
USER_NAME=root
USER_PASSWD='111111'
for ip in `cat $LOG_IPLIST`; do
FETCH_CMD="LOG_RESULT=\"backend.$ip.txt\";
cd $LOG_DIR;
for pid in \`cat $LOG_PIDLIST\`;
do grep \$pid $LOG_WASHOUT >> $LOG_TEMP;
done;
awk '{print \$4,\$6,\$8}' $LOG_TEMP | sort > \$LOG_RESULT;
rm -f $LOG_TEMP"
./kscp $LOG_PIDLIST $ip $LOG_DIR $USER_NAME $USER_PASSWD
./kr "$FETCH_CMD" $ip $USER_NAME $USER_PASSWD
./kscpr $ip $LOG_DIR/backend.*.txt . $USER_NAME $USER_PASSWD
done
cat backend.* | sort > backend.txt
wc -l backend.txt

2
src/tool/scripts/Lindent Normal file
View File

@@ -0,0 +1,2 @@
#!/bin/sh
indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs "$@"

View File

@@ -0,0 +1,27 @@
#########################################################################################################################
# Version: 1.1 #
# Date : 2010-09-17 #
# Author : liuganggang #
# E-mail : liuganggang@software.ict.ac.cn #
# Purpose: Check log files to see the problems #
# #
# #
#########################################################################################################################
LOG="./washout.log"
AV_CHECK_CONF_FILE_NAME="./check.conf"
ct_prog_name=`cat $AV_CHECK_CONF_FILE_NAME | awk '{print $1}'| tr $'\x0d\x0a' $'\x20'`
line=`cat $AV_CHECK_CONF_FILE_NAME | wc -l`
for ((loop=1;loop<= $line;++loop))
do
cur_prog_name=`echo "$ct_prog_name"|awk '{print $'$loop'}'`
# echo "$cur_prog_name"
cat $LOG|grep $cur_prog_name>>result1.txt
done
cat result1.txt | awk '{print $4,$8}'|sort > result2.txt

View File

@@ -0,0 +1,29 @@
#########################################################################################################################
# Version: 1.1 #
# Date : 2010-09-17 #
# Author : liuganggang #
# E-mail : liuganggang@software.ict.ac.cn #
# Purpose: Check log files to see the problems #
# #
# #
#########################################################################################################################
cat /home/ictfd/Prog/SendBackData_* > sendback.log
cat /home/ictfd/Prog/find_prog.log |grep 192.168.1.101|grep 10.52.210.142 | awk '{print $4}' >check.conf
./sum sendback.log > sum.log
LOG="./sum.log"
AV_CHECK_CONF_FILE_NAME="./check.conf"
ct_prog_name=`cat $AV_CHECK_CONF_FILE_NAME | awk '{print $1}'| tr $'\x0d\x0a' $'\x20'`
line=`cat $AV_CHECK_CONF_FILE_NAME | wc -l`
for ((loop=1;loop<= $line;++loop))
do
cur_prog_name=`echo "$ct_prog_name"|awk '{print $'$loop'}'`
# echo "$cur_prog_name"
cat $LOG|grep $cur_prog_name>>result1.txt
done
cat result1.txt|sort > result.txt

View File

@@ -0,0 +1,7 @@
#! /bin/sh
cd /home/ictfd/Prog/
>SendBackData_0.log
>SendBackData_1.log
>SendBackData_2.log
>SendBackData_3.log
>find_prog.log

View File

@@ -0,0 +1,2 @@
#! /bin/sh
rm *.log *.txt -f

View File

@@ -0,0 +1,36 @@
#!/bin/sh
BACKEND="\
10.0.6.203"
slkdfj="10.52.210.181 \
10.52.210.182 \
10.52.210.183 \
10.52.210.184 \
10.52.210.185 \
10.52.210.186 \
10.52.210.187 \
10.52.210.188"
DEPLOY_TGZ=preproc.tgz
DEPLOY_DIR=/home/ictsoft/preproc
USER_NAME=root
USER_PASSWD='111111'
for ip in $BACKEND; do
echo $ip;
ping -c1 $ip;
./kr "killall -vq preprocessor r3; mkdir -p $DEPLOY_DIR; rm -rf $DEPLOY_DIR/*" $ip $USER_NAME $USER_PASSWD
./kscp $DEPLOY_TGZ $ip $DEPLOY_DIR $USER_NAME $USER_PASSWD
./kr "cd $DEPLOY_DIR; tar -zxvf $DEPLOY_TGZ; rm -f $DEPLOY_TGZ; ./start" $ip $USER_NAME $USER_PASSWD
done
CHECK_RUN_LOG=runstat.log
for ip in $BACKEND; do
echo $ip;
./kr "cd $DEPLOY_DIR/log tail -f preproc*; ps aux |grep preproc" $ip $USER_NAME $USER_PASSWD >>$CHECK_RUN_LOG
done

View File

@@ -0,0 +1,2 @@
10.0.6.203

View File

@@ -0,0 +1,9 @@
10.52.210.181
10.52.210.182
10.52.210.183
10.52.210.184
10.52.210.185
10.52.210.186
10.52.210.187
10.52.210.188

4
src/tool/scripts/kkk.sh Normal file
View File

@@ -0,0 +1,4 @@
ssh 10.60.1.15 "cd code/debug; ./stop"
scp -r debug/* 10.60.1.15:code/debug
ssh 10.60.1.15 "cd code/debug; ./restart"

62
src/tool/scripts/kr Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/expect -f
if {$argc != 4} {
puts "usage example:./kr \"ps aux\" 10.52.202.1 user passwd"
exit
}
set cmd [lindex $argv 0]
set sip [lindex $argv 1]
set user [lindex $argv 2]
set passwd [lindex $argv 3]
set logfile "kr.log"
set timeout 5
spawn ssh $user@$sip
set flag 0
sleep 5
expect {
"(yes/no)?"
{
send "yes\r"
expect "*password:"
send "$passwd\r"
}
"*password:"
{
send "$passwd\r"
}
"Connection closed by remote host"
{
system echo " " $sip " " closed >> $logfile
set flag 1
}
"No route to host"
{
system echo " " $sip " " no host >> $logfile
set flag 1
}
timeout
{
system echo " " $sip " " timeout >> $logfile
set flag 1
}
"]#"
{
send "$cmd\r"
expect "]#"
sleep 1
send "logout\r"
set flag 1
system echo $user@$sip "]# " '$cmd' >> $logfile
}
}
if {$flag!=1} {
expect "]#"
send "$cmd\r"
system echo $user@$sip "]# " '$cmd' >> $logfile
expect "]#"
sleep 1
send "logout\r"
}
expect eof

42
src/tool/scripts/kscp Normal file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/expect -f
if {$argc != 5} {
puts "usage example:./kscp test.tgz 10.52.202.1 /home/ user 'passwd'"
exit
}
set filename [lindex $argv 0]
set sip [lindex $argv 1]
set dir [lindex $argv 2]
set user [lindex $argv 3]
set passwd [lindex $argv 4]
set logfile "kscp.log"
set timeout 5
spawn scp $filename $user@$sip:$dir
sleep 5
expect {
"(yes/no)?"
{
send "yes\r"
expect "*password:"
send "$passwd\r"
}
"*password:"
{
send "$passwd\r"
}
"Connection closed by remote host"
{
system echo " " $sip " " closed >> $logfile
}
"No route to host"
{
system echo " " $sip " " no host >> $logfile
}
timeout
{
system echo " " $sip " " timeout >> $logfile
}
}
expect eof

40
src/tool/scripts/kscpr Normal file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/expect -f
if {$argc != 5} {
puts "usage example:./kscpr 10.52.202.1 test.tgz /home/ user 'passwd'"
exit
}
set sip [lindex $argv 0]
set filename [lindex $argv 1]
set dir [lindex $argv 2]
set user [lindex $argv 3]
set passwd [lindex $argv 4]
set logfile "kscpr.log"
set timeout 8
spawn scp $user@$sip:$filename $dir
expect {
"(yes/no)?"
{
send "yes\r"
expect "*password:"
send "$passwd\r"
}
"*password:"
{
send "$passwd\r"
}
"Connection closed by remote host"
{
system echo " " $sip " " closed >> $logfile
}
"No route to host"
{
system echo " " $sip " " no host >> $logfile
}
timeout
{
system echo " " $sip " " timeout >> $logfile
}
}
expect eof

View File

@@ -0,0 +1,482 @@
#ifndef _H_COM_SENDTOBACK_H
#define _H_COM_SENDTOBACK_H
#include <sys/socket.h>
// Defination for all kinds of msg
#define PROTO_MAGICNUM 0x5641
#define PROTO_VERSION 3
// Conf Msg
#define MSG_MANAGER 0x00 // System Manager Configure Message
#define MSG_CONFIG_ALL 0x01 // All Configure Update Message
#define MSG_CONFIG_INC 0x02 // Increase Configure Update Message
#define MSG_CONFIG_REQ 0x03 // Configure Request Message
#define MSG_D_CONFIG_ALL 0x04 // Configure Require's Response Message .
#define MSG_D_CONFIG_INC 0x05 // Configure Require's Response Message .
#define MSG_D_CONFIG_REQ 0x06 // Dynamic Configure Item Require Message This message come from configure server ;
#define MSG_TUPLE5_URL_REQ 0x0A // Tuple5 to url Request;
#define MSG_P2P_D_CONFIG_ALL 0x71 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_INC 0x72 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_REQ 0x73 // Configure Require's Response Message .
// Conf Operation defination
#define CONFIG_OP_TYPE_NO 0x00 // no any operation
#define CONFIG_OP_TYPE_ADD 0x01 // add a config rule
#define CONFIG_OP_TYPE_DEL 0x02 // del a config rule
#define CONFIG_OP_TYPE_MOD 0x03 // modify a config rule
// Response Msg
#define MSG_RESP_CHECKRESULT 0x11 // Check Result notification
#define MSG_RESP_REJECT 0x12 // Reject Message notification
#define MSG_RESP_CHARACTER 0x13 // Character notification
// Log Msg
#define MSG_MANAGER_LOG 0x20 // Manager Log Msg
#define MSG_RESULT_LOG 0x21 // Result Log Msg for Block or Monitor
#define MSG_STATIC_LOG 0x22 // Valid Message
#define MSG_TUPLE5_URL_LOG 0x2A // Tuple response Message
// Data Msg
#define MSG_DATA_METAINFO 0x31
#define MSG_DATA_BODY 0x32
#define MSG_DATA_TAIL 0x33
// Definatin for all types of vidio and audio file;
#define FILE_UNKNOWN 0x00
#define FILE_VIDEO 0x60
#define FILE_WMV 0x61
#define FILE_MPG 0x62
#define FILE_FLV 0x63
#define FILE_RMFF 0x65
#define FILE_AVI 0x66
#define FILE_SWF 0x67
#define FILE_MPG4 0x68
#define FILE_AIFF 0x69
#define FILE_OGG 0x6A
#define FILE_DRC 0x6B
#define FILE_DIRECTSHOW 0x6C
#define FILE_FLIC 0x6D
#define FILE_INDEO 0x6E
#define FILE_MKV 0x6F
#define FILE_AUDIO 0x70
#define FILE_MP3 0x71
#define BE_IMAGE_TYPE(t) ((t>=FILE_IMAGE) && (t<0x90))
#define BE_VIDEO_TYPE(t) ((t>=FILE_VIDEO) && (t<0x70))
#define BE_AUDIO_TYPE(t) ((t>=FILE_AUDIO) && (t<0x80))
#define FILE_IMAGE 0x80
#define FILE_JPG 0x84
#define FILE_BMP 0x85
#define FILE_GIF 0x86
#define MMS_TYPE 0x90
#define HTTP_STREAM_TYPE 0x90
#define RTSP_RDT_TYPE 0x92
#define RTSP_RTP_TYPE 0x91
#define SERVICE_FLAG_FD 0 // FenDu Flag
#define SERVICE_FLAG_JC 1 // JianCe Flag
// Defination of service type ;
#define SERVICE_IPPORT_WHITE 0x01 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK 0x02 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE 0x03 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK 0x04 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE 0x05 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK 0x06 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// added by cxj 20100811
#define SERVICE_P2P_STATIC_WHITEIP 0x15
#define SERVICE_P2P_BI_WHITEIP 0x16
#define SERVICE_P2P_MI_WHITEIP 0x17
#define SERVICE_P2P_EMULE_SERVER 0x51 //
#define SERVICE_P2P_EMULE_KEY 0x52 //
#define SERVICE_P2P_EMULE_FILEID 0x53 //
#define SERVICE_P2P_EMULE_NODE 0x54 //
#define SERVICE_P2P_BT_INFOHASH 0x41 // BT Infohash Black List
#define SERVICE_P2P_BT_NODE 0x44 // BT Bone Node
#define SERVICE_P2P_BT_SERVICE 0x61 // BT DHT Index Server List
#define SERVICE_P2P_BT_ECLIPSE_IPLIST 0x45
#define SERVICE_P2P_BT_POLLUTION_IPLIST 0x46
#define SERVICE_P2P_EMULE_POLLUTION_IPLIST 0x55
//
#define SERVICE_EMULE_SERVER 0x71 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_KEYS 0x72 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FHID 0x73 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FNAME 0x74 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_NODE 0x75 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_WHITE_JC 0x81 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK_JC 0x82 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE_JC 0x83 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK_JC 0x84 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE_JC 0x85 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK_JC 0x86 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_SERVICE_NUM 0xff
// Manager Command Defination
#define MANAGER_AV_SYS_CMD 0x02010000 //<2F><><EFBFBD><EFBFBD>Ƶϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_AV_PIC_CMD 0x02020000 //
#define MANAGER_AV_SYS_QUERY 0x01 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>״̬
#define MANAGER_AV_SYS_OPEN 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CLOSE 0x03 //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CHANGE 0x04 //<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><EFBFBD><E9B4A6>״̬
// add by cxj for P2P Manager Command
#define MANAGER_P2P_BI_GROUP_UPDATE 0x11 // BISys's IP List Update
#define MANAGER_P2P_MI_GROUP_UPDATE 0x12 // MISys's IP List Update
#define MANAGER_P2P_BT_ECLIPSE_UPDATE 0x13 // MISys's IP List Update
// Manager Command state Defination
#define MANAGER_PROCESS_STATE_UNKNOWN 0x00 // δ֪
#define MANAGER_PROCESS_STATE_RUNING 0x10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_PROCESS_STATE_OK 0x20 // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
#define MANAGER_PROCESS_STATE_UNTHORITY 0x30 // δ<><CEB4>Ȩ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
#define MANAGER_PROCESS_STATE_FAILED 0x40 // <20>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MANAGER_PROCESS_STATE_ERROR 0x50 // <20><><EFBFBD>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MATCH_METHOD_SUB 0x00 // sub match;
#define MATCH_METHOD_FUL 0x01 // full match;
#define MsgBodyHeadLen sizeof(struct msg_body_t)
#define UDP_SENDBACK_MAX_LEN 4*1024
#define UDP_SENDBACK_MAX_DATALEN UDP_SENDBACK_MAX_LEN-MsgHeadLen-MsgBodyHeadLen
typedef unsigned char UINT8;
typedef unsigned int UINT;
typedef unsigned long long UINT64;
typedef unsigned int UINT32;
typedef unsigned short UINT16;
typedef unsigned char UCHAR;
typedef char CHAR;
typedef unsigned short USHORT;
#define MSG_HEADER_LEN sizeof(struct msg_header_t)
struct msg_header_t {
USHORT magic_num; /* ħ<><C4A7><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0xECD5BCBC */
UCHAR version; /* <20><EFBFBD>ţ<EFBFBD>ĿǰֵΪ1 */
UCHAR msg_type; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
UINT cont_len; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD> */
}; /* sizeof = 8B */
#define OPT_HEAD_LEN (sizeof(UINT)+1)
struct opt_unit_t {
UINT opt_len; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> */
UCHAR opt_type; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
CHAR *opt_value; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
};
//ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
#define MAX_STATICSSENDNUM 10000
struct statlog_unit_t {
UINT16 unit_len; // <20><>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
UINT16 log_type; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
UINT32 hit_num; // <20><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
char prog_id[8]; // <20><>ĿID
};
struct msg_statlog_t {
UINT32 log_time; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT32 log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA>
};
//<2F><>Ԫ<EFBFBD><EFBFBD><E9B6A8>
struct msg_tup5_req_t {
UINT src_ip;
UINT dst_ip;
USHORT src_port;
USHORT dst_port;
UCHAR protocol;
CHAR pad[3];
};
// Service Configure Unit Defination
struct cfg_unit_t {
UCHAR op_type;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
UINT unit_len;
CHAR * value;
};
#define CFG_UNIT_HEAD_LEN (sizeof(UCHAR)*4 + sizeof(UINT)*2)
// added by cxj 20110811
// dynamic Configure Unit Defination;
struct d_cfg_unit_t{
UINT64 groupid;
UINT service;
UINT unit_len;
CHAR *value;
};
#define D_CFG_UNIT_HEAD_LEN (sizeof(uint64_t) * sizeof(INT) *2)
// Manager Configure Unit Defination
struct cmd_unit_t{
UINT optor_id;
UINT cmd_sn;
UINT cmd_code;
UINT cmd_val;
UINT opt_len;
};
#define CMD_UNIT_HEAD_LEN (sizeof(UINT) *5)
struct msg_cmdlog_t {
UINT log_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A1A3>ֵ<EFBFBD><D6B5>[0,0x7FFFFFFF]<5D><><EFBFBD><EFBFBD>ʱȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ time_t<5F><EFBFBD><E1B9B9>ֵ<EFBFBD><D6B5><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
UINT log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
// struct cmdlog_unit_t[log_num] cmdlog_unit;
};
#define MSG_CMDLOG_HEAD_LEN (sizeof(UINT) *2)
struct cmdlog_unit_t {
UINT CLJ_IP; //ִ<><D6B4>ָ<EFBFBD><D6B8><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT operator_ID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ԱID
UINT cmd_SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
UINT cmd_code; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8>
UCHAR state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>״̬
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT opt_len; // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><D6B7><EFBFBD>
// char * opt_value;
};
#define CMDLOG_UNIT_HEAD_LEN 20
// Dynamic Configure Defination;
// The Unit Defination be same with cfg_struct_t, only the flag value is not same;
#define DYNAMIC_WHITE_FLAG 0
#define DYNAMIC_BLACK_FLAG 1
struct msg_cfg_t {
UINT cfg_time;
UINT cfg_num;
};
#define MSG_CFG_HEAD_LEN (sizeof(UINT) * 2)
struct avs_data_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UINT8 pad;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 flags;// <20><><EFBFBD>ݱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT64 offset:48; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
/* unsigned long long offset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5><C4B6><EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
UINT dst_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
UINT src_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ԴIP<49><50>ַ
USHORT dst_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
USHORT src_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Դ<EFBFBD>˿<EFBFBD>
*/
};
#define AVS_DATA_HEAD_LEN (sizeof(struct avs_data_t))
//Protocol Defination
#define PROTO_HTTP 0x01
#define PROTO_SMTP 0x02
#define PROTO_POP3 0x03
#define PROTO_FTP 0x04
#define PROTO_HTTP_STREAM 0x81
#define PROTO_RTSP_RDT 0x82
#define PROTO_RTSP_RTP 0x83
#define PROTO_MMS 0x84
#define PROTO_ED2K 0x85
#define HITSER_WHITE _IPPORT 0x81
#define HITSER_BLACK _IPPORT 0x82
#define HITSER_WHITE_URL 0x83
#define HITSER_BLACK_URL 0x84
#define HITSER_WHITE_DOMAIN 0x85
#define HITSER_BLACK_DOMAIN 0x86
// Data_flag defination
struct metainfo_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
CHAR flag;
UINT8 hitservice;
UINT64 prog_len:48;
UINT cap_IP;
UCHAR protocol; // Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR media_type; // Media type
UCHAR data_flag; // Data Flag;
UCHAR opt_num; //ѡ<><D1A1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
struct opt_unit_t * opt_unit;
};
#define METAINFO_HEAD_LEN 24
//<2F><>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2>ʽ
struct survey_ind_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UCHAR service; // ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CHAR level; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г̶<D0B3>
CHAR pad[2]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
UINT cfg_id; // <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ID
UINT file_header_size; //
UINT file_packet_size;
};
#define SURVEY_MSG_FIX_LEN (sizeof(struct survey_ind_t))
#define SURVEY_PAYLOAD_LEN_MAX (1460-MSG_HEADER_LEN-SURVEY_MSG_FIX_LEN)
struct msg_survey_ack_t {
CHAR prog_id[8];
UCHAR service;
CHAR level;
CHAR pad[2];
UINT cfg_id;
};
struct live_data_t {
CHAR prog_id[8];
};
// for log
struct msg_log_t
{
CHAR prog_id[8];// program rule id;
UINT cfg_id; // hitted rule id;
UINT fount_time; // found time
UINT server_ip; // server ip;
UINT client_ip; // client ip;
USHORT server_port; // server port;
USHORT client_port; // client port;
UCHAR protocol; // translation protocol num;
UCHAR service; // service type;
UCHAR level; // result level;
UCHAR fd_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0<><30>ʾ<EFBFBD><CABE>̬<EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>2<EFBFBD><32>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>С<EFBFBD>
USHORT opt_num; // option number;
struct opt_unit_t * opt_info; // option point;
};
//#define MSG_LOG_FIX_LEN (sizeof(struct msg_log_t)-sizeof(void *))
#define FD_TYPE_DYNAMIC 0
#define FD_TYPE_STATIC 1
#define FD_TYPE_ANALYSE 2
#define SET_LOG_MSG(log,pid,cid,ft,sip,cip,sport,cport,pro,s,l,ftype,o_num,o_info) \
{ \
memcpy(log.prog_id,pid,8); \
log.cfg_id = cid;\
log.fount_time = ft; \
log.server_ip = sip; \
log.client_ip = cip; \
log.server_port =sport; \
log.client_port =cport; \
log.protocol = pro; \
log.service = s; \
log.level = l; \
log.fd_type = ftype; \
log.opt_num = o_num; \
log.opt_info = o_info; \
}
struct msg_tup5_resp_t {
UINT src_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ԴIP<49><50>ַ
UINT dst_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
USHORT src_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Դ<EFBFBD>˿<EFBFBD>
USHORT dst_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
UCHAR protocol; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT cont_len; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
char *cont; // <20><>Ϣ<EFBFBD><CFA2>URL<52><4C><EFBFBD><EFBFBD>
};
#define MSG_TUP5_RESP_FIX_LEN 16
// Common
int feedback_mem (int service, void *info, char *buf, int buf_len);
// soft balance
int feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len);
// soft balance
int direct_feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len, int thread_num);
// hardware balance
int feedback_mem_balance (unsigned long long pid, char *buf, int buf_len);
// feedback init
int feedback_init();
//void gfn_AppCounterInit();
//void gfn_AppCounterFree();
//int gfn_AppCounterAdd(int ProtolType);
//void gfn_AddSendBackOpt(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,int OptType,char *SrcData,int SrcLen,char **ppOptbuf);
//void gfn_AddSendBackData(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,char *SrcData,int SrcLen,char **ppOptbuf);
//int gfn_iSendToBEnd(tdLog* pstLog, int iLen, CBuffer* pBuf);
//void InitLogMessageLocal();
//int LogMessageLocal(char *buf,int buflen);
#ifdef __cplusplus
extern "C"
{
#endif
struct CFG_Common
{
UCHAR pad;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
};
#define CFG_COMMON_LEN sizeof(struct CFG_Common)
struct CFG_AV_Content
{
struct CFG_Common comm_header; // common header;
UINT contentlen; // length of content;
char * content; // AV config Content;
};
#define CFG_AV_CONTENT_FIXLEN (CFG_COMMON_LEN+sizeof(UINT))
struct CFG_IP_SETTING{
UINT sip; // server ip;
UINT mask; //
USHORT port; // server port;
UCHAR udpkey[4];
}__attribute__((__packed__));
int sendnto(int s, const void *msg, int n, unsigned int flags, const struct sockaddr *to, int tolen);
int gfn_iSetAVNewRuleTable(int iScanType,int iTableType,int iRuleNum,void * pstRTable);
int gfn_CScan_AVSearchMem(int iScanType,int iRuleType, char *data, int datalen, int begPos,struct cfg_unit_t *gResult, int *pFoundPostion, void **ppParam,int thread_num);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,8 @@
.PHONY: clean sendprog
all: sendprog
sendprog: sendprog.c
gcc -g -Wall sendprog.c output.c input.c -lpthread -o sendprog
clean:
rm -f sendprog

78
src/tool/sendprog/input.c Normal file
View File

@@ -0,0 +1,78 @@
// input.c
//
//
//
// MODIFIED by
// CREATED by Guo Le, 09/11/2010
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <fcntl.h>
#include "input.h"
int input_udp_init(uint16_t port)
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd) {
//DEBUG_PRINTF("listener: socket %s", strerror());
perror("listener: socket");
return -1;
}
struct sockaddr_in my_addr; /* my address information */
my_addr.sin_family = AF_INET; /* host byte order */
my_addr.sin_port = port; /* short, network byte order */
my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */
bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
//DEBUG_PRINTF("listener: bind %s", strerror());
perror("listener: bind");
close(sockfd);
return -1;
}
/*
if(fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1) {
close(sockfd);
perror("fcntl");
return -1;
}
*/
return sockfd;
}
void input_udp_clear(int sockfd)
{
close(sockfd);
}
int input_udp_recv(int sockfd, uint32_t *src_ip, uint8_t *buf, uint32_t *size)
{
if (NULL == buf)
return -1;
int numbytes;
struct sockaddr_storage their_addr;
socklen_t addr_len = sizeof their_addr;
//printf("listener: waiting to recvfrom...\n");
if ((numbytes = recvfrom(sockfd, buf, 1500 , 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) {
perror("recvfrom");
return -1;
}
//*src_ip = get_in_addr((struct sockaddr *)&their_addr);
*src_ip = ((struct sockaddr_in *)&their_addr)->sin_addr.s_addr;
*size = numbytes;
return numbytes;
}

11
src/tool/sendprog/input.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef _INPUT_H_
#define _INPUT_H_
#include <stdint.h>
int input_udp_init(uint16_t port);
void input_udp_clear(int sockfd);
int input_udp_recv(int sockfd, uint32_t *src_ip, uint8_t *buf, uint32_t *size);
#endif /* _INPUT_H_ */

109
src/tool/sendprog/output.c Normal file
View File

@@ -0,0 +1,109 @@
// output.c
//
//
//
// MODIFIED by
// CREATED BY Guo Le, 08/24/2010
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "output.h"
int output_udp_init()
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd) {
printf("udpout_init: socket %s\n", strerror(errno));
return -1;
}
return sockfd;
}
void output_udp_clear(int sockfd)
{
close(sockfd);
}
// send udp packet
int output_udp_send(int sockfd, uint32_t addr, uint16_t port, uint8_t *data, int datalen)
{
struct sockaddr_in dst_addr; /* connector's address information */
dst_addr.sin_family = AF_INET; /* host byte order */
dst_addr.sin_port = port; /* short, network byte order */
dst_addr.sin_addr.s_addr = addr;
bzero(&(dst_addr.sin_zero), 8); /* zero the rest of the struct */
int numbytes = sendto(sockfd, data, datalen, 0, (struct sockaddr *)&dst_addr, sizeof(struct sockaddr));
if (-1 == numbytes) {
printf("udpout_send: sendto: %s", strerror(errno));
return -1;
}
//printf("sent %d bytes to %s\n",numbytes,inet_ntoa(dst_addr.sin_addr));
if (numbytes != datalen)
printf("udpout_send: loss data");
return numbytes;
}
int output_udp_init_connect(uint32_t addr, uint16_t port, char *dev)
{
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sockfd) {
printf("udpout_init_connect: socket %s\n", strerror(errno));
return -1;
}
struct sockaddr_in dst_addr; /* connector's address information */
dst_addr.sin_family = AF_INET; /* host byte order */
dst_addr.sin_port = port; /* short, network byte order */
dst_addr.sin_addr.s_addr = addr;
bzero(&(dst_addr.sin_zero), 8); /* zero the rest of the struct */
if (-1 == connect(sockfd, (struct sockaddr*)&dst_addr, sizeof(dst_addr)))
{
printf("udpout_init_connect: error in connect %s\n", strerror(errno));
return -1;
}
if (dev) {
struct ifreq interface;
strncpy(interface.ifr_ifrn.ifrn_name, dev, IFNAMSIZ);
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&interface, sizeof(interface)) < 0) {
printf("SO_BINDTODEVICE failed %s\n", strerror(errno));
return -1;
}
}
return sockfd;
}
void output_udp_clear_connect(int sockfd)
{
close(sockfd);
}
// send udp packet
int output_udp_send_connect(int sockfd, uint8_t *data, int datalen)
{
int numbytes = send(sockfd, data, datalen, 0);
if (-1 == numbytes) {
printf("udpout_send_connect: send: %d %s\n", errno, strerror(errno));
return -1;
}
if (numbytes != datalen) {
printf("udpout_send_connect: loss data");
}
return numbytes;
}

View File

@@ -0,0 +1,16 @@
#ifndef _OUTPUT_H_
#define _OUTPUT_H_
#include <stdint.h>
// send udp packet
int output_udp_init();
void output_udp_clear(int sockfd);
int output_udp_send(int sockfd, uint32_t addr, uint16_t port, uint8_t *data, int datalen);
int output_udp_init_connect(uint32_t addr, uint16_t port, char *dev);
void output_udp_clear_connect(int sockfd);
int output_udp_send_connect(int sockfd, uint8_t *data, int datalen);
#endif /* _OUTPUT_H_ */

BIN
src/tool/sendprog/sendprog Normal file

Binary file not shown.

View File

@@ -0,0 +1,274 @@
// sendprog.c
//
//
//
// MODIFIED by
// CREATED by Guo Le, 10/16/2011
#include "sendprog.h"
void print_usage(char *pname)
{
static const char *USAGE =
"Usage: %s -i <input file> -o <output addr> [OPTION]\n"
" -i <input file>, input file name.\n"
" -o <output addr>, output socket. eg. 127.0.0.1:22082\n"
" -t <timeout sec>, default 1 sec.\n"
" -p <prog_id>, in hex or dec. eg.0x624353641237 \n"
" -h, print this help.\n"
"\n"
" eg. %s -i ./if.mp3 -o 127.0.0.1:22082 -t 310 -p 0x624353641237\n";
fprintf(stderr, USAGE, pname, pname);
}
int send_prog(FILE *fp, int sockfd, uint64_t flen, uint64_t prog_id, int timeout)
{
char pkt_mi[1500];
char pkt_ad[1500];
struct msg_header_t *mh_mi = (struct msg_header_t*)pkt_mi;
struct msg_header_t *mh_ad = (struct msg_header_t*)pkt_ad;
struct metainfo_t *mi = (struct metainfo_t*)(pkt_mi + MSG_HEADER_LEN);
struct avs_data_t *ad = (struct avs_data_t*)(pkt_ad + MSG_HEADER_LEN);
uint8_t *data = (uint8_t*)ad + AVS_DATA_HEAD_LEN;
uint64_t max_data_len = 1400 - MSG_HEADER_LEN - AVS_DATA_HEAD_LEN;
// init metainfo pkt
*((uint64_t *)(mi->prog_id)) = prog_id;
//mi->flag = META_FLAG_DUMP;
mi->hitservice = 0x83;
mi->prog_len = flen;
mi->cap_IP = inet_addr("10.53.2.15");
mi->protocol = 0;
mi->media_type = 0x68;
mi->data_flag = 0x02;
mi->opt_num = 0;
mh_mi->magic_num = PROTO_MAGICNUM;
mh_mi->version = PROTO_VERSION;
mh_mi->msg_type = MSG_DATA_METAINFO;
mh_mi->cont_len = METAINFO_HEAD_LEN;
// init avs_data pkt
*((uint64_t *)(ad->prog_id)) = prog_id;
ad->pad = 0;
ad->flags = 0;
ad->offset = 0;
mh_ad->magic_num = PROTO_MAGICNUM;
mh_ad->version = PROTO_VERSION;
mh_ad->msg_type = MSG_DATA_BODY;
mh_ad->cont_len = 0;
int ret;
int i;
printf("Sending metainfo * 3 ... \n");
// send metainfo 3 times
for (i=0; i<1; i++) {
ret = output_udp_send_connect(sockfd, pkt_mi, mh_mi->cont_len + MSG_HEADER_LEN);
if (ret != mh_mi->cont_len + MSG_HEADER_LEN) {
fprintf(stderr, "output_udp_send_connect error!\n");
return -1;
}
}
// send avs_data
fprintf(stdout, "Sending avs_data ... \n");
while (flen > 0) {
int payload;
if (flen > max_data_len) {
payload = max_data_len;
} else {
payload = flen;
}
mh_ad->cont_len = payload + AVS_DATA_HEAD_LEN;
flen -= payload;
if (1 != fread(data, payload, 1, fp)) {
fprintf(stderr, "fread error!\n");
break;
}
//printf("%lu \n", mh_ad->cont_len + MSG_HEADER_LEN);
ret = output_udp_send_connect(sockfd, pkt_ad, mh_ad->cont_len + MSG_HEADER_LEN);
if (ret != mh_ad->cont_len + MSG_HEADER_LEN) {
fprintf(stderr, "output_udp_send_connect error!\n");
perror("");
break;
}
ad->offset += payload;
}
return 0;
printf("Waiting until timesout ... ");
for (i=0; i<timeout; i++) {
fprintf(stdout, "\b\b\b\b\b\b\b%3d sec", i);
fflush(stdout);
sleep(1);
}
fprintf(stdout, "\nSending metainfo * 3 ... \n");
// send metainfo 3 times again
for (i=0; i<3; i++) {
ret = output_udp_send_connect(sockfd, pkt_mi, mh_mi->cont_len + MSG_HEADER_LEN);
if (ret != mh_mi->cont_len + MSG_HEADER_LEN) {
fprintf(stderr, "output_udp_send_connect error!\n");
perror("");
return -1;
}
}
return 0;
}
void *rcv(void *args)
{
fprintf(stdout, "[Thread] Message handling thread run...\n");
int sockfd;
sockfd = input_udp_init(22080);
if (sockfd < 0) {
fprintf(stderr, "input_udp_init error");
fflush(stderr);
return NULL;
}
uint32_t src_ip;
uint32_t size;
char buf[1500];
struct msg_header_t *mh = (struct msg_header_t*)buf;
while (1) {
fflush(stderr);
// recv
while (input_udp_recv(sockfd, &src_ip, buf, &size) < 0);
// Ignore invalid packet
if (size < MSG_HEADER_LEN + SURVEY_MSG_FIX_LEN) {
fprintf(stderr, "size error");
continue;
}
if (PROTO_MAGICNUM != mh->magic_num) {
fprintf(stderr, "magic num error");
continue;
}
if (0x11 != mh->msg_type) {
fprintf(stderr, "msg_type error");
continue;
}
struct survey_ind_t *si = (struct survey_ind_t*)(buf + MSG_HEADER_LEN);
printf("%s\n", (char *)si + SURVEY_MSG_FIX_LEN);
}
}
int main(int argc, char *argv[])
{
char *opt_output = NULL;
char *opt_input = NULL;
char optchr;
char *s;
char buf[20];
int len1, len2;
uint32_t ip;
uint16_t port;
int sockfd;
FILE *fp;
uint64_t flen;
int timeout = -1;
uint64_t prog_id = 0x6000000000000000;
while ((optchr = getopt(argc, argv, "i:o:p:t:v")) != -1) {
switch(optchr) {
case 'i':
opt_input = optarg;
break;
case 'o':
opt_output = optarg;
break;
case 't':
timeout = atoi(optarg);
break;
case 'p':
if (strstr(optarg, "0x")) {
prog_id = strtoll(optarg, (char **)NULL, 16);
} else {
prog_id = strtoll(optarg, (char **)NULL, 10);
}
break;
case 'v':
fprintf(stderr, "%s version : "SENDPROG_VERSION"\n", argv[0]);
return 0;
default:
print_usage(argv[0]);
return 0;
}
}
if (NULL == opt_input || NULL == opt_output) {
print_usage(argv[0]);
return -1;
}
if (timeout < 0) {
timeout = 1;
}
s = strchr (opt_output, ':');
if (NULL == s) {
fprintf(stderr, "output format error: %s\n", opt_output);
return -1;
}
len1 = s - opt_output;
len2 = strlen(opt_output) - len1;
if (0 == len1 || len2 < 2) {
fprintf(stderr, "output format error: %s\n", opt_output);
return -1;
}
strncpy(buf, opt_output, len1);
buf[len1] = 0;
ip = inet_addr(buf);
s += 1;
strncpy(buf, s, len2);
port = htons(atoi(buf));
sockfd = output_udp_init_connect(ip, port, NULL);
if (-1 == sockfd) {
fprintf(stderr, "output_udp_init_connect error");
return -1;
}
fp = fopen(opt_input, "r");
if (fp == NULL) {
fprintf(stderr, "fopen %s\n", opt_input);
exit(-1);
}
fseek(fp, 0L, SEEK_END);
flen = ftell(fp);
fseek(fp, 0L, SEEK_SET);
printf("========= <parameter> =========\n");
printf(" prog_id : 0x%lx (hex)\n", prog_id);
printf(" %lu (dec)\n", prog_id);
printf(" timeout : %d s\n", timeout);
printf(" file : %s (%lu Byte)\n", opt_input, flen);
printf(" dst : %s %d\n", inet_ntop(AF_INET, &ip, buf, sizeof buf), ntohs(port));
printf("========= <parameter> =========\n");
pthread_t rcv_tid;
int ret = pthread_create(&rcv_tid, NULL, rcv, NULL);
if (ret != 0) {
printf("pthread_create error");
return -1;
}
sleep(3);
send_prog(fp, sockfd, flen, prog_id, timeout);
fclose(fp);
output_udp_clear_connect(sockfd);
return 0;
}

View File

@@ -0,0 +1,20 @@
#ifndef __SEND_PROG_H__
#define __SEND_PROG_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <getopt.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <arpa/inet.h>
#include "input.h"
#include "output.h"
#include "Com_SendToBack.h"
#define SENDPROG_VERSION "0.1"
#define META_FLAG_DUMP 0x02
#endif /* __SEND_PROG_H__ */

View File

@@ -0,0 +1,482 @@
#ifndef _H_COM_SENDTOBACK_H
#define _H_COM_SENDTOBACK_H
#include <sys/socket.h>
// Defination for all kinds of msg
#define PROTO_MAGICNUM 0x5641
#define PROTO_VERSION 3
// Conf Msg
#define MSG_MANAGER 0x00 // System Manager Configure Message
#define MSG_CONFIG_ALL 0x01 // All Configure Update Message
#define MSG_CONFIG_INC 0x02 // Increase Configure Update Message
#define MSG_CONFIG_REQ 0x03 // Configure Request Message
#define MSG_D_CONFIG_ALL 0x04 // Configure Require's Response Message .
#define MSG_D_CONFIG_INC 0x05 // Configure Require's Response Message .
#define MSG_D_CONFIG_REQ 0x06 // Dynamic Configure Item Require Message This message come from configure server ;
#define MSG_TUPLE5_URL_REQ 0x0A // Tuple5 to url Request;
#define MSG_P2P_D_CONFIG_ALL 0x71 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_INC 0x72 // Configure Require's Response Message .
#define MSG_P2P_D_CONFIG_REQ 0x73 // Configure Require's Response Message .
// Conf Operation defination
#define CONFIG_OP_TYPE_NO 0x00 // no any operation
#define CONFIG_OP_TYPE_ADD 0x01 // add a config rule
#define CONFIG_OP_TYPE_DEL 0x02 // del a config rule
#define CONFIG_OP_TYPE_MOD 0x03 // modify a config rule
// Response Msg
#define MSG_RESP_CHECKRESULT 0x11 // Check Result notification
#define MSG_RESP_REJECT 0x12 // Reject Message notification
#define MSG_RESP_CHARACTER 0x13 // Character notification
// Log Msg
#define MSG_MANAGER_LOG 0x20 // Manager Log Msg
#define MSG_RESULT_LOG 0x21 // Result Log Msg for Block or Monitor
#define MSG_STATIC_LOG 0x22 // Valid Message
#define MSG_TUPLE5_URL_LOG 0x2A // Tuple response Message
// Data Msg
#define MSG_DATA_METAINFO 0x31
#define MSG_DATA_BODY 0x32
#define MSG_DATA_TAIL 0x33
// Definatin for all types of vidio and audio file;
#define FILE_UNKNOWN 0x00
#define FILE_VIDEO 0x60
#define FILE_WMV 0x61
#define FILE_MPG 0x62
#define FILE_FLV 0x63
#define FILE_RMFF 0x65
#define FILE_AVI 0x66
#define FILE_SWF 0x67
#define FILE_MPG4 0x68
#define FILE_AIFF 0x69
#define FILE_OGG 0x6A
#define FILE_DRC 0x6B
#define FILE_DIRECTSHOW 0x6C
#define FILE_FLIC 0x6D
#define FILE_INDEO 0x6E
#define FILE_MKV 0x6F
#define FILE_AUDIO 0x70
#define FILE_MP3 0x71
#define BE_IMAGE_TYPE(t) ((t>=FILE_IMAGE) && (t<0x90))
#define BE_VIDEO_TYPE(t) ((t>=FILE_VIDEO) && (t<0x70))
#define BE_AUDIO_TYPE(t) ((t>=FILE_AUDIO) && (t<0x80))
#define FILE_IMAGE 0x80
#define FILE_JPG 0x84
#define FILE_BMP 0x85
#define FILE_GIF 0x86
#define MMS_TYPE 0x90
#define HTTP_STREAM_TYPE 0x90
#define RTSP_RDT_TYPE 0x92
#define RTSP_RTP_TYPE 0x91
#define SERVICE_FLAG_FD 0 // FenDu Flag
#define SERVICE_FLAG_JC 1 // JianCe Flag
// Defination of service type ;
#define SERVICE_IPPORT_WHITE 0x01 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK 0x02 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE 0x03 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK 0x04 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE 0x05 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK 0x06 //<2F><>Ŀ<EFBFBD><C4BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// added by cxj 20100811
#define SERVICE_P2P_STATIC_WHITEIP 0x15
#define SERVICE_P2P_BI_WHITEIP 0x16
#define SERVICE_P2P_MI_WHITEIP 0x17
#define SERVICE_P2P_EMULE_SERVER 0x51 //
#define SERVICE_P2P_EMULE_KEY 0x52 //
#define SERVICE_P2P_EMULE_FILEID 0x53 //
#define SERVICE_P2P_EMULE_NODE 0x54 //
#define SERVICE_P2P_BT_INFOHASH 0x41 // BT Infohash Black List
#define SERVICE_P2P_BT_NODE 0x44 // BT Bone Node
#define SERVICE_P2P_BT_SERVICE 0x61 // BT DHT Index Server List
#define SERVICE_P2P_BT_ECLIPSE_IPLIST 0x45
#define SERVICE_P2P_BT_POLLUTION_IPLIST 0x46
#define SERVICE_P2P_EMULE_POLLUTION_IPLIST 0x55
//
#define SERVICE_EMULE_SERVER 0x71 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_KEYS 0x72 //<2F><>ĿΨһID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FHID 0x73 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_FNAME 0x74 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_EMULE_NODE 0x75 //emule<6C><65>hashkey<65><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_WHITE_JC 0x81 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_IPPORT_BLACK_JC 0x82 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_WHITE_JC 0x83 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_URL_BLACK_JC 0x84 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_WHITE_JC 0x85 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SERVICE_HOST_BLACK_JC 0x86 //IP+PORT<52><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_SERVICE_NUM 0xff
// Manager Command Defination
#define MANAGER_AV_SYS_CMD 0x02010000 //<2F><><EFBFBD><EFBFBD>Ƶϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_AV_PIC_CMD 0x02020000 //
#define MANAGER_AV_SYS_QUERY 0x01 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>״̬
#define MANAGER_AV_SYS_OPEN 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CLOSE 0x03 //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><C4A3>
#define MANAGER_AV_SYS_CHANGE 0x04 //<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>Ƶģ<C6B5><EFBFBD><E9B4A6>״̬
// add by cxj for P2P Manager Command
#define MANAGER_P2P_BI_GROUP_UPDATE 0x11 // BISys's IP List Update
#define MANAGER_P2P_MI_GROUP_UPDATE 0x12 // MISys's IP List Update
#define MANAGER_P2P_BT_ECLIPSE_UPDATE 0x13 // MISys's IP List Update
// Manager Command state Defination
#define MANAGER_PROCESS_STATE_UNKNOWN 0x00 // δ֪
#define MANAGER_PROCESS_STATE_RUNING 0x10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MANAGER_PROCESS_STATE_OK 0x20 // <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
#define MANAGER_PROCESS_STATE_UNTHORITY 0x30 // δ<><CEB4>Ȩ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
#define MANAGER_PROCESS_STATE_FAILED 0x40 // <20>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MANAGER_PROCESS_STATE_ERROR 0x50 // <20><><EFBFBD>ɻָ<C9BB><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MATCH_METHOD_SUB 0x00 // sub match;
#define MATCH_METHOD_FUL 0x01 // full match;
#define MsgBodyHeadLen sizeof(struct msg_body_t)
#define UDP_SENDBACK_MAX_LEN 4*1024
#define UDP_SENDBACK_MAX_DATALEN UDP_SENDBACK_MAX_LEN-MsgHeadLen-MsgBodyHeadLen
typedef unsigned char UINT8;
typedef unsigned int UINT;
typedef unsigned long long UINT64;
typedef unsigned int UINT32;
typedef unsigned short UINT16;
typedef unsigned char UCHAR;
typedef char CHAR;
typedef unsigned short USHORT;
#define MSG_HEADER_LEN sizeof(struct msg_header_t)
struct msg_header_t {
USHORT magic_num; /* ħ<><C4A7><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ0xECD5BCBC */
UCHAR version; /* <20><EFBFBD>ţ<EFBFBD>ĿǰֵΪ1 */
UCHAR msg_type; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> */
UINT cont_len; /* <20><>Ϣ<EFBFBD><CFA2><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD> */
}; /* sizeof = 8B */
#define OPT_HEAD_LEN (sizeof(UINT)+1)
struct opt_unit_t {
UINT opt_len; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> */
UCHAR opt_type; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
CHAR *opt_value; /* <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
};
//ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
#define MAX_STATICSSENDNUM 10000
struct statlog_unit_t {
UINT16 unit_len; // <20><>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
UINT16 log_type; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
UINT32 hit_num; // <20><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
char prog_id[8]; // <20><>ĿID
};
struct msg_statlog_t {
UINT32 log_time; // ͳ<><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT32 log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>־<EFBFBD><D6BE>Ԫ<EFBFBD><D4AA>
};
//<2F><>Ԫ<EFBFBD><EFBFBD><E9B6A8>
struct msg_tup5_req_t {
UINT src_ip;
UINT dst_ip;
USHORT src_port;
USHORT dst_port;
UCHAR protocol;
CHAR pad[3];
};
// Service Configure Unit Defination
struct cfg_unit_t {
UCHAR op_type;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
UINT unit_len;
CHAR * value;
};
#define CFG_UNIT_HEAD_LEN (sizeof(UCHAR)*4 + sizeof(UINT)*2)
// added by cxj 20110811
// dynamic Configure Unit Defination;
struct d_cfg_unit_t{
UINT64 groupid;
UINT service;
UINT unit_len;
CHAR *value;
};
#define D_CFG_UNIT_HEAD_LEN (sizeof(uint64_t) * sizeof(INT) *2)
// Manager Configure Unit Defination
struct cmd_unit_t{
UINT optor_id;
UINT cmd_sn;
UINT cmd_code;
UINT cmd_val;
UINT opt_len;
};
#define CMD_UNIT_HEAD_LEN (sizeof(UINT) *5)
struct msg_cmdlog_t {
UINT log_time; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A1A3>ֵ<EFBFBD><D6B5>[0,0x7FFFFFFF]<5D><><EFBFBD><EFBFBD>ʱȡֵ<C8A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ time_t<5F><EFBFBD><E1B9B9>ֵ<EFBFBD><D6B5><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
UINT log_num; // <20><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
// struct cmdlog_unit_t[log_num] cmdlog_unit;
};
#define MSG_CMDLOG_HEAD_LEN (sizeof(UINT) *2)
struct cmdlog_unit_t {
UINT CLJ_IP; //ִ<><D6B4>ָ<EFBFBD><D6B8><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT operator_ID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ԱID
UINT cmd_SN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
UINT cmd_code; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8>
UCHAR state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ָ<EFBFBD><D6B8><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>״̬
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT opt_len; // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'\0'<27>ַ<EFBFBD><D6B7><EFBFBD>
// char * opt_value;
};
#define CMDLOG_UNIT_HEAD_LEN 20
// Dynamic Configure Defination;
// The Unit Defination be same with cfg_struct_t, only the flag value is not same;
#define DYNAMIC_WHITE_FLAG 0
#define DYNAMIC_BLACK_FLAG 1
struct msg_cfg_t {
UINT cfg_time;
UINT cfg_num;
};
#define MSG_CFG_HEAD_LEN (sizeof(UINT) * 2)
struct avs_data_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UINT8 pad;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 flags;// <20><><EFBFBD>ݱ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT64 offset:48; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
/* unsigned long long offset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5><C4B6><EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB>
UINT dst_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
UINT src_ip; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ԴIP<49><50>ַ
USHORT dst_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
USHORT src_port; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Դ<EFBFBD>˿<EFBFBD>
*/
};
#define AVS_DATA_HEAD_LEN (sizeof(struct avs_data_t))
//Protocol Defination
#define PROTO_HTTP 0x01
#define PROTO_SMTP 0x02
#define PROTO_POP3 0x03
#define PROTO_FTP 0x04
#define PROTO_HTTP_STREAM 0x81
#define PROTO_RTSP_RDT 0x82
#define PROTO_RTSP_RTP 0x83
#define PROTO_MMS 0x84
#define PROTO_ED2K 0x85
#define HITSER_WHITE _IPPORT 0x81
#define HITSER_BLACK _IPPORT 0x82
#define HITSER_WHITE_URL 0x83
#define HITSER_BLACK_URL 0x84
#define HITSER_WHITE_DOMAIN 0x85
#define HITSER_BLACK_DOMAIN 0x86
// Data_flag defination
struct metainfo_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
CHAR flag;
UINT8 hitservice;
UINT64 prog_len:48;
UINT cap_IP;
UCHAR protocol; // Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR media_type; // Media type
UCHAR data_flag; // Data Flag;
UCHAR opt_num; //ѡ<><D1A1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
struct opt_unit_t * opt_unit;
};
#define METAINFO_HEAD_LEN 24
//<2F><>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2>ʽ
struct survey_ind_t {
CHAR prog_id[8]; // <20><>Ŀ<EFBFBD><C4BF>ID<49><44><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
UCHAR service; // ҵ<><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CHAR level; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г̶<D0B3>
CHAR pad[2]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
UINT cfg_id; // <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ID
UINT file_header_size; //
UINT file_packet_size;
};
#define SURVEY_MSG_FIX_LEN (sizeof(struct survey_ind_t))
#define SURVEY_PAYLOAD_LEN_MAX (1460-MSG_HEADER_LEN-SURVEY_MSG_FIX_LEN)
struct msg_survey_ack_t {
CHAR prog_id[8];
UCHAR service;
CHAR level;
CHAR pad[2];
UINT cfg_id;
};
struct live_data_t {
CHAR prog_id[8];
};
// for log
struct msg_log_t
{
CHAR prog_id[8];// program rule id;
UINT cfg_id; // hitted rule id;
UINT fount_time; // found time
UINT server_ip; // server ip;
UINT client_ip; // client ip;
USHORT server_port; // server port;
USHORT client_port; // client port;
UCHAR protocol; // translation protocol num;
UCHAR service; // service type;
UCHAR level; // result level;
UCHAR fd_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0<><30>ʾ<EFBFBD><CABE>̬<EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>2<EFBFBD><32>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>С<EFBFBD>
USHORT opt_num; // option number;
struct opt_unit_t * opt_info; // option point;
};
//#define MSG_LOG_FIX_LEN (sizeof(struct msg_log_t)-sizeof(void *))
#define FD_TYPE_DYNAMIC 0
#define FD_TYPE_STATIC 1
#define FD_TYPE_ANALYSE 2
#define SET_LOG_MSG(log,pid,cid,ft,sip,cip,sport,cport,pro,s,l,ftype,o_num,o_info) \
{ \
memcpy(log.prog_id,pid,8); \
log.cfg_id = cid;\
log.fount_time = ft; \
log.server_ip = sip; \
log.client_ip = cip; \
log.server_port =sport; \
log.client_port =cport; \
log.protocol = pro; \
log.service = s; \
log.level = l; \
log.fd_type = ftype; \
log.opt_num = o_num; \
log.opt_info = o_info; \
}
struct msg_tup5_resp_t {
UINT src_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ԴIP<49><50>ַ
UINT dst_ip; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD><C4BF>IP<49><50>ַ
USHORT src_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Դ<EFBFBD>˿<EFBFBD>
USHORT dst_port; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ŀ<EFBFBD>Ķ˿<C4B6>
UCHAR protocol; // <20><>Ԫ<EFBFBD><D4AA>֮һ<D6AE><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR pad; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USHORT cont_len; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
char *cont; // <20><>Ϣ<EFBFBD><CFA2>URL<52><4C><EFBFBD><EFBFBD>
};
#define MSG_TUP5_RESP_FIX_LEN 16
// Common
int feedback_mem (int service, void *info, char *buf, int buf_len);
// soft balance
int feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len);
// soft balance
int direct_feedback_mem_soft_balance (unsigned long long pid, char *buf, int buf_len, int thread_num);
// hardware balance
int feedback_mem_balance (unsigned long long pid, char *buf, int buf_len);
// feedback init
int feedback_init();
//void gfn_AppCounterInit();
//void gfn_AppCounterFree();
//int gfn_AppCounterAdd(int ProtolType);
//void gfn_AddSendBackOpt(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,int OptType,char *SrcData,int SrcLen,char **ppOptbuf);
//void gfn_AddSendBackData(struct msg_header_t *pMsgHeader,struct msg_body_t *pMsgBodyHeader,
// char *pSendBackBuf,char *SrcData,int SrcLen,char **ppOptbuf);
//int gfn_iSendToBEnd(tdLog* pstLog, int iLen, CBuffer* pBuf);
//void InitLogMessageLocal();
//int LogMessageLocal(char *buf,int buflen);
#ifdef __cplusplus
extern "C"
{
#endif
struct CFG_Common
{
UCHAR pad;
UCHAR service;
UCHAR weight;
UCHAR flag;
UINT cfg_id;
};
#define CFG_COMMON_LEN sizeof(struct CFG_Common)
struct CFG_AV_Content
{
struct CFG_Common comm_header; // common header;
UINT contentlen; // length of content;
char * content; // AV config Content;
};
#define CFG_AV_CONTENT_FIXLEN (CFG_COMMON_LEN+sizeof(UINT))
struct CFG_IP_SETTING{
UINT sip; // server ip;
UINT mask; //
USHORT port; // server port;
UCHAR udpkey[4];
}__attribute__((__packed__));
int sendnto(int s, const void *msg, int n, unsigned int flags, const struct sockaddr *to, int tolen);
int gfn_iSetAVNewRuleTable(int iScanType,int iTableType,int iRuleNum,void * pstRTable);
int gfn_CScan_AVSearchMem(int iScanType,int iRuleType, char *data, int datalen, int begPos,struct cfg_unit_t *gResult, int *pFoundPostion, void **ppParam,int thread_num);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,46 @@
# CREATED by Guo Le, 08/23/2010
#
CC = gcc
PROGRAM = backend sendsurvey sendbeat
CFLAGS = -g -Wall
INCLUDE = -I. -I./common
LDFLAGS = -lpthread -Wall
OBJS = backend.o
DEPLOY_DIR = /home/ictsoft/fake_backend
BUILD_DIR = ./debug
.PHONY : all clean
all: $(PROGRAM)
backend: backend.o
$(CC) $(INCLUDE) $(LDFLAGS) backend.o common.a -o backend
sendsurvey: sendsurvey.c
gcc $(INCLUDE) $(LDFLAGS) -g -Wall sendsurvey.c common.a -o sendsurvey
sendbeat: sendbeat.c
gcc $(INCLUDE) $(LDFLAGS) -g -Wall sendbeat.c common.a -o sendbeat
$(OBJS): %.o: %.c
$(CC) -c $(CFLAGS) $(INCLUDE) $< -o $@
clean:
$(RM) *.o $(PROGRAM)
localdeploy: $(PROGRAM)
@echo "- Kill previous process ---------------------------------------------"
@-killall -vq backend_video backend_audio;
@echo "---------------------------------------------------------------------"
@echo "- Check deploy dir --------------------------------------------------"
@if [ ! -d "$(DEPLOY_DIR)" ]; \
then echo "DEPLOY_DIR doesn't exist!"; mkdir -p $(DEPLOY_DIR); \
else echo "DEPLOY_DIR exist, remove all"; fi
@-rm -rfv $(DEPLOY_DIR)/*
@echo "---------------------------------------------------------------------"
@echo "- Deploy ------------------------------------------------------------"
@cp -rv $(BUILD_DIR)/* $(DEPLOY_DIR)
@echo "---------------------------------------------------------------------"
@echo "- Run ---------------------------------------------------------------"
@cd $(DEPLOY_DIR); ./r2;
@ps au | grep -e "backend" | grep -v grep

BIN
src/tool/sendsurvey/backend Normal file

Binary file not shown.

View File

@@ -0,0 +1,211 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include "loadprof.h"
#include "input.h"
#include "output.h"
#include "Com_SendToBack.h"
#include "log.h"
#include "backend.h"
delay_queue_t *g_delay_queue;
parameter_t *g_para = NULL;
delay_queue_t *delay_queue_init(int max_len)
{
delay_queue_t *dq = (delay_queue_t *)calloc(1, sizeof(delay_queue_t));
if (NULL == dq) {
fprintf(stderr, "No enough Memory for queue!");
return NULL;
}
dq->buf = (delay_elem_t *)calloc(max_len, sizeof(delay_elem_t));
if (NULL == dq->buf) {
fprintf(stderr, "No enough Memory for q->buf!");
free(dq);
return NULL;
}
dq->head = 0;
dq->tail = 1;
dq->max_len = max_len;
return dq;
}
void *send_routine(void *arg)
{
uint16_t port_survey = g_para->survey_port;
FILE *fd_log;
char buf_survey[BUF_SIZE];
struct msg_header_t *mh_survey = (struct msg_header_t*)buf_survey;
struct survey_ind_t *msi_survey = (struct survey_ind_t *)(buf_survey + MSG_HEADER_LEN);
memset(buf_survey, 0, BUF_SIZE);
mh_survey->magic_num = PROTO_MAGICNUM;
mh_survey->version = 3;
mh_survey->msg_type = MSG_RESP_CHECKRESULT;
mh_survey->cont_len = SURVEY_MSG_FIX_LEN;
msi_survey->service = g_para->service;
msi_survey->level = g_para->level;
msi_survey->cfg_id = 28;
int fd_survey = output_udp_init();
if (fd_survey < 0) {
printf("socket error!");
exit(1);
}
if (g_para->log_switch) {
fd_log = fopen(LOG_SURVEY,"ab+");
if (NULL == fd_log) {
printf("log init error!");
exit(1);
}
}
int head_new;
int url_len;
delay_queue_t *q = g_delay_queue;
while (1) {
head_new = (q->head + 1) % q->max_len;
while (head_new == q->tail)
if (g_para->timeout > 0)
sleep(g_para->timeout);
else
sleep(1);
delay_elem_t *qe = q->buf + head_new;
while (qe->expire_time > time(NULL))
sleep(1);
memcpy(msi_survey->prog_id, qe->prog_id, 8);
url_len = 1 + sprintf(buf_survey + MSG_HEADER_LEN + SURVEY_MSG_FIX_LEN, "/home/log/%lu.log", *((uint64_t *)qe->prog_id));
mh_survey->cont_len = SURVEY_MSG_FIX_LEN + url_len;
output_udp_send(fd_survey, qe->src_ip, port_survey,
(unsigned char *)buf_survey, MSG_HEADER_LEN + SURVEY_MSG_FIX_LEN + url_len);
if (g_para->log_switch) {
char ntop_buf[20];
write_local_log(fd_log, "dst %s pid %-11llu service 0x%2x level %d",
inet_ntop(AF_INET, &qe->src_ip, ntop_buf, sizeof ntop_buf),
*((unsigned long long*)msi_survey->prog_id),
msi_survey->service,
msi_survey->level);
fflush(fd_log);
}
q->head = head_new;
}
}
int read_profile(char *fpath)
{
if (NULL != g_para) {
fprintf(stderr, "g_para has been initialized!");
return -1;
}
static parameter_t para;
g_para = &para;
int rc;
/* [SYSTEM] */
rc = profile_read_nport(fpath, "SYSTEM", "SURVEY_PORT", &g_para->survey_port, 1);
if (rc < 1)
return -1;
rc = profile_read_nport(fpath, "SYSTEM", "DATA_PORT", &g_para->data_port, 1);
if (rc < 1)
return -1;
rc = profile_read_nbyte_hex(fpath, "SYSTEM", "SERVICE", &g_para->service, 1);
if (rc < 1)
return -1;
profile_read_uint(fpath, "SYSTEM", "TIMEOUT", &g_para->timeout, 0);
profile_read_uint(fpath, "SYSTEM", "LOG_SWITCH", &g_para->log_switch, 0);
profile_read_uint(fpath, "SYSTEM", "LEVEL", &g_para->level, 0);
profile_read_uint(fpath, "SYSTEM", "QUEUE_SIZE", &g_para->queue_size, 10);
if (g_para->queue_size < 1)
g_para->queue_size = 10;
return 0;
}
int main (int argc, char *argv[])
{
char *fprof;
if (argc > 2) {
fprintf(stderr, "\nUsage: %s [<config_file>]\n", argv[0]);
exit(0);
}
// read in configs
fprof = DEFAULT_CONFIG;
if (argc > 1)
fprof = argv[1];
if (read_profile(fprof) < 0) {
fprintf(stderr, "[Error]: Read config file error!\n");
exit(1);
}
g_delay_queue = delay_queue_init(g_para->queue_size);
if (NULL == g_delay_queue) {
printf("g_delay_queue init error!");
exit(1);
}
int fd_data = input_udp_init(g_para->data_port);
if (fd_data < 0) {
printf("socket error!");
exit(1);
}
FILE *fd_error;
if (g_para->log_switch) {
fd_error = fopen(LOG_ERROR,"ab+");
if (NULL == fd_error) {
printf("log init error!");
exit(1);
}
}
pthread_t send_tid;
pthread_create(&send_tid, NULL, send_routine, NULL);
uint32_t src_ip;
uint32_t size;
char buf_data[BUF_SIZE];
struct msg_header_t *mh_data = (struct msg_header_t *)buf_data;
struct metainfo_t *mi_data = (struct metainfo_t *)(buf_data + MSG_HEADER_LEN);
delay_queue_t *q = g_delay_queue;
delay_elem_t *qe;
while(1) {
if (input_udp_recv(fd_data, &src_ip, (unsigned char *)buf_data, &size) < 0)
continue;
if (MSG_DATA_METAINFO != mh_data->msg_type)
continue;
if ((q->tail + 1) % q->max_len == q->head) {
if (g_para->log_switch) {
char ntop_buf[20];
write_local_log(fd_error, "drop - src %s pid %-11llu",
inet_ntop(AF_INET, &src_ip, ntop_buf, sizeof ntop_buf),
*((unsigned long long*)mi_data->prog_id));
fflush(fd_error);
}
sleep (1);
continue;
}
qe = q->buf + q->tail;
memcpy(qe->prog_id, mi_data->prog_id, 8);
qe->expire_time = time(NULL) + g_para->timeout;
qe->src_ip = src_ip;
q->tail = (q->tail + 1) % q->max_len;
}
return EXIT_SUCCESS;
} // end of function main

View File

@@ -0,0 +1,19 @@
[SYSTEM]
#发送建议端口
SURVEY_PORT = 22080
#接受数据端口
DATA_PORT = 33096
#队列大小
QUEUE_SIZE = 100000
#延迟发送时间
TIMEOUT = 1
#建议相关选项
SERVICE = 0x11
LEVEL = 90
#日志开关
LOG_SWITCH = 1

View File

@@ -0,0 +1,35 @@
#ifndef _BACKEND_H_
#define _BACKEND_H_
#include "loadprof.h"
#define BUF_SIZE 1500
#define LOG_SURVEY "survey.log"
#define LOG_ERROR "error.log"
#define DEFAULT_CONFIG "backend.conf"
typedef struct parameter {
uint32_t log_switch;
uint32_t timeout;
uint32_t queue_size;
uint32_t level;
uint16_t data_port;
uint16_t survey_port;
uint8_t service;
} parameter_t;
typedef struct delay_elem {
char prog_id[8];
long long expire_time;
uint32_t src_ip;
} delay_elem_t;
typedef struct delay_queue {
delay_elem_t *buf;
int head;
int tail;
int max_len;
} delay_queue_t;
#endif /*_BACKEND_H_*/

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More