[Feature][MD310][task-view-792][project] synchronize MD310 modifications according to R307 customer requirements

Change-Id: I96bf139abc6f4c592a83ec7d996d4260afaede0e
diff --git a/lynq/MD310/ap/app/Script/Makefile b/lynq/MD310/ap/app/Script/Makefile
new file mode 100755
index 0000000..7bde2a3
--- /dev/null
+++ b/lynq/MD310/ap/app/Script/Makefile
@@ -0,0 +1,67 @@
+

+############################################################################

+#

+# Makefile --  Build for rootfs makefile.

+#

+# Copyright (c) 2001-2004, SnapGear (www.snapgear.com)

+# Copyright (c) 2001, Lineo

+#

+# Add by zhouwei 2010-08-06 for freescale imx28 platform

+# 

+############################################################################

+CP        = cp

+ROMFS_DIR = $(ROMFSDIR)

+$(warning  CONFIG_WIFI_MODULE=$(CONFIG_WIFI_MODULE))

+.PHONY: romfs wifi

+

+ifneq ($(CONFIG_WIFI_MODULE), )

+CPWIFI=wifi

+endif

+

+$(warning  CPWIFI=$(CPWIFI))

+all:

+

+romfs: $(CPWIFI)

+	chmod +x ./scripts/*.sh

+	$(CP) -f ./scripts/*.sh $(ROMFS_DIR)/sbin/

+	#$(CP) -f ./scripts/*.txt $(ROMFS_DIR)/sbin/

+	mkdir -p $(ROMFS_DIR)/etc_ro/ 

+	$(CP) -f ./etc/*.conf $(ROMFS_DIR)/etc_ro/

+	$(CP) -f ./etc/options.auth $(ROMFS_DIR)/etc_ro/

+	$(CP) -f ./etc/options.noauth $(ROMFS_DIR)/etc_ro/

+	$(CP) -f ./etc/initchat $(ROMFS_DIR)/etc_ro/

+ifneq ($(CONFIG_USE_WEBUI_SECURITY),yes)

+	$(CP) -f ./etc/pap-secrets $(ROMFS_DIR)/etc_ro/

+	$(CP) -f ./etc/chap-secrets $(ROMFS_DIR)/etc_ro/

+endif

+ifeq ($(USE_FOTA),yes)

+	mkdir -p $(ROMFS_DIR)/recovery/sbin

+	$(CP) -f ./scripts/to_mnt_ubifs.sh $(ROMFS_DIR)/recovery/sbin/

+endif

+wifi:

+	@echo "copying wifi script"

+

+	$(CP) -rf ./wifi_script/realtek/zte_qrcode_create.sh  $(ROMFS_DIR)/sbin/

+ifeq ($(CONFIG_WIFI_MODULE), realtek)

+	@echo "copying wifi realtek script"

+	mkdir -p $(ROMFS_DIR)/etc_ro/ 

+	$(CP) -rf ./wifi/*  $(ROMFS_DIR)/etc_ro/

+ifeq ($(CONFIG_WIFI_RTL_WPA2),yes)

+	chmod +x  ./wifi_script/realtek_wpa2/*

+	$(CP) -rf ./wifi_script/realtek_wpa2/*  $(ROMFS_DIR)/sbin/

+else

+	chmod +x  ./wifi_script/realtek/*

+	$(CP) -rf ./wifi_script/realtek/*  $(ROMFS_DIR)/sbin/

+endif

+else

+	chmod +x  ./wifi_script/realtek/*

+ifeq ($(CONFIG_MIN_8M_VERSION), n)

+	$(CP) -rf ./wifi_script/realtek/zte_qrcode_create.sh  $(ROMFS_DIR)/sbin/

+else

+ifeq ($(CONFIG_MMI_LCD),yes)

+	$(CP) -rf ./wifi_script/realtek/zte_qrcode_create.sh  $(ROMFS_DIR)/sbin/

+endif

+endif

+endif

+

+

diff --git a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_interface.h b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_interface.h
index ee013a7..f6398ca 100755
--- a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_interface.h
+++ b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_interface.h
@@ -384,6 +384,7 @@
 
 #define GOFORM_SET_NETWORK_ADB "NETWORK_ADB"
 #define GOFORM_COMMAND "COMMAND"
+#define GOFORM_NETWORK_INFO "NETWORK_INFO"
 
 /****************************All the web pages' URL************************************/
 #define ZTE_WEB_PAGE_LOGIN_NAME   			"index.html"
@@ -1088,6 +1089,7 @@
 
 extern void zte_goform_set_network_adb(webs_t wp);
 extern void zte_goform_set_command(webs_t wp);
+extern void zte_goform_get_network_info(webs_t wp);
 
 /**
 * @brief Data to be decoded.
diff --git a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_mgmt.c b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_mgmt.c
index 3450804..c77abb3 100755
--- a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_mgmt.c
+++ b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_mgmt.c
@@ -306,7 +306,7 @@
 	int sem_id = -1;
 
 	int rc = TRUE;
-	
+
 	sem_id = get_sem(TIME_SEM_KEY_2);
 	if (sem_id != -1) {
 		sem_p(sem_id);
@@ -318,11 +318,11 @@
 	{
 	    rc = FALSE; // kw 3
 	}
-	
+
 	if (sem_id != -1) {
 		sem_v(sem_id);
 	}
-	
+
 	return rc;
 }
 void zte_mgmt_login_timeout_check()
@@ -343,7 +343,7 @@
             luser_login_timemark = LONG_MAX;
 			slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: user_login_timemark is out of range [0, LONG_MAX).");
 		}
-		
+
 		sem_id = get_sem(TIME_SEM_KEY_2);
 		if (sem_id != -1) {
 			sem_p(sem_id);
@@ -353,7 +353,7 @@
 		if (sem_id != -1) {
 			sem_v(sem_id);
 		}
-		
+
 		if ((time_now - luser_login_timemark) > LOGIN_TIMEOUT) {
 			slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: the login is timeout .");
 			(void)zte_web_write(NV_USER_IP_ADDR, "");
@@ -452,7 +452,7 @@
 
 	char strCfgGetItem[16] = {0};
 	nv_get_item(NV_RO, "usb_modetype", strCfgGetItem, sizeof(strCfgGetItem));
-	
+
 	slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->%s current->%s\n", debug_enable, strCfgGetItem);
 	if((strcmp(strCfgGetItem,"user")== 0)&&(atoi(debug_enable) != 0))
 	{
@@ -463,7 +463,7 @@
 			return;
 	    }*/
 	}
-	
+
 	if ('\0' == (*debug_enable)) {
 		slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_devicemode: web para:[debug_enable] is empty string.\n");
 		zte_write_result_to_web(wp, "set_devicemode fail:parameter debug_enable is empty!");
@@ -570,6 +570,7 @@
 	}
 
 	cfg_set("mgmt_quicken_power_on", mgmt_quicken_power_on);
+	cfg_save();
 
 	zte_write_result_to_web(wp, SUCCESS);
 }
@@ -1346,7 +1347,7 @@
 	char *schedule_minute = NULL;
 
 	schedule_enable = websGetVar(wp, T("scheduleEnabled"), T(""));
-	
+
 	if(0 == strcmp("1", schedule_enable))
 	{
 		schedule_hour = websGetVar(wp, T("scheduleHour"), T(""));
@@ -1764,7 +1765,7 @@
 	if (NULL == ipv6profile) {
 		return;
 	}
-	
+
 	sprintf(cfg_name, "APN_configtmp%d", index);
 	cfg_get_item(cfg_name, cfg_value, sizeof(cfg_value));
 	pos_begin = cfg_value;
@@ -2075,7 +2076,7 @@
 	{
 		return -1;
 	}
-	
+
 	memset(&buf, 0, sizeof(buf));
 	cfg_get_item("manual_time_month", buf, sizeof(buf));
 	month = atoi(buf);
@@ -2211,7 +2212,7 @@
 	{
 	    mtime = 0;
 	}
-	
+
 	if (0 != mtime) {
 		mtime += (SynBeforeTime - ltime);
 	} else {
@@ -2240,7 +2241,7 @@
         	{
         	    ntime = 0;
         	}	
-			
+
 			mtime = SynBeforeTime - ntime;
 		}
 		sprintf(SynPppTotal, "%d", mtime);
@@ -2266,7 +2267,7 @@
 	if (0 != ret) {
 		slog(MISC_PRINT, SLOG_ERR, "send MSG_CMD_SNTP_SET_TIME to sntp fail!");
 	}
-    
+
 	ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_SYCTIME_SET_REQ, 0, NULL, 0);
 	if (0 != ret) {
 		slog(MISC_PRINT, SLOG_ERR, "sync time to cp fail!");
@@ -3003,7 +3004,7 @@
 	*dst = '\0';
 }
 
-static void executeCommand(const char *command, char *result)
+static void executeCommand(const char *command, char *result, int size)
 {
 	if (command == NULL || strlen(command) == 0)
 	{
@@ -3017,7 +3018,7 @@
 		perror("popen failed");
 		return;
 	}
-	int nread = fread(result, 1, 256, pipe);
+	int nread = fread(result, 1, size, pipe);
 	if (nread > 0)
 	{
 		result[nread - 1] = '\0';
@@ -3044,6 +3045,141 @@
 	}
 }
 
+static void parse_at_response(const char *response, char **params, int *param_count, char *at, int count)
+{
+	const char *start = strstr(response, at);
+	if (start == NULL)
+	{
+		printf("Response does not contain the expected prefix.\n");
+		return;
+	}
+
+	start += strlen(at);
+	char *token = strtok((char *)start, ",");
+	*param_count = 0;
+
+	while (token != NULL && *param_count < count)
+	{
+		params[(*param_count)++] = token;
+		token = strtok(NULL, ",");
+	}
+}
+
+#define MIN_RSRQ_VALUE -19.5  // „1¤7„1¤7§³dB0ö5
+#define STEP_SIZE 0.5          // 0‹7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤704„1¤7„1¤7„1¤7
+#define MAX_RSRQ_INDEX 34      // „1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7„1¤7
+
+static float get_rsrq_db_value(int rsrq_index)
+{
+    if (rsrq_index < 0 || rsrq_index > MAX_RSRQ_INDEX)
+	{
+        return -1000.0;
+    }
+
+    float lower_bound = MIN_RSRQ_VALUE + rsrq_index * STEP_SIZE;
+
+    return lower_bound;
+}
+
+void zte_goform_get_network_info(webs_t wp)
+{
+	char response[1024];
+	char tmp[16] = {0};
+	char plmn[16] = {0};
+	char *params[15];
+	int param_count = 0;
+	int i = 0;
+	char rsrp[16] = {0};
+	char cell_id[16] = {0};
+
+	executeCommand("at at+ZSINR 2>&1", response, sizeof(response));
+	const char *start = strstr(response, "+ZSINR: ");
+	if (start != NULL)
+	{
+		start += strlen("+ZSINR: ");
+		char *sinr = strtok((char *)start, ",");
+		if (atoi(sinr) == -20)
+		{
+			cfg_set("lte_sinr", "--");
+			web_feedback_header(wp);
+			(void)websWrite(wp, T("{\"%s\":\"%s\","), "lte_sinr", "--");
+		}
+		else
+		{
+			cfg_set("lte_sinr", sinr);
+			web_feedback_header(wp);
+			(void)websWrite(wp, T("{\"%s\":\"%s dB\","), "lte_sinr", sinr);
+		}
+	}
+	else
+	{
+		cfg_set("lte_sinr", "--");
+		web_feedback_header(wp);
+		(void)websWrite(wp, T("{\"%s\":\"%s\","), "lte_sinr", "--");
+	}
+
+	executeCommand("at at+ZEMSCIQ=1 2>&1", response, sizeof(response));
+	if (strstr(response, "+CME ERROR:") != NULL)
+	{
+		printf("----No network\n");
+		cfg_set("lte_plmn", "--");
+		cfg_set("lte_pci", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrp", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrq", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_plmn", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_cellid", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_pci", "--");
+		(void)websWrite(wp, T("\"%s\":\"%s\"}"), "lte_band", "--");
+	}
+	else
+	{
+		parse_at_response(response, params, &param_count, "+ZEMSCIQ: ", 12);
+		for (i = 0; i < param_count; i++)
+		{
+			printf("Parameter[%d]: %s\n", i, params[i]);
+		}
+		printf("======set lte_plmn=%s lte_pci=%s lte_band=%s lte_rsrq=%s\n", params[5], params[6], params[8], params[10]);
+		float db_value = get_rsrq_db_value(atoi(params[10]));
+		if (db_value == -1000.0)
+		{
+			cfg_set("lte_rsrq", " ");
+		}
+		else
+		{
+			sprintf(tmp, "%d", (int)db_value);
+			cfg_set("lte_rsrq", tmp);
+		}
+
+		snprintf(plmn, strlen(params[5]) - 1, "%s", params[5] + 1);
+		cfg_set("lte_plmn", plmn);
+		cfg_set("lte_pci", params[6]);
+		cfg_get_item("cell_id", cell_id, sizeof(cell_id));
+		cfg_get_item("lte_rsrp", rsrp, sizeof(rsrp));
+		if (strlen(rsrp) == 0)
+		{
+			(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrp", "--");
+		}
+		else
+		{
+			(void)websWrite(wp, T("\"%s\":\"%s dBm\","), "lte_rsrp", rsrp);
+		}
+		if (strlen(tmp) == 0)
+		{
+			(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_rsrq", "--");
+		}
+		else
+		{
+			(void)websWrite(wp, T("\"%s\":\"%s dB\","), "lte_rsrq", tmp);
+		}
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_plmn", plmn);
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_cellid", cell_id);
+		(void)websWrite(wp, T("\"%s\":\"%s\","), "lte_band", params[8]);
+		(void)websWrite(wp, T("\"%s\":\"%s\"}"), "lte_pci", params[6]);
+	}
+
+	return;
+}
+
 void zte_goform_set_command(webs_t wp)
 {
 	MSG_BUF stMsg = {0};
@@ -3087,7 +3223,7 @@
 				replace_slash_with_backslash(value);
 				printf("replace value:%s\n", value);
 			}
-			executeCommand(value, result);
+			executeCommand(value, result, sizeof(result));
 			printf("Command Output:\n%s\n", result);
 			zte_write_result_to_web(wp, result);
 			return;
@@ -3244,7 +3380,7 @@
     {
         login_times = 0;
     }
-	
+
 	login_times--;
 	sprintf(psw_fail_num_str, "%d", login_times);
 	(void)zte_web_write("psw_fail_num_str", psw_fail_num_str);
@@ -3469,7 +3605,7 @@
 {
 	int efuse_fd = -1;
 	T_ZDrvEfuse_Secure efuse = {0};
-	
+
 	memset(&efuse, 0, sizeof(efuse));
 	efuse_fd = open("/dev/efuse", O_RDWR);
 	if (efuse_fd < 0) {
@@ -3483,7 +3619,7 @@
 	}
 	close(efuse_fd);
 	memcpy(aes_key, efuse.pubKeyHash, k_len);
-	
+
 	return 1;
 }
 
@@ -3493,13 +3629,13 @@
 		printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
         return 0;
     }
- 
+
     AES_KEY aes = {0}; //cov h
     if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
 		printf("bs_aes_encrypt AES_set_encrypt_key err\n");
         return 0;
     }
- 
+
     int en_len = 0;
     while (en_len < len) {
         AES_encrypt((unsigned char*)in, (unsigned char*)out, &aes);
@@ -3507,7 +3643,7 @@
         out += AES_BLOCK_SIZE;
         en_len += AES_BLOCK_SIZE;
     }
- 
+
     return 1;
 }
 
@@ -3517,13 +3653,13 @@
 		printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
         return 0;
     }
- 
+
     AES_KEY aes = {0}; //cov h
     if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
 		printf("bs_aes_decrypt AES_set_decrypt_key err\n");
         return 0;
     }
- 
+
     int en_len = 0;
     while (en_len < len) {
         AES_decrypt((unsigned char*)in, (unsigned char*)out, &aes);
@@ -3531,7 +3667,7 @@
         out += AES_BLOCK_SIZE;
         en_len += AES_BLOCK_SIZE;
     }
- 
+
     return 1;
 }
 
@@ -3541,7 +3677,7 @@
 		printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
         return 0;
     }
- 
+
     AES_KEY aes = {0}; //cov h
     if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
 		printf("bs_aes_encrypt AES_set_encrypt_key err\n");
@@ -3550,11 +3686,11 @@
 
 	unsigned char iv[AES_BLOCK_SIZE] = {0};
 	memcpy(iv, key, AES_BLOCK_SIZE);
-	
+
     AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len, 
 			&aes, iv, AES_ENCRYPT);
 
- 
+
     return 1;
 }
 
@@ -3564,7 +3700,7 @@
 		printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
         return 0;
     }
- 
+
     AES_KEY aes = {0}; //cov h
     if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
 		printf("bs_aes_decrypt AES_set_decrypt_key err\n");
@@ -3573,7 +3709,7 @@
 
 	unsigned char iv[AES_BLOCK_SIZE] = {0};
 	memcpy(iv, key, AES_BLOCK_SIZE);
-	
+
     AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len, 
 			&aes, iv, AES_DECRYPT);
 
@@ -3793,7 +3929,7 @@
 		set_apn_prof_aes_by_index(index, &profile);
 //		printf("decrypt fota ppp_tmp[%d]=%s\n", index, profile.ppp_passwd);
 	}
-	
+
 	set_apn_profile_by_index(index, &profile);
 
 	return;
@@ -3973,7 +4109,7 @@
 {
     char rstr[10] = {0};
     unsigned int rnum = 0;
-   
+
     srand( (unsigned)time( NULL ) );
     rnum = rand();
     rnum %= 1000000000;   
@@ -3988,11 +4124,11 @@
 	size_t aes_len = 0;
 
 	char *out = NULL;
-	
+
 	char js_aes_key[24 + 1]={0};
 	char imei_buf[15 + 1] = {0};
 	char rnum_buf[9 + 1] = {0};
-	
+
 	aes_password = (char *)zte_base64_decode((const unsigned char *)src, len, (unsigned int*)&aes_len);
 	if (aes_password == NULL)
 		return NULL;
@@ -4008,7 +4144,7 @@
 	cfg_get_item("imei", imei_buf, sizeof(imei_buf));
 	cfg_get_item("rnum_js", rnum_buf, sizeof(rnum_buf));
 	snprintf(js_aes_key, sizeof(js_aes_key), "%s%sFFFFFFFFFFFFFFF", rnum_buf, imei_buf);
-	
+
 	bs_aes_cbc_decrypt(aes_password, aes_len, out, js_aes_key, sizeof(js_aes_key)-1);
 	//printf("decrypt js_aes_decode[%d]=%s\n", aes_len, out);
 
@@ -4020,7 +4156,7 @@
 	}
 
 	*out_len = strlen(out);
-	
+
 	return out;
 }
 #endif
diff --git a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_util.c b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_util.c
index a824754..2c3c467 100755
--- a/lynq/MD310/ap/app/goahead/interface5.0/zte_web_util.c
+++ b/lynq/MD310/ap/app/goahead/interface5.0/zte_web_util.c
@@ -127,6 +127,7 @@
 	{CMD_HTTPSHARE_GETCARD_VAULE, zte_httpShare_getcard_value},
 	{CMD_HTTPSHARE_GETCARD_NMEA, zte_httpShare_getcard_name},
 	{CMD_HTTPSHARE_AUTH_GET, zte_httpShare_auth_get},
+	{GOFORM_NETWORK_INFO, zte_goform_get_network_info},
 };
 
 
diff --git a/lynq/MD310/ap/app/zte_webui/css/com.css b/lynq/MD310/ap/app/zte_webui/css/com.css
new file mode 100755
index 0000000..50110dd
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/css/com.css
@@ -0,0 +1,2602 @@
+/* Reset the container */
+.container {
+  width: 970px !important;
+  max-width: none !important;
+}
+
+.container .navbar-header,
+.container .navbar-collapse {
+  margin-right: 0;
+  margin-left: 0;
+}
+
+/* Always float the navbar header */
+.navbar-header {
+  float: left;
+}
+
+/* Undo the collapsing navbar */
+.navbar-collapse {
+  display: block !important;
+  height: auto !important;
+  padding-bottom: 0;
+  overflow: visible !important;
+}
+
+.navbar-toggle {
+  display: none;
+}
+.navbar-collapse {
+  border-top: 0;
+}
+
+.navbar-brand {
+  margin-left: -15px;
+}
+
+/* Always apply the floated nav */
+.navbar-nav {
+  float: left;
+  margin: 0;
+}
+.navbar-nav > li {
+  float: left;
+}
+.navbar-nav > li > a {
+  padding: 15px;
+}
+
+/* Redeclare since we override the float above */
+.navbar-nav.navbar-right {
+  float: right;
+}
+
+/* Undo custom dropdowns */
+.navbar .navbar-nav .open .dropdown-menu {
+  position: absolute;
+  float: left;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, .15);
+  border-width: 0 1px 1px;
+  border-radius: 0 0 4px 4px;
+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.navbar-default .navbar-nav .open .dropdown-menu > li > a {
+  color: #333;
+}
+.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
+.navbar .navbar-nav .open .dropdown-menu > li > a:focus,
+.navbar .navbar-nav .open .dropdown-menu > .active > a,
+.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+  color: #fff !important;
+  background-color: #008AD7 !important;
+}
+.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
+.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+.navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+  color: #999 !important;
+  background-color: transparent !important;
+}
+
+body {
+    min-width: 970px;
+    padding-bottom: 30px;
+}
+
+.lead {
+  font-size: 16px;
+}
+
+.page-header {
+  margin-bottom: 30px;
+}
+.page-header .lead {
+  margin-bottom: 10px;
+}
+h1, .h1 {
+    font-size: 20px;
+}
+h2, .h2 {
+    font-size: 18px;
+}
+h3, .h3 {
+    font-size: 18px;
+}
+label{
+    font-weight: normal;
+}
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6{
+    font-weight: bold;
+}
+
+.label-primary {
+    background-color: #018AD8;
+}
+
+.arrow-down {
+    bottom:0;
+    border-width: 8px 4px 0;
+	width: 0;
+    height: 0;
+    border-color: #018AD8 transparent transparent;
+    border-style: solid;
+}
+
+.absolute-center {
+    position: absolute;
+    left: 49%;
+}
+
+.info-title.label {
+    padding: 0.3em 0.7em 0.3em;
+}
+
+.margin-top-10 {margin-top: 10px;}
+.margin-top-15 {margin-top: 15px;}
+.margin-top-20 {margin-top: 20px;}
+.margin-top-50 {margin-top: 50px;}
+.margin-top-80 {margin-top: 80px;}
+.margin-top-160 {margin-top: 160px;}
+
+.margin-bottom-10{margin-bottom: 10px;}
+.margin-bottom-20{margin-bottom: 20px;}
+.margin-bottom-50{margin-bottom: 50px;}
+
+.margin-left-10{margin-left: 10px;}
+.margin-left-15{margin-left: 15px;}
+.margin-left-3em{margin-left: 3em;}
+
+.margin-right-20{margin-right: 20px;}
+
+.padding-top-10{padding-top: 10px;}
+
+.padding-right-10{padding-right: 10px;}
+.padding-right-15{padding-right: 15px;}
+.padding-right-90 {
+    padding-right: 90px;
+}
+
+.line-height-20{line-height: 20px;}
+.line-height-30{line-height: 30px;}
+.line-height-40{line-height: 40px;}
+.line-height-60{line-height: 60px;}
+
+.width-60{width: 60px;}
+
+.font-weight-bold{
+    font-weight: bold;
+}
+
+.smsUnreadCount {
+    width: 30px;
+    height: 20px;
+    line-height: 20px;
+    padding: 2px;
+    top: -13px;
+    left: 20px;
+    position: absolute;
+    text-align: center;
+    z-index: 10;
+    background: url("../pic/png_new_sms_bg.png") no-repeat scroll 0 -5px transparent;
+    color: white;
+}
+
+.tooltip {
+    width: auto;
+    min-width: 5px;
+    position: absolute;
+    padding: 6px;
+    display: none;
+    color: #fff;
+    background-color: #4B4B4B;
+    border-radius: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    box-shadow: 0 3px 5px #999;
+    -moz-box-shadow: 0 3px 5px #999;
+    -webkit-box-shadow: 0 3px 5px #999;
+    margin-top: 5px;
+    *+margin-top:0px;
+}
+
+#statusBar span{
+    margin-right: 10px;
+}
+
+#statusBar span.smsUnreadCount{
+    margin-left: 0;
+}
+
+#statusBar .statusItem{
+    color: #696E72;
+    font-weight: bold;
+    line-height: 35px;
+    vertical-align: middle;
+}
+
+#statusBar #wifi_status{
+    width: 36px;
+    display: inline-block;
+}
+
+#statusBar #wifi_status i{
+    width: 36px;
+    height: 24px;
+    line-height: 24px;
+    display: inline-block;
+}
+
+#statusBar .icon_connection{
+    width: 50px;
+    display: inline-block;
+}
+
+#statusBar .wifi_connected{
+    width: 42px;
+    height: 30px;
+    background:url("../pic/pic_wifi_connect.png") no-repeat scroll center 2px transparent;
+}
+
+#statusBar .rj45_connected{
+    width: 42px;
+    height: 30px;
+    background:url("../pic/pic_rj45_connect.png") no-repeat scroll center 2px transparent;
+}
+
+#statusBar .connecting{
+    width: 36px;
+    height: 30px;
+    background:url("../pic/pic_connecting.gif") no-repeat scroll center 3px transparent;
+}
+
+#statusBar .disconnect{
+    width: 42px;
+    height: 30px;
+    background:url("../pic/pic_disconnect.png") no-repeat scroll center 3px transparent;
+}
+
+#statusBar .connectionNone{
+    height: 30px;
+    background:url("../pic/pic_connection.png") no-repeat scroll center 3px transparent;
+}
+
+#statusBar .connectionUp{
+    height: 30px;
+    background:url("../pic/pic_connection.png") no-repeat scroll center -27px transparent;
+}
+
+#statusBar .connectionDown{
+    height: 30px;
+    background:url("../pic/pic_connection.png") no-repeat scroll center -57px transparent;
+}
+
+#statusBar .connectionBoth{
+    height: 30px;
+    background:url("../pic/pic_connection.png") no-repeat scroll center -87px transparent;
+}
+
+#statusBar .signal{
+    width: 40px;
+    height: 30px;
+    display: inline-block;
+}
+
+#statusBar .signal_none{
+    width: 30px;
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll 6px -268px transparent;
+}
+
+#statusBar .signal0{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -3px transparent;
+}
+
+#statusBar .signal1{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -45px transparent;
+}
+
+#statusBar .signal2{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -92px transparent;
+}
+
+#statusBar .signal3{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -140px transparent;
+}
+
+#statusBar .signal4{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -185px transparent;
+}
+
+#statusBar .signal5{
+    height: 30px;
+    background:url("../pic/res_signal.png") no-repeat scroll center -227px transparent;
+}
+
+#statusBar .wifi_status0{
+    background: url("../pic/wlan.png") no-repeat scroll 0 4px transparent;
+}
+
+#statusBar .wifi_status1{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -20px transparent;
+}
+
+#statusBar .wifi_status2{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -45px transparent;
+}
+
+#statusBar .wifi_status3{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -70px transparent;
+}
+
+#statusBar .wifi_status4{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -95px transparent;
+}
+
+#statusBar .wifi_status5{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -120px transparent;
+}
+
+#statusBar .wifi_status6{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -145px transparent;
+}
+
+#statusBar .wifi_status7{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -170px transparent;
+}
+
+#statusBar .wifi_status8{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -195px transparent;
+}
+
+#statusBar .wifi_status9{
+    background: url("../pic/wlan.png") no-repeat scroll 0 -220px transparent;
+}
+
+#statusBar .wifi_status10{
+    background: url("../pic/wlan.png") no-repeat scroll -40px 4px transparent;
+}
+
+#statusBar .wifi_status11{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -20px transparent;
+}
+
+#statusBar .wifi_status12{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -45px transparent;
+}
+
+#statusBar .wifi_status13{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -70px transparent;
+}
+
+#statusBar .wifi_status14{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -95px transparent;
+}
+
+#statusBar .wifi_status15{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -120px transparent;
+}
+
+#statusBar .wifi_status16{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -145px transparent;
+}
+
+#statusBar .wifi_status17{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -170px transparent;
+}
+
+#statusBar .wifi_status18{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -195px transparent;
+}
+
+#statusBar .wifi_status19{
+    background: url("../pic/wlan.png") no-repeat scroll -40px -220px transparent;
+}
+
+#statusBar .wifi_status20{
+    background: url("../pic/wlan.png") no-repeat scroll -78px 5px transparent;
+}
+
+#statusBar .wifi_status21{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -20px transparent;
+}
+
+#statusBar .wifi_status22{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -45px transparent;
+}
+
+#statusBar .wifi_status23{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -70px transparent;
+}
+
+#statusBar .wifi_status24{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -95px transparent;
+}
+
+#statusBar .wifi_status25{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -120px transparent;
+}
+
+#statusBar .wifi_status26{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -145px transparent;
+}
+
+#statusBar .wifi_status27{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -170px transparent;
+}
+
+#statusBar .wifi_status28{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -195px transparent;
+}
+
+#statusBar .wifi_status29{
+    background: url("../pic/wlan.png") no-repeat scroll -78px -220px transparent;
+}
+
+#statusBar .wifi_status30{
+    background: url("../pic/wlan.png") no-repeat scroll -116px 5px transparent;
+}
+
+#statusBar .wifi_status31{
+    background: url("../pic/wlan.png") no-repeat scroll -116px -20px transparent;
+}
+
+#statusBar .wifi_status32{
+    background: url("../pic/wlan.png") no-repeat scroll -116px -45px transparent;
+}
+
+#statusBar .wifi_status_off{
+    background:url('../pic/wlan_off.png') no-repeat;
+}
+
+/* Overlay */
+#loading {
+    display: none;
+}
+
+#result-overlay {
+    display: none;
+}
+
+#result_wording h2{
+    font-size: 20px;
+    margin-top: 5px;
+    margin-bottom: 8px;
+}
+
+#result-overlay #result-image {
+    height: 75px;
+    margin: 0 auto;
+    width: 75px;
+}
+
+#result-overlay .overlay-success {
+    background: url("../pic/res_succ.png") no-repeat scroll 0 0 transparent;
+}
+
+#result-overlay .overlay-error {
+    background: url("../pic/res_failure.png") no-repeat scroll 0 0 transparent;
+}
+
+#loading_container{padding-bottom: 15px;}
+
+#loading_container a {
+    outline: none;
+}
+
+#progress {
+    display: none;
+}
+
+
+.ko-grid-search{
+    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
+    margin-top: 3px;
+    margin-right: 15px;
+    width: 155px;
+    height: 30px;
+    line-height: 30px;
+    padding-right: 5px;
+    display: inline-block;
+    border: 1px solid #a1a1a1 ;
+    border-radius: 5px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    -khtml-border-radius: 5px;
+    -ms-border-radius: 5px;
+    -o-border-radius: 5px;
+}
+
+.ko-grid-search input{
+    border: 0;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+    border: none;
+    height: 20px;
+    line-height: 20px;
+    padding: 5px 0;
+    background: none;
+    outline: none;
+    display: inline;
+}
+
+.ko-grid-search input.focusIn[type="text"]{
+    width: 100px;
+    padding: 2px 0;
+    margin: 0;
+    color: #767676;
+    background: none;
+    border: none;
+    box-shadow: none;
+}
+
+#frmPhoneBook #ko_grid_search_txt{
+    width: 100px;
+    padding: 2px 0;
+    color: #767676;
+    font-style:italic;
+}
+
+#smsListForm #searchInput{
+    width: 100px;
+    padding: 2px 0;
+    color: #767676;
+    font-style:italic;
+}
+
+#ko_grid_search_txt::-ms-clear {
+    display: none;
+}
+
+.ko-grid-search input.focusIn[type="text"], input.focusIn[type="password"] ,textarea:focus{
+    border-color:none;
+    outline: 0;
+    /* IE6-9 */
+    -webkit-box-shadow:none;
+    -moz-box-shadow: none;
+    box-shadow: none;
+}
+
+.checkbox {
+    width: 16px;
+    height: 16px;
+    margin-top: 0;
+    margin-bottom: 0;
+    cursor: pointer;
+    vertical-align: middle;
+    display: inline-block;
+    background:url("../pic/tickbox.png") no-repeat;
+}
+
+.checkbox:hover {
+    display: inline-block;
+}
+
+.checkbox input {
+    display: none;
+}
+
+.checkbox_selected {
+    background:url("../pic/tickbox_in.png") no-repeat;
+}
+
+p.checkbox.disable{
+    background:url("../pic/tickbox_disable.png") no-repeat;
+}
+
+p.checkbox.checked_disable{
+    background:url("../pic/tickbox_in_disable.png") no-repeat;
+}
+
+.header-bottom {
+    padding-bottom: 10px;
+    border-bottom: 1px solid #d3d3d3;
+}
+
+.popover_title{
+    font-size: 14px;
+    font-weight: normal;
+    line-height: 18px;
+    margin: 0;
+    padding: 8px 14px;
+    border-bottom: 1px solid #ebebeb;
+    border-radius: 5px 5px 0 0;
+    background-color: #f7f7f7;
+}
+
+.popover_content{
+    margin-top: 1em;
+    padding: 0 8px 8px 8px;
+}
+
+.popover_row label.error{
+    width: 100%;
+    text-align: left;
+}
+
+.form-title{
+    margin-bottom: 20px;
+    border-bottom: 1px solid #eee;
+}
+
+#footer{
+    /*margin-top: 40px;
+    background: #eeeeee;*/
+    height: 60px;
+    line-height: 60px;
+    text-align: center;
+}
+
+#smsChatRoom {
+    width: 100%;
+    font-size: 12px;
+    padding-left: 0;
+    float: left;
+    display: none;
+}
+
+#smsChatRoom #chosenUserSelect{
+    width: 690px;
+}
+
+#chosenUser {
+    padding: 10px;
+    background-color: #D4DAE2;
+    box-shadow: 0 -3px 8px #ddd;
+}
+
+#chosenUser1{
+    margin-top: 0;
+}
+
+#chatlist {
+    padding-left: 10px;
+    padding-top: 10px;
+    background-color: white;
+    position: relative;
+    min-height: 240px;
+    box-shadow: 0 -3px 8px #D4DAE2;
+    *display: inline;
+}
+
+#chatlist a{
+    text-decoration: underline;
+    color: blue;
+}
+
+#chatpanel {
+    height: 250px;
+    border: 1px solid #e1e1e1;
+    overflow-x: hidden;
+    overflow-y: hidden;
+    background-color: white;
+}
+
+#chatpanel .clear-container {
+    width: 100%;
+    height: 250px;
+    border: 1px solid #e1e1e1;
+    border-top: none;
+    border-left: none;
+    position: relative;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+
+#inputpanel {
+    height: 142px;
+    padding: 10px 0;
+    position: relative;
+}
+
+.chatform {
+    margin: 0;
+    height: 120px;
+}
+
+textarea {
+	resize: none;
+}
+
+.chatform .chattextinput textarea {
+    height: 110px;
+    line-height:normal;
+    font-size: 14px;
+    color: #696e72;
+    overflow: auto;
+}
+
+#sendSmsErrorLi{
+    color: #CC0000;
+}
+
+.chatfun {
+    padding-top: 8px;
+}
+
+.chatfun ul.ext {
+    float: left;
+}
+
+.chatfun ul.ext li {
+    float: left;
+    padding-left: 10px;
+    margin-right: 20px;
+}
+
+.chatfun ul.btn {
+    float: right;
+}
+
+.chatfun ul.btn li {
+    float: left;
+    margin-right: 10px;
+}
+
+.chatfun ul.btn li button {
+    padding: 1px 0;
+}
+
+.grid-talk .main-wrap {
+    margin-right: 36px;
+    _margin-right: 18px;
+}
+
+.grid-talkf .main-wrap {
+    margin-left: 36px;
+    _margin-left: 18px;
+}
+
+.col-main {
+    float: left;
+    width: 100%;
+    min-height: 1px;
+}
+
+
+.progress-content{
+    text-align: center
+}
+
+.progress-bar-container{
+    width:400px; height:32px;
+    margin:0 auto;
+    padding:1px;
+    border:1px #CCC solid;
+    text-align: left;
+    position:relative;
+}
+
+.progress-bar{
+    width:200px;
+    height:28px;
+    background:#429aff;
+}
+
+.progress-bar-value{
+    top:7px;
+    width:400px;
+    position:absolute;
+    text-align:center;
+    overflow:hidden;
+    font-weight:bold;
+}
+
+.progress-prompt{
+    font-size:small;
+    font-weight:bold;
+    padding-bottom: 15px;
+}
+
+#simplemodal-overlay {
+    cursor: wait;
+    background-color: #000;
+}
+
+#confirm,#popupSettingWindow{
+    display: none;
+}
+
+/* Overlay */
+#confirm-overlay {
+    cursor: wait;
+    background-color: #000;
+}
+
+/* Container */
+#confirm-container {
+    width: 420px;
+    border: 2px solid #dddddd;
+    border-radius: 6px;
+    -webkit-border-radius: 6px;
+    -moz-border-radius: 6px;
+    text-align: left;
+    background: none repeat scroll 0 0 #fff;
+}
+
+#confirm-container .header {
+    width: 100%;
+    height: 30px;
+    line-height: 30px;
+    color: #000;
+    font-weight: bold;
+    background-color: #eaeaea;
+    border-bottom: 1px solid #cbcbcb;
+}
+
+#confirm-container .header span {
+    padding-left: 8px;
+}
+
+#confirm-container .buttons {
+    padding: 10px 8px;
+    text-align: right;
+}
+
+#confirm-container .message {
+    color: #000;
+    font-size: 14px;
+}
+
+#confirm .message > i {
+    font-size: 0.9em;
+}
+
+#confirm-message-container{
+    margin: 10px 5px;
+}
+
+#confirm .icon {
+    width: 50px;
+    margin: 0 0 0 10px;
+    vertical-align: top;
+    display: inline-block;
+}
+
+#confirm .confirm-message {
+    width: 310px;
+    margin: 10px 10px 10px 0;
+    vertical-align: top;
+    display: inline-block;
+}
+
+.simplemodal-wrap .form-title{
+    font-size: 16px;
+    font-weight: bold;
+}
+
+.cursorhand{
+    cursor: pointer;
+}
+
+.device-block{
+    width: 100px;
+    margin: 0 24px 5px 0;
+    text-align: center;
+    text-decoration: none;
+    display: inline-block;
+}
+
+.device-block-desc{
+    padding-top: 100px;
+    width: 100px;
+    display: inline-block;
+    overflow: hidden;
+    vertical-align: middle;
+    text-align: center;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    background: url("../pic/mobile.png") no-repeat scroll 0 0 transparent;
+}
+
+.expend-desc{
+    padding-left: 2em;
+}
+
+.arrow-right{
+    padding-right: 30px;
+    background: url("../pic/direct-right.png") no-repeat scroll right center transparent;
+}
+
+#pc_main_form .content {
+    padding-left: 2em;
+}
+
+table.colorHoverTable thead tr {
+    height: 27px;
+}
+
+.header-center th{
+    text-align: center;
+}
+
+#pc_time_limited_form table thead tr{
+    background: none;
+}
+
+#pc_time_limited_form table thead td{
+    min-width: 4%;
+}
+
+#pc_time_limited_form table tbody td{
+    border: 1px solid #ccc;
+    height: 40px;
+    vertical-align: middle;
+	/*line-height: 40px;*/
+    padding: 0;
+    border-collapse: collapse;
+}
+
+#pc_time_limited_form table tbody td.active{
+    background-color: red;
+}
+
+#pc_time_limited_form table tbody td:first-child{
+    width: 50px;
+    border-width: 0 1px 0 0;
+}
+
+#pc_time_limited_form .pc_time_block{
+    width: 20px;
+    height: 20px;
+    display: inline-block;
+    border: 1px solid #ccc;
+}
+
+#pc_time_limited_form .time_td_hover{
+    background: #eee;
+}
+
+#pc_time_limited_form .forbid_time{
+    background-color: red;
+}
+
+#pc_children_group_form table td{
+    line-height: 32px;
+}
+
+.layout:after,.main-wrap:after,.col-sub:after,.col-extra:after {
+    content: '\20';
+    display: block;
+    height: 0;
+    clear: both;
+}
+
+.talk-item {
+    margin: 10px 0 5px 0;
+}
+
+.talk-item .info-user {
+    width: 30px;
+    padding: 2px;
+    border: 1px solid #335A8B;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    background-color: #fff;
+}
+
+.talk-item .info-user img {
+    width: 30px;
+    display: block;
+}
+
+.talk-item .time {
+    height: 20px;
+    line-height: 20px;
+    clear: both;
+}
+
+.talk-item .msg {
+    padding: 10px;
+    max-width: 560px;
+    line-height: 180%;
+    position: relative;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    word-break: break-all;
+    word-wrap: break-word;
+    color: #000;
+}
+
+.talk-item .msg s.arrow {
+    width: 7px;
+    height: 13px;
+    bottom: 10px;
+    display: block;
+    position: absolute;
+    background: url(../pic/a-direct.png) no-repeat;
+}
+
+.talk-b .msg_fail s.arrow{
+    bottom: 10px;
+    display: block;
+    width: 7px;
+    height: 13px;
+    left: 100%;
+    position: absolute;
+    background: url(../pic/c-direct.png) no-repeat;
+}
+
+.talk-item .msg_fail {
+    padding: 10px;
+    line-height: 180%;
+    max-width: 560px;
+    position: relative;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    word-break: break-all;
+    word-wrap: break-word;
+    color: #000;
+}
+
+.talk-b .msg_fail{
+    float: right;
+    min-width: 70px;
+    padding: 10px 10px 15px 10px;
+    background: #ffdbdb;
+    border: 1px solid #f46c6c;
+    min-width: 350px;
+}
+
+.msg_fail pre{
+    border: medium none;
+    line-height: 17px;
+    margin: 0;
+    overflow-x: auto;
+    padding: 0;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+    color: #696e72;
+    background: none repeat scroll 0 0 transparent;
+}
+
+#smsChatRoom .error {
+    color: #CC0000;
+}
+
+.info-talk{
+    color: #87acd6;
+}
+
+.talk-a .info-talk {
+    float: left;
+    padding: 0 20% 10px 10px;
+    min-width: 420px;
+    _float: none;
+    _padding-left: 26px;
+}
+
+.talk-a .msg {
+    min-width: 350px;
+    min-height: 20px;
+    border: 1px solid #ccc;
+    background: #eef2f4;
+}
+
+.talk-a .msg s.arrow {
+    left: -7px;
+    _left: -17px;
+}
+
+.talk-b {
+    margin-right: 10px;
+    _margin-right: 20px;
+}
+
+.talk-b .info-talk {
+    float: right;
+    min-width: 420px;
+    padding: 0 10px 10px 20%;
+}
+
+.talk-b .msg {
+    float: right;
+    min-width: 350px;
+    min-height: 20px;
+    border: 1px solid #ADCAE3;
+    padding: 10px 10px 10px 10px;
+    background: #bce3f4;
+}
+
+.talk-c {
+    margin-right: 20px;
+    _margin-right: 30px;
+}
+
+.talk-b .info-talk {
+    float: right;
+    min-width: 420px;
+    padding: 0 10px 10px 20%;
+}
+
+.talk-c .msg {
+    float: right;
+    min-width: 70px;
+    padding: 10px 10px 15px 10px;
+    border: 1px solid #ADCAE3;
+    background: #bce3f4;
+}
+
+.talk-b .msg s.arrow {
+    left: 100%;
+    background: url("../pic/b-direct.png") no-repeat;
+}
+
+#smslist-main .smslist-btns.smsListFloatButs{
+    position: fixed;
+    top: 0;
+    width: 770px;
+    height: 50px;
+    padding: 6px 0 0 0;
+    border: 1px solid #018AD8;
+    display: block;
+    z-index: 9999;
+    background: #F5F9FE;
+    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F5F9FE), to(#018AD8) );
+    background: -ms-linear-gradient(top, #F5F9FE, #018AD8);
+    background: -moz-linear-gradient(top, #F5F9FE, #018AD8);
+    background: -o-linear-gradient(top, #F5F9FE, #018AD8);
+    filter: progid:dximagetransform.microsoft.gradient(enabled='true', startColorstr='#FFF5F9FE', endColorstr='#FF018AD8', GradientType=0);
+}
+
+#popupSettingWindow .tag-popup-close{
+    height: 0;
+    position: relative;
+    z-index: 2000;
+}
+
+#popupSettingWindow .tag-popup-close a {
+    float: right;
+    display: block;
+    top: 15px;
+    right: 15px;
+    width: 12px;
+    height: 13px;
+    font-size: 1px;
+    background: url("../pic/select-sprite.png") no-repeat scroll right -11px transparent;
+    position: absolute;
+}
+
+#innerTagPopup{
+    z-index: 250;
+    width: 185px;
+    line-height: 130%;
+    border: 1px solid #D4DAE2;
+    border-radius: 5px;
+    position: absolute;
+    background-color: #D4DAE2;
+    box-shadow: 0 -3px 8px #DDDDDD;
+}
+
+#innerTagPopup label.error{
+    color: #CC0000;
+    display: block;
+}
+
+#innerTagPopup .popup-wrapper {
+    background: #fff;
+    border: 2px solid #76b2de;
+    padding: 5px;
+}
+
+#innerTagPopup .tag-popup-close a {
+    float: right;
+    display: block;
+    width: 12px;
+    height: 13px;
+    font-size: 1px;
+    background: url("../pic/select-sprite.png") no-repeat scroll right -11px transparent;
+}
+
+
+#home_control{
+    color: #fff;
+    margin: 4px 0 0;
+}
+
+#home_control #change{
+    color: #ffffff;
+    font-weight: bold;
+    padding: 3px 15px;
+    background-color: transparent;
+}
+
+#home_image{
+    height: 400px;
+    color: #fff;
+}
+
+.label-font-normal label{
+    font-weight: normal;
+}
+
+#showDetailInfo ~ .popover{
+    min-width: 400px;
+}
+
+#showDetailInfo ~ .popover label{
+    font-size: 12px;
+    line-height: 1.5em;
+    word-wrap: break-word;
+}
+
+#h_qrcode {
+    width: 115px;
+    height: 115px;
+    background-color: #ffffff;
+    border: 1px solid #ffffff;
+}
+
+#h_wire_device {
+    top: 38px;
+    left: 130px;
+	display:inline;
+	margin-right:25px;
+    font-size: 30px;
+	display:inline-block;
+}
+
+#h_wireless_device {
+    font-size: 30px;
+    top: 105px;
+    left: 60px;
+	display:inline-block;
+}
+
+#h_network_type{
+    height: 30px;
+    top: 183px;
+    left: 415px;
+    line-height: 30px;
+    text-align: center;
+    font-size: 18px;
+}
+
+.data-card #h_network_type{
+    top: 156px;
+    left: 218px;
+}
+
+#h_network_type.no-btn {
+}
+
+#h_connect_btn{
+    width: 72px;
+    height: 35px;
+    display:inline-block;
+}
+
+.data-card #h_connect_btn{
+    top: 153px;
+    left: 323px;
+}
+
+.h_connect_on{
+    background: url('../pic/dial-on.png') no-repeat scroll 0 0 transparent;
+}
+
+.h_connect_off{
+    background: url('../pic/dial-off.png') no-repeat scroll 0 0 transparent;
+}
+
+#h_internet_setting_div{
+    top: 222px;
+    left: 418px;
+    width: 170px;
+    height: 35px;
+	margin-top:20px;
+    line-height: 35px;
+    text-align: center;
+}
+
+.data-card #h_internet_setting_div{
+    top: 205px;
+    left: 221px;
+}
+
+#h_internet_setting_btn{
+    width: 170px;
+    height: 35px;
+    line-height: 35px;
+    padding-right: 25px;
+    color: #fff;
+    display: block;
+    font-weight: bold;
+}
+
+#h_wifi_setting_div{
+    top: 318px;
+    left: 418px;
+    width: 170px;
+    height: 35px;
+    line-height: 35px;
+    text-align: center;
+}
+
+#h_wifi_setting_btn{
+    width: 170px;
+    height: 35px;
+    line-height: 35px;
+    padding-right: 25px;
+    color: #fff;
+    display: block;
+    font-weight: bold;
+}
+
+#h_connect_status{
+    top: 272px;
+    left: 670px;
+    width: 25px;
+    height: 25px;
+    position: absolute;
+}
+
+.h_status_connected{
+    background: url('../pic/local-connected.png') no-repeat scroll 0 0 transparent;
+}
+
+.h_status_disconnected{
+    background: url('../pic/local-disconnected.png') no-repeat scroll 0 0 transparent;
+}
+
+.h_status_connecting{
+    background: url('../pic/local-connecting.png') no-repeat scroll 0 0 transparent;
+}
+
+.h_status_disconnecting{
+    background: url('../pic/local-disconnecting.png') no-repeat scroll 0 0 transparent;
+}
+
+.color_block{
+    width: 20px;
+    height: 20px;
+    line-height: 20px;
+    border: 1px solid #ccc;
+    vertical-align: middle;
+    display: inline-block;
+}
+
+.color_block_desc{
+    line-height: 20px;
+    vertical-align: middle;
+    margin-left: 8px;
+    display: inline-block;
+}
+
+.colorRed{
+    color: #CC0000;
+}
+
+.msg pre{
+    line-height: 17px;
+    border: none;
+    margin: 0;
+    padding: 0;
+    overflow-x: hidden;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+    color: #696e72;
+    background: none;
+}
+
+.smslist-item-icon {
+    width: 80px;
+    height: 80px;
+    margin-left: 10px;
+    margin-top: -6px;
+}
+
+.smslist-item-name {
+    max-width: 550px;
+    color: #000;
+    display: inline-block;
+    overflow: hidden;
+}
+
+.smslist-item-name2 {
+    color: #000;
+}
+
+.smslist-item-name-draftShowName{
+    display:inline;
+}
+
+.smslist-item-total-count-style{
+    float:left;
+    width:50px;
+    display:inline-block;
+    color:#696e72;
+}
+
+.smslist-item-repeat {
+    font-weight: bold;
+    line-height: 18px;
+    text-indent: 3px;
+    color: #7D8DA3;
+}
+
+.smslist-item-repeat:hover {
+    color: #207DDD;
+}
+
+.smslist-item{
+    border-bottom: 1px solid #e1e1e1;
+    margin-bottom: 10px;
+}
+
+.repeat-icon {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_forward.png") no-repeat;
+}
+
+.repeat-icon:hover {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_forward_hover.png") no-repeat;
+}
+
+.sms-forward-icon {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_forward.png") no-repeat scroll;
+}
+
+.sms-forward-icon:hover {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_forward_hover.png") no-repeat scroll;
+}
+
+.smslist-item-delete {
+    width: 18px;
+    height: 18px;
+    display: block;
+}
+
+.smslist-item-delete:hover {
+    width: 18px;
+    height: 18px;
+    display: block;
+}
+
+.sms-add-contact-icon {
+    width: 13px;
+    height: 13px;
+    display: inline-block;
+    background: url("../pic/png_add_contact.png") no-repeat scroll 0 0 transparent;
+}
+
+.sms-add-contact-icon:hover {
+    width: 13px;
+    height: 13px;
+    display: inline-block;
+    background: url("../pic/png_add_contact_hover.png") no-repeat scroll 0 0 transparent;
+}
+
+.smslist-item-delete:hover .trash-icon {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_delete_hover.png") no-repeat;
+}
+
+.trash-icon {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: url("../pic/png_delete.png") no-repeat;
+}
+
+.smslist-item-resend {
+    font-weight: bold;
+    line-height: 22px;
+    text-indent: 3px;
+    color: #7D8DA3;
+}
+
+.sms-resend-icon {
+    width: 18px;
+    height: 18px;
+    display: block;
+    background: transparent url("../pic/png_resend1.png") no-repeat;
+}
+
+.smslist-item-resend:hover {
+    color: #207DDD;
+}
+
+.smslist-item-resend:hover .sms-resend-icon{
+    background: transparent url("../pic/png_resend_hover.png") no-repeat;
+}
+
+.clock-icon {
+    width: 18px;
+    height: 30px;
+    line-height: 30px;
+    display: block;
+    background: url("../pic/png_time.png") no-repeat;
+}
+
+.clock-icon:hover {
+    width: 18px;
+    height: 30px;
+    line-height: 30px;
+    display: block;
+    background: url("../pic/png_time.png") no-repeat;
+}
+
+.smslist-item-new-count {
+    width: 29px;
+    height: 35px;
+    line-height: 35px;
+    margin-right: 5px;
+    text-align: center;
+    font-weight: bold;
+    color: #ffffff;
+    background: url("../pic/png_new_sms_bg.png") no-repeat scroll 0 0 transparent;
+}
+
+#mainContainer .width100p {
+    width: 100%;
+}
+
+.height15 {
+    height: 15px;
+    line-height: 15px;
+}
+
+
+label.error{
+    color: #a94442;
+}
+
+#frmPassword label.error {
+    white-space: nowrap;
+}
+
+.form-information{
+    margin-top: 10px;
+}
+
+.form-information p{
+    padding: 15px;
+}
+
+body[lang=en] .label-absolute{
+    height: 40px;
+}
+
+body[lang=en] .label-absolute > label{
+    top: 0;
+    left: 40px;
+    position: absolute;
+}
+
+.ko-grid-pageLinks {
+
+    padding-left: 0;
+    margin: 20px 0;
+    border-radius: 4px;
+    width: 100%;
+    display: inline-block;
+}
+
+.ko-grid-pageLinks > a,
+.ko-grid-pageLinks > span {
+    display: inline;
+    position: relative;
+    float: left;
+    padding: 6px 12px;
+    line-height: 1.42857143;
+    text-decoration: none;
+    color: #008AD7;
+    background-color: #ffffff;
+    border: 1px solid #dddddd;
+    margin-left: -1px;
+}
+
+.ko-grid-pageLinks > a:first-child,
+.ko-grid-pageLinks > span:first-child {
+    margin-left: 0;
+    border-radius: 4px 0 0 4px;
+}
+
+.ko-grid-pageLinks > a:last-child,
+.ko-grid-pageLinks > span:last-child {
+    margin-left: 0;
+    border-radius: 0 4px 4px 0;
+}
+
+.ko-grid-pageLinks > a.ko-grid-pager-selected,
+.ko-grid-pageLinks > span.ko-grid-pager-selected,
+.ko-grid-pageLinks > a.ko-grid-pager-selected:hover,
+.ko-grid-pageLinks > span.ko-grid-pager-selected:hover {
+    z-index: 2;
+    cursor: default;
+    color: #ffffff;
+    background-color: #008AD7;
+    border-color: #008AD7;
+}
+
+.ko-grid-pageLinks > a:hover,
+.ko-grid-pageLinks > span:hover {
+    z-index: 2;
+    background-color: #EEEEEE;
+    border-color: #DDDDDD;
+}
+
+.ko-grid-pageLinks > span.ko-grid-pager-disabled,
+.ko-grid-pageLinks > span.ko-grid-pager-disabled:hover,
+.ko-grid-pageLinks > span.ko-grid-pager-disabled:focus,
+.ko-grid-pageLinks > a.ko-grid-pager-disabled,
+.ko-grid-pageLinks > a.ko-grid-pager-disabled:hover,
+.ko-grid-pageLinks > a.ko-grid-pager-disabled:focus {
+    color: #777777;
+    background-color: #ffffff;
+    border-color: #dddddd;
+    cursor: not-allowed;
+}
+
+.nav-tabs > li > a, .nav-tabs.nav-justified > li > a{
+    -webkit-border-radius: 0;
+    -moz-border-radius: 0;
+    border-radius: 0;
+}
+.nav-tabs > li > a, .nav-tabs > li > a:hover, .nav-tabs > li > a:focus{
+    color: #333333;
+    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+    background-color: #f5f5f5;
+    *background-color: #e6e6e6;
+    background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+    background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+    background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+    background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+    background-repeat: repeat-x;
+    border: 1px solid #cccccc;
+    *border: 0;
+    border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+    border-bottom-color: #b3b3b3;
+    filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
+    *zoom: 1;
+    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.nav-tabs > li:first-child > a, .nav-tabs > li:first-child > a:hover, .nav-tabs > li:first-child > a:focus{
+    -webkit-border-radius: 4px 0 0 4px;
+    -moz-border-radius: 4px 0 0 4px;
+    border-radius: 4px 0 0 4px;
+}
+
+.nav-tabs > li:last-child > a, .nav-tabs > li:last-child > a:hover, .nav-tabs > li:last-child > a:focus{
+    -webkit-border-radius: 0 4px 4px 0;
+    -moz-border-radius: 0 4px 4px 0;
+    border-radius: 0 4px 4px 0;
+}
+
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus,
+.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus{
+    color: #ffffff;
+    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+    background-color: #006dcc;
+    *background-color: #0044cc;
+    border-color: #0044cc #0044cc #002a80;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+    background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+    background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+    background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+    background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+    background-repeat: repeat-x;
+    filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+}
+
+#result-overlay .simplemodal-data, #result-overlay .simplemodal-wrap, #result-overlay .alert{
+    border-radius: 8px;
+    -moz-border-radius: 8px;
+    -webkit-border-radius: 8px;
+    box-shadow: 0 3px 5px #999;
+    -moz-box-shadow: 0 3px 5px #999;
+    -webkit-box-shadow: 0 3px 5px #999;
+}
+
+.form-note .notes-title {
+    height: 30px;
+    cursor: pointer;
+    padding-bottom: 5px;
+    background: url("../pic/res_help.png") no-repeat scroll left center transparent;
+}
+
+.form-note .notes-content {
+    display: none;
+}
+
+.form-note .notes-dot {
+    border-bottom: 1px solid #ffffff;
+}
+
+.form-body .form-note {
+    border-radius: 4px;
+    font-size: 12px;
+    margin-bottom: 10px;
+    margin-top: 20px;
+    padding: 10px;
+    background-color: #ededed;
+}
+
+.form-body .form-note li {
+    line-height: 30px;
+    list-style: none outside none;
+    padding-left: 15px;
+    background: url("../pic/res_point.png") no-repeat scroll 0 12px transparent;
+}
+
+.form-body .form-note li.no-style {
+    background: none;
+}
+
+.border-color-transition {;
+    -moz-transition: border-color .5s ease-in;
+    -webkit-transition: border-color .5s ease-in;
+    -o-transition: border-color .5s ease-in;
+    -ms-transition: border-color .5s ease-in;
+    transition: border-color .5s ease-in;
+}
+
+.attention-focus{
+    border-color: red;
+}
+
+.popover-title{
+    background-color: #eaeaea;
+    border-bottom: 1px solid #cbcbcb;
+}
+
+.fixTableScroll {
+    width:100%;
+    overflow-x:auto;
+    overflow-y:hidden;
+    height:100%;
+    overflow-scrolling: touch;
+}
+
+.fixTableScroll:hover {
+    height:100%;
+}
+
+#h_internet_setting_btn:hover {
+    background-image: url("../pic/internet_setting_hover.png");
+}
+
+#h_wifi_setting_btn:hover {
+    background-image: url("../pic/wlan_setting_hover.jpg");
+}
+
+.connected_devices_container {    
+    float:left;
+    width: 280px;
+	height: 400px;
+	margin-left:20px;
+    text-align: center;
+    border-radius:10px;
+    cursor: pointer;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #70EBE6, endColorstr = #059EC4); 
+	background: -webkit-linear-gradient(left top, #70EBE6 , #059EC4); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #70EBE6 , #059EC4); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #70EBE6 , #059EC4); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom right, #70EBE6 , #059EC4); /* 标准的语法(必须放在最后)*/
+}
+
+.connected_devices_container .item_icon{
+	height: 45%;
+    background: url(../pic/new/device.png) center center no-repeat;
+}
+
+.home_h3{
+    font-size: 25px;
+    -webkit-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -moz-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -ms-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);	
+	text-align: center;
+}
+
+.network_control_container {
+    float:left;
+    width: 280px;
+    height: 400px;
+	margin-left:20px;
+	border-radius:10px;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #36A4FF, endColorstr = #0877D4); 
+	background: -webkit-linear-gradient(left top, #36A4FF , #0877D4); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #36A4FF , #0877D4); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #36A4FF , #0877D4); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom right, #36A4FF , #0877D4); /* 标准的语法(必须放在最后)*/
+}
+
+.network_control_container .item_icon{
+	height: 45%;
+    background: url(../pic/new/router.png) center center no-repeat;
+}
+
+.internet_status_container{	
+	float:left;
+    width: 280px;
+    height: 400px;
+	margin-left:60px;
+	border-radius:10px;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #D014FE, endColorstr = #7109D5); 
+	background: -webkit-linear-gradient(left top, #D014FE , #7109D5); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #D014FE , #7109D5); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #D014FE , #7109D5); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom right, #D014FE , #7109D5); /* 标准的语法(必须放在最后)*/	
+	text-align: center;
+}
+
+.internet_status_container .item_icon_connect{
+	height: 45%;
+    background: url(../pic/new/surfing1.png) center center no-repeat;
+}
+
+.internet_status_container .item_icon_disconnect{
+	height: 45%;
+    background: url(../pic/new/surfing2.png) center center no-repeat;
+}
+
+.internet_status_container .data-card{
+    top: 180px;
+    left: 636px;
+}
+
+.traffic_control_container{
+    float:left;
+    width: 280px;
+    height: 305px;
+	margin-left:45px;
+	border-radius:10px;
+	color:#fff;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #FCCA53, endColorstr = #F45406); 
+	background: -webkit-gradient(linear, 0 0, 0 100%, from(#FCCA53), to(#F45406));
+	background: -webkit-linear-gradient(left top, #FCCA53 , #F45406); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #FCCA53 , #F45406); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #FCCA53 , #F45406); /* Firefox 3.6 - 15 */
+	background: -ms-linear-gradient(left, #FCCA53, #F45406);   
+    background: linear-gradient(to bottom right, #FCCA53 , #F45406); /* 标准的语法(必须放在最后)*/
+
+}
+.device_info_container{
+    float:left;
+    width: 580px;
+    height: 305px;
+	border-radius:10px;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #B454F6, endColorstr = #0096D7); 
+	background: -webkit-linear-gradient(left top, #B454F6 , #0096D7); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #B454F6 , #0096D7); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #B454F6 , #0096D7); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom right, #B454F6 , #0096D7); /* 标准的语法(必须放在最后)*/
+}
+
+.device_info_container_hastraffic{
+    margin-left:20px;
+}
+
+.device_info_container_notraffic{
+    margin-left:210px;
+}
+
+.device_info_container a{
+    padding-right: 2em;
+	margin-right:1em;
+    color: #FFF;
+    background: url(../pic/new/direct.png) right center no-repeat;
+}
+
+
+#smslist-table td{
+    vertical-align: middle;
+    line-height: 1.2;
+}
+
+#simMsgList_container td{
+    vertical-align: middle;
+    line-height: 1.2;
+}
+
+.smslist-item-msg pre{
+    overflow: hidden;
+    text-overflow: ellipsis;
+    border: none;
+    padding: 0;
+    margin:0;
+    font-size: 14px;
+    line-height: 1.2;
+    white-space: nowrap;
+    background-color: transparent;
+    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+.smslist-btns {
+}
+
+#smsScrollLoading {
+    margin: 25px auto;
+    font-size: 22px;
+    font-weight: bold;
+    text-align: center;
+    color: #7D8DA3;
+}
+
+#smsScrollLoadingBtn {
+    margin: 25px auto;
+    font-size: 22px;
+    font-weight: bold;
+    text-align: center;
+    color: #7D8DA3;
+    cursor: pointer;
+}
+
+#smslist_container{
+    position: relative;
+}
+
+#smslist_container table,#smslist_container table td,#smslist_container table th {
+    padding: 0;
+    margin: 0;
+    border: none;
+}
+
+.smslist-item-checkbox{float: left; width: 20px;}
+.chosen-container-multi .chosen-choices li.search-field input[type="text"]{
+    height: auto;
+}
+
+.sms-table-content{
+    width: 450px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.showFullHeight{
+    white-space: normal;
+}
+
+#buttom-bubble{
+    width: 230px;
+    height: auto;
+    right: 0;
+    bottom: 0;
+    margin-right: 10px;
+    position: fixed;
+    z-index: 100;
+}
+
+#buttom-bubble .bubbleItem{
+    margin-top: 8px;
+    border-radius: 10px 10px 0 0;
+    position: relative;
+}
+
+#buttom-bubble h3{
+    padding: 8px 30px 8px 8px;
+    background-color: #eaeaea;
+    border: 2px solid #eaeaea;
+    border-bottom: 0;
+    border-radius: 8px 8px 0 0;
+    margin-bottom: 0;
+    font-size: 14px;
+}
+
+#buttom-bubble .bubbleItem.report h3{
+    color: #E47602;
+}
+
+#buttom-bubble h3 a.bubbleCloseBtn{
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    border: 1px solid #E2E2E2;
+    -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
+    -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
+    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.4);
+}
+
+#buttom-bubble h3 a.bubbleCloseBtn:hover{
+    border: 1px solid #2063AB;
+}
+
+#buttom-bubble .bubbleCloseBtn{
+    width: 16px;
+    height: 14px;
+    display: block;
+    background: url("../pic/res_delete.png");
+}
+
+#buttom-bubble .bubbleContainer{
+    border: 2px solid #E2E2E2;
+    padding: 2px 8px 8px 8px;
+    line-height: 150%;
+    overflow: hidden;
+    border-top: 0;
+    font-size: 12px;
+    background: #F2F2F2;
+    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(white), to(#eaeaea) );
+    background: -ms-linear-gradient(top, white, #eaeaea);
+    background: -moz-linear-gradient(top, white, #eaeaea);
+    background: -o-linear-gradient(top, white,#eaeaea);
+    filter: progid:dximagetransform.microsoft.gradient(enabled='true', startColorstr='#FFFFFFFF', endColorstr='#ffeaeaea', GradientType=0);
+}
+
+#buttom-bubble .bubbleContent{
+    max-height: 55px;
+    overflow: hidden;
+    line-height: 18px;
+    word-break: break-all;
+    word-wrap: break-word;
+}
+
+#buttom-bubble .bubbleDatetime{
+    padding-right: 10px;
+    text-align: right;
+    font-size: 10px;
+}
+
+#topContainer{
+    padding-top: 10px;
+    padding-bottom: 10px;
+    background-color: #EAEAEA;
+}
+
+.login-page-bg{
+    background: url("../pic/res_login-bg.png") repeat-x scroll 0 0 transparent;
+}
+
+#login-form-container{
+    border: 1px solid gray;
+    border-radius: 8px;
+    -moz-border-radius: 8px;
+    -webkit-border-radius: 8px;
+    background-color: white;
+    box-shadow: 0 3px 5px #053984;
+    -moz-box-shadow: 0 3px 5px #053984;
+    -webkit-box-shadow: 0 3px 5px #053984;
+}
+
+#htmlContainer{
+    padding: 0;
+}
+
+#htmlContainer .form-title{
+    padding: 10px 15px 10px 15px;
+    margin-bottom: 0;
+    border-bottom: 1px solid #cbcbcb;
+    background-color: #eaeaea;
+}
+
+#htmlContainer .content{
+    padding: 15px;
+}
+
+#simplemodal-data .alert{
+    border: 1px solid gray;
+    border-radius: 8px;
+    box-shadow: 0 6px 10px #053984;
+    width: 400px;
+    height: 150px;
+    background-color: white;
+}
+
+.btn-primary{
+    background-color: #008AD7;
+}
+
+#pblist tr td {
+    cursor: pointer;
+}
+
+#pblist tr td:first-child {
+    cursor: default;
+}
+
+.form-buttons {
+    margin-right: 20px;
+    margin-bottom: 5px;
+    text-align: right;
+}
+
+.align-right {
+    text-align: right;
+}
+
+.margin-right-10 {
+    margin-right: 10px;
+}
+
+.beautiful_bg #indexContainer{
+}
+
+.header-row {
+    background-color: #018ad8;
+    border-left-width: 0;
+    border-radius: 10px 10px 0 0;
+    margin: -1px 0 30px -11px;
+    width: 940px;
+    color: white;
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #B454F6, endColorstr = #0096D7); 
+	background: -webkit-gradient(linear, 0 0, 0 100%, from(#B454F6), to(#0096D7));
+	background: -webkit-linear-gradient(left top, #B454F6 , #0096D7); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #B454F6 , #0096D7); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #B454F6 , #0096D7); /* Firefox 3.6 - 15 */	
+	background: -ms-linear-gradient(left, #B454F6, #0096D7);
+    background: linear-gradient(to bottom right, #B454F6  , #0096D7); /* 标准的语法(必须放在最后)*/
+}
+
+.header-row .form-title {
+    border: none;
+    margin-bottom: 0;
+	text-align:center;
+}
+
+#innerContainer {
+    width: 100%;
+    margin: 35px auto;
+    padding: 0 10px 20px 10px;
+    border: 1px solid #fff;
+	border-bottom:0px;
+    border-radius: 10px;
+	background: -webkit-linear-gradient(top, #F1F9FC , #fff); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom, #F1F9FC , #fff); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom, #F1F9FC , #fff); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom, #F1F9FC , #fff); /* 标准的语法(必须放在最后)*/
+	}
+
+.form-title-multi h1 {
+    margin-top: 10px;
+    margin-bottom: 5px;
+}
+
+.form-title-multi p {
+    margin-bottom: 0;
+}
+.mobile_version_link{
+    color: #A0AFCB;
+}
+
+#opmode_form .content {
+    background-color: #FFFFFF;
+}
+
+#sms_unread_count a:hover {
+    text-decoration: none;
+}
+
+.customfile-input {
+    outline: none;
+    position: absolute;
+    height: 100px;
+    cursor: pointer;
+    background: transparent;
+    border: 0;
+    z-index: 999;
+    opacity: 0;
+    -moz-opacity: 0;
+    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0 );
+}
+
+.customfile {
+    width: 400px;
+    padding: 2px;
+    border: 1px solid #444;
+    line-height: 30px;
+    background: #FAFAFA;
+    background: -ms-linear-gradient(#FAFAFA, #CACACA);
+    background: -moz-linear-gradient(#FAFAFA, #CACACA);
+    background : -webkit-linear-gradient( #FAFAFA, #EAEAEA);
+    cursor: pointer;
+    overflow: hidden;
+    -moz-border-radius: 7px;
+    -webkit-border-radius: 7px;
+    border-radius: 7px;
+    position: relative;
+    float: left;
+}
+
+.customfile-disabled {
+    opacity: .5;
+    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0 );
+    cursor: default;
+}
+
+.customfile-feedback {
+    display: block;
+    margin: 1px 1px 1px 5px;
+    font-size: 1.2em;
+    color: #767676;
+    font-style: italic;
+}
+
+.customfile-feedback-populated {
+    color: #111;
+    padding-left: 20px;
+    line-height: 24px;
+    margin-top: 6px;
+    width:290px;
+    font-style: normal;
+    font-weight: bold;
+    background: url(../pic/pic-file.png) left 0px no-repeat;
+    white-space:nowrap;
+    display: block;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.customfile-button {
+    border: 1px solid #999;
+    background-color: #008AD7;
+    color: #fff;
+    float: right;
+    padding: 0px 10px;
+    text-align: center;
+    text-decoration: none;
+    font-size: 1em;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    border-radius: 5px;
+}
+
+.customfile-hover .customfile-button,.customfile-focus .customfile-button {
+    background-color: #3071A9;
+    border-color: #285E8E;
+    padding: 0px 10px;
+    color: #fff;
+}
+
+.customfile-focus .customfile-button {
+    outline: 1px dotted #ccc;
+}
+
+/*file type icons*/
+.customfile-ext-jpg, .customfile-ext-gif, .customfile-ext-png, .customfile-ext-jpeg, .customfile-ext-bmp { background-image: url(../pic/pic-picture.png);}
+.customfile-ext-mp4, .customfile-ext-mov, .customfile-ext-swf, .customfile-ext-m4v { background-image: url(../pic/pic-film.png);}
+.customfile-ext-mp3, .customfile-ext-wav { background-image: url(../pic/pic-mp3.png);}
+.customfile-ext-zip, .customfile-ext-tar, .customfile-ext-sit { background-image: url(../pic/pic-rar.png);}
+
+input[type='file']:focus{
+    outline: none;
+}
+
+#smslist-checkAll, #simMsgList-checkAll {
+    margin-left: -4px;
+}
+
+.not-allowed {
+    color: #D1D1D1 !important;
+    cursor: not-allowed;
+}
+
+.not-allowed:hover {
+    outline: 0;
+    text-decoration: none;
+}
+
+.not-allowed:focus {
+    outline: 0;
+    text-decoration: none;
+}
+
+.margin-top-5 {
+    margin-top: 5px;
+}
+
+.colorLightBlue{
+    color: #09F;
+}
+
+.sd_invalid_notes ul li{
+    height: 2em;
+    line-height: 2em;
+}
+
+.sd_invalid_notes .notes-content{
+    display: block;
+}
+
+#fileControlSection li {
+    list-style: outside none none;
+    display: inline;
+}
+
+
+.my_router_list,.net_surfing_list{
+    margin-top: 20px;
+}
+
+.my_router_list ul,.net_surfing_list ul,.statistics_list ul,.nav_right ul{
+    -webkit-padding-start: 0px;
+	margin:0px;
+	padding:0px;
+}
+
+.my_router_list li,.net_surfing_list li,.statistics_list li{
+    padding: 0 1em;
+	list-style:none;
+}
+
+.my_router_list li,.my_router_list li a,.net_surfing_list li{
+    text-align: left;
+    line-height: 2em;
+    font-size: 18px;
+
+}
+
+.my_router_list li a{
+    display: block;
+    color: #FFF;
+    background: url(../pic/new/direct.png) right center no-repeat;
+    -webkit-transition: all ease-in .3s;
+    -moz-transition: all ease-in .3s;
+    -ms-transition: all ease-in .3s;
+    transition: all ease-in .3s;
+}
+
+.my_router_list li a:hover{
+    color: #FAFAFA;
+    -webkit-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -moz-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -ms-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+}
+
+.net_surfing_list li{
+    text-align: center;
+}
+
+.net_surfing_list i{
+    display: inline-block;
+    width: 17px;
+    height: 24px;
+    margin-right: 15px;
+    vertical-align: middle;
+}
+
+.net_surfing_list i.up{
+    background: url(../pic/new/direct_top.png);
+}
+
+.net_surfing_list i.down{
+    background: url(../pic/new/direct_down.png);
+}
+
+.statistics_list ul li{
+    padding: 0 20px;
+    text-align: left;
+    margin-top: 15px;
+	font-size:18px;
+}
+
+.statistics_list ul li a{
+    color: #FFF;
+    display: block;
+    background: url(../pic/new/direct.png) right center no-repeat;
+    -webkit-transition: all ease-in .3s;
+    -moz-transition: all ease-in .3s;
+    -ms-transition: all ease-in .3s;
+    transition: all ease-in .3s;
+}
+
+.statistics_list ul li a:hover{
+    -webkit-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -moz-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    -ms-text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+    text-shadow: 0px 1px 2px rgba(100, 100, 10, 0.5);
+}
+
+.type_items{
+	width:880px;
+    height: 100px;
+    text-align: center;
+	margin:0 0 0 45px;
+    -webkit-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -moz-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -ms-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -webkit-border-radius: 8px;
+    -moz-border-radius: 8px;
+    -ms-border-radius: 8px;
+    border-radius: 10px;	
+	filter: progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr = #B454F6, endColorstr = #0096D7); 
+	background: -webkit-linear-gradient(left top, #B454F6 , #0096D7); /* Safari 5.1 - 6.0 */
+    background: -o-linear-gradient(bottom right, #B454F6 , #0096D7); /* Opera 11.1 - 12.0 */
+    background: -moz-linear-gradient(bottom right, #B454F6 , #0096D7); /* Firefox 3.6 - 15 */
+    background: linear-gradient(to bottom right, #B454F6 , #0096D7); /* 标准的语法(必须放在最后)*/
+}
+
+.type_items ul{
+    width: auto;
+	-webkit-padding-start: 0px;
+	margin:0px;
+	padding:0px;
+}
+
+.type_items ul li{
+    display: inline-block;
+	float:left;
+	list-style:none;
+}
+
+.type_items a{
+    display: table-cell;
+    width: 125px;
+    height: 100px;
+    color: #FFF;
+    vertical-align: middle;
+    -webkit-transition: all ease-in .3s;
+    -moz-transition: all ease-in .3s;
+    -ms-transition: all ease-in .3s;
+    transition: all ease-in .3s;
+    border-left: 1px solid;
+}
+
+.type_items a,.nav_right a:hover{
+    -webkit-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -moz-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -ms-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+}
+
+.nav_right{
+    margin: 0 auto 0px -10px;
+    text-align: center;	
+
+}
+
+.nav_right ul{
+    width: auto;
+    margin: 0 auto;
+}
+
+.nav_right ul li{
+    margin: 15px 20px 0 0;
+	width:100%;
+	list-style:none;
+}
+
+.nav_right .active a{
+    display: table-cell;
+    width: 138px;
+    height: 50px;
+    color: #fff;
+	font-weight:bold;
+    vertical-align: middle;
+    -webkit-transition: all ease-in .3s;
+    -moz-transition: all ease-in .3s;
+    -ms-transition: all ease-in .3s;
+    transition: all ease-in .3s;
+	-webkit-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -moz-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -ms-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    box-shadow: 0px 8px 10px rgba(172, 172, 172, 0.5);
+    background-color:rgb(66, 153, 237);	
+}
+
+.nav_right a{
+    width: 138px;
+    height: 50px;
+    display: table-cell;
+    color: #000;
+    vertical-align: middle;
+    -webkit-transition: all ease-in .3s;
+    -moz-transition: all ease-in .3s;
+    -ms-transition: all ease-in .3s;
+    transition: all ease-in .3s;
+	-webkit-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -moz-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    -ms-box-shadow: 0px 2px 4px rgba(172, 172, 172, 0.5);
+    box-shadow: 0px 8px 10px rgba(172, 172, 172, 0.5);
+    background-color:rgb(182, 214, 232);	
+}
+
+.sd-total {
+    text-align: right;
+    padding-right: 20px;
+}
+
+.icon-folder{
+    background: url("../pic/pic-folder.png") no-repeat;
+}
+
+.icon-pdf{
+    background: url("../pic/pic-pdf.png") no-repeat;
+}
+
+.icon-rar{
+    background: url("../pic/pic-rar.png") no-repeat;
+}
+
+.icon-mp3{
+    background: url("../pic/pic-mp3.png") no-repeat;
+}
+
+.icon-file{
+    background: url("../pic/pic-file.png") no-repeat;
+}
+
+.icon-film{
+    background: url("../pic/pic-film.png") no-repeat;
+}
+
+.icon-picture{
+    background: url("../pic/pic-picture.png") no-repeat;
+}
+
+.icon-doc{
+    background: url("../pic/pic-doc.png") no-repeat;
+}
+
+.icon-ppt{
+    background: url("../pic/pic-ppt.png") no-repeat;
+}
+
+.icon-xls{
+    background: url("../pic/pic-xls.png") no-repeat;
+}
+
+.icon-xml{
+    background: url("../pic/pic-xml.png") no-repeat;
+}
+
+.icon-download{
+    background: url("../pic/pic-download.png") no-repeat;
+}
+
+.mini-icon{
+    width: 20px;
+    height: 20px;
+    font-size: 16px;
+    display: block;
+}
+
+.cursor-pointer {
+    cursor: pointer;
+}
+
+#fileListSection th {
+    text-align: center;
+}
+
+.margin-left-5 {
+    margin-left: 5px;
+}
+
+.margin-top-2 {
+    margin-top: 2px;
+}
+
+.push-right {
+    text-align: right;
+}
+
+.data-card-language {
+    top: -25px;
+    right: 10px;
+    position: absolute;
+    display: block;
+}
diff --git a/lynq/MD310/ap/app/zte_webui/i18n/Messages_en.properties b/lynq/MD310/ap/app/zte_webui/i18n/Messages_en.properties
index d3f28a0..1de7c5c 100755
--- a/lynq/MD310/ap/app/zte_webui/i18n/Messages_en.properties
+++ b/lynq/MD310/ap/app/zte_webui/i18n/Messages_en.properties
@@ -446,6 +446,14 @@
 dial_roaming_remind = Check here, you can connect to internet in the roaming status.

 dial_roaming_connect = Your device is roaming. Connecting to network may occur additional charges. Continue?

 

+#net_status

+net_info = Network Status

+pci = PCI

+rsrp = RSRP

+rsrq = RSRQ

+plmn = PLMN

+band = BAND

+

 #phonebook

 search = Search

 save_location = Save Location

@@ -617,7 +625,7 @@
 #sleep mode

 wifi_sleep = Wi-Fi Sleep

 wifi_sleep_mode = Power saving mode

-sleep_time = Sleep/shutdown after

+sleep_time = Shutdown after

 sleep_select_0 = Sleep

 sleep_select_1 = Power off

 sleep_mode_-1 = Never Sleep

@@ -627,7 +635,7 @@
 sleep_mode_30 = 30 Minutes

 sleep_mode_60 = 1 Hour

 sleep_mode_120 = 2 Hours

-wifi_sleep_note_info = Sleep after: When there''s no Wi-Fi connection in specific time, Wi-Fi will be unavailable, and the system will turn to sleep mode/power off for power-saving.

+wifi_sleep_note_info = Shutdown after: When there''s no Wi-Fi connection in specific time, Wi-Fi will be unavailable, and the system will power off for power-saving.

 wifi_sleep_confirm = The current setting changes may restart Wi-Fi, continue any way?

 

 #system security

@@ -846,6 +854,7 @@
 hardware_version = Hardware Version

 imei = IMEI

 imsi = IMSI

+iccid = ICCID

 wan_ip_address = WAN IP Address

 ipv6_wan_ip_address = WAN IPv6 Address

 network_name_ssid1 = Network Name (Main SSID)

@@ -1624,6 +1633,7 @@
 band_40 = Band 40

 band_info = Band Settings

 cell_id = Current registration Cell

+cellid = CELLID

 lock_apply = Lock

 unlock_apply= Unlock

 sinr = SINR

diff --git a/lynq/MD310/ap/app/zte_webui/i18n/Messages_zh-cn.properties b/lynq/MD310/ap/app/zte_webui/i18n/Messages_zh-cn.properties
index 42327f1..15befb3 100755
--- a/lynq/MD310/ap/app/zte_webui/i18n/Messages_zh-cn.properties
+++ b/lynq/MD310/ap/app/zte_webui/i18n/Messages_zh-cn.properties
@@ -448,6 +448,14 @@
 dial_roaming_remind = 勾选此项,您可以在漫游状态下连接到网络,且可能会产生额外费用。

 dial_roaming_connect = 设备处于漫游状态,连接网络会使您的资费增加。确定继续?

 

+#net_status

+net_info = 网络状态

+pci = PCI

+rsrp = RSRP

+rsrq = RSRQ

+plmn = PLMN

+band = BAND

+

 #phonebook

 search = 搜索

 save_location = 存储位置

@@ -619,7 +627,7 @@
 #sleep mode

 wifi_sleep = Wi-Fi 休眠设置

 wifi_sleep_mode = 省电模式

-sleep_time = 休眠/关机时间

+sleep_time = 关机时间

 sleep_select_0 = 休眠

 sleep_select_1 = 关机

 sleep_mode_-1 = 从不休眠

@@ -629,7 +637,7 @@
 sleep_mode_30 = 30分钟

 sleep_mode_60 = 1小时

 sleep_mode_120 = 2小时

-wifi_sleep_note_info = 休眠时间:当在指定的时间内无 Wi-Fi 连接时,Wi-Fi 功能将会停用,系统会转入休眠模式/关机以节省电量。

+wifi_sleep_note_info = 关机时间:当在指定的时间内无 Wi-Fi 连接时,Wi-Fi 功能将会停用,系统会直接关机以节省电量。

 wifi_sleep_confirm = 当前设置改变时将会重启wifi,是否继续?

 

 #system security

@@ -848,6 +856,7 @@
 hardware_version = 硬件版本

 imei = IMEI

 imsi = IMSI

+iccid = ICCID

 wan_ip_address = WAN IP 地址

 ipv6_wan_ip_address = WAN IPv6 地址

 network_name_ssid1 = 网络名称 (主SSID)

@@ -1631,6 +1640,7 @@
 band_40 = 频段 40

 band_info = 频段设置

 cell_id = 当前注册的小区

+cellid = CELLID

 lock_apply = 加锁

 unlock_apply= 解锁

 band_cell_settings = 频段小区设置

diff --git a/lynq/MD310/ap/app/zte_webui/index.html b/lynq/MD310/ap/app/zte_webui/index.html
index 214d453..f64166a 100755
--- a/lynq/MD310/ap/app/zte_webui/index.html
+++ b/lynq/MD310/ap/app/zte_webui/index.html
@@ -25,7 +25,7 @@
 <div class="container" id="topContainer">

     <div id="langLogoBar" class="row">

         <div class="col-xs-4">

-            <a href="index.html">

+            <a href="index.html" style="display: none;">

 			<script type="text/javascript">

 			document.write("<img src='pic/res_logo_web.png?random=" + Math.random() + "' />");

 			</script>

diff --git a/lynq/MD310/ap/app/zte_webui/js/com.js b/lynq/MD310/ap/app/zte_webui/js/com.js
index a4de910..73e9c0d 100755
--- a/lynq/MD310/ap/app/zte_webui/js/com.js
+++ b/lynq/MD310/ap/app/zte_webui/js/com.js
@@ -497,6 +497,25 @@
             }

         }

     }

+    function getNetworkStatus() {

+        return stuffMake(arguments, {}, prepare, deal, null, false);

+        function prepare(values, isPost) {

+            var valueReq = {};

+            valueReq.cmd = "NETWORK_INFO";

+            return valueReq;

+        }

+        function deal(result) {

+            return {

+                sinr: result.lte_sinr,

+                rsrp: result.lte_rsrp,

+                rsrq: result.lte_rsrq,

+                plmn: result.lte_plmn,

+                pci: result.lte_pci,

+                cellid: result.lte_cellid,

+                band: result.lte_band

+            };

+       }

+    }

     function deleteApn() {

         return stuffMake(arguments, {}, prepare, deal, null, true);

         function prepare(values, isPost) {

@@ -2888,7 +2907,7 @@
         function prepare(values, isPost) {

 	    var wpask = config.PASSWORD_ENCODE ? "WPAPSK1_encode,m_WPAPSK1_encode," : "rnum_js,WPAPSK1_enaes,m_WPAPSK1_enaes,";

             var valueReq = {

-                cmd: "wifi_coverage,m_ssid_enable,imei,network_type,sub_network_type,rssi,rscp,lte_rsrp,imsi,sim_imsi,cr_version,hw_version,MAX_Access_num," + wpask + "SSID1,AuthMode,m_SSID,m_AuthMode,m_HideSSID,m_MAX_Access_num,lan_ipaddr," + "mac_address,msisdn,LocalDomain,wan_ipaddr,static_wan_ipaddr,ipv6_wan_ipaddr,ipv6_pdp_type,pdp_type,ppp_status,sta_ip_status,rj45_state,ethwan_mode",

+                cmd: "wifi_coverage,m_ssid_enable,imei,ziccid,cell_id,network_type,sub_network_type,rssi,rscp,lte_rsrp,imsi,sim_imsi,cr_version,hw_version,MAX_Access_num," + wpask + "SSID1,AuthMode,m_SSID,m_AuthMode,m_HideSSID,m_MAX_Access_num,lan_ipaddr," + "mac_address,msisdn,LocalDomain,wan_ipaddr,static_wan_ipaddr,ipv6_wan_ipaddr,ipv6_pdp_type,pdp_type,ppp_status,sta_ip_status,rj45_state,ethwan_mode",

                 multi_data: 1

             };

             return valueReq;

@@ -2915,6 +2934,8 @@
                     imei: paramD.imei,

                     signal: convertSignal(paramD),

                     imsi: paramD.imsi || paramD.sim_imsi,

+                    iccid: paramD.ziccid,

+                    cellid: paramD.cell_id,

                     sw_version: paramD.cr_version,

                     hw_version: paramD.hw_version,

                     max_access_num: paramD.MAX_Access_num,

@@ -5475,6 +5496,7 @@
         getLanInfo: getLanInfo,

         setLanInfo: setLanInfo,       

         getApnSettings: getApnSettings,

+        getNetworkStatus: getNetworkStatus,

         deleteApn: deleteApn,

         setDefaultApn: setDefaultApn,

         addOrEditApn: addOrEditApn,

@@ -6135,14 +6157,14 @@
                     minHeight: minHeight

                 };

                 popup(option);

-                

+

                 $('#yesbtn, #nobtn, #okbtn').hide();

-                

+

                 setTimeout(function() {

                     $.modal.close();

                 }, 1000);

             }

-            

+

             setInterval(target.loadFileContent, 1000);

 

             target.pingStart = function () {

@@ -7800,6 +7822,7 @@
         target.hasRj45 = set.RJ45_SUPPORT;

         target.notDataCard = set.PRODUCT_TYPE != 'DATACARD';

         target.hasParentalControl = set.HAS_PARENTAL_CONTROL;

+        target.hasUssd = set.HAS_USSD;

         var wifiInfo = fnc.getWifiBasic();

         if (set.WIFI_SUPPORT_QR_SWITCH) {

             target.showQRCode = set.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;

@@ -7849,6 +7872,8 @@
         target.simSerialNumber = libko.observable('');

         target.imei = libko.observable('');

         target.imsi = libko.observable('');

+        target.iccid = libko.observable('');

+        target.cellid = libko.observable('');

         target.ssid = libko.observable('');

         target.hasWifi = set.HAS_WIFI;

         target.showMultiSsid = libko.observable(set.HAS_MULTI_SSID && wifiInfo.multi_ssid_enable == "1");

@@ -7885,6 +7910,8 @@
             target.simSerialNumber(verifyDeviceInfo(data.simSerialNumber));

             target.imei(verifyDeviceInfo(data.imei));

             target.imsi(verifyDeviceInfo(data.imsi));

+            target.iccid(verifyDeviceInfo(data.iccid));

+            target.cellid(verifyDeviceInfo(data.cellid));

             target.ssid(verifyDeviceInfo(data.ssid));

             target.showMultiSsid(set.HAS_MULTI_SSID && data.multi_ssid_enable == "1");

             return data;

@@ -7899,6 +7926,8 @@
                 simSerialNumber: verifyDeviceInfo(data.simSerialNumber),

                 imei: verifyDeviceInfo(data.imei),

                 imsi: verifyDeviceInfo(data.imsi),

+                iccid : verifyDeviceInfo(data.iccid),

+                cellid: verifyDeviceInfo(data.cellid),

                 signal: signalFormat(data.signal),

                 hasWifi: set.HAS_WIFI,

                 isCPE: set.PRODUCT_TYPE == 'CPE',

diff --git a/lynq/MD310/ap/app/zte_webui/js/ext/menu.js b/lynq/MD310/ap/app/zte_webui/js/ext/menu.js
new file mode 100755
index 0000000..dc3a4e4
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/js/ext/menu.js
@@ -0,0 +1,313 @@
+define(function () {

+    var needLogin = true;

+    var menu = [{

+            hash: '#more',

+            path: 'adm_others',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_url',

+            path: 'firewall_url_filter',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin

+        }, {

+            hash: '#demilitarized_zone',

+            path: 'firewall_dmz_set',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#universal_plug_and_play',

+            path: 'firewall_upnp_set',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#map_port',

+            path: 'firewall_port_map',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#foward_port',

+            path: 'firewall_port_forward',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin

+        }, {

+            hash: '#filter_port',

+            path: 'firewall_port_filter',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_sleep',

+            path: 'wifi_sleep_mode',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pin_mode',

+            path: 'adm_pin',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#pwd_mode',

+            path: 'adm_management',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_mac',

+            path: 'wifi_mac_filter',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_wps',

+            path: 'wifi_wps',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_adv',

+            path: 'wifi_advance',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#conn_device',

+            path: 'wifi_station_info',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_guset',

+            path: 'wifi_guest',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_main',

+            path: 'wifi_main',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#fota',

+            path: 'ota_update',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#dynamic_dns',

+            path: 'ddns',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#cgdcont_set',

+            path: 'network_apn_set',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#network_choose',

+            path: 'network_net_select',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#conn_set',

+            path: 'network_dial_set',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#net_status',

+            path: 'network_info',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#wlan_station',

+            path: 'wifi_ap_station',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#msg_set',

+            path: 'sms_set',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#msg_sim',

+            path: 'sms_sim_messages',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#msg_list',

+            path: 'sms_list',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#flow_ctl',

+            path: 'status_traffic_alert',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_work_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_friend_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_family_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_com_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_all_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#usat',

+            path: 'ussd',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#route_set',

+            path: 'adm_lan',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_main',

+            path: 'firewall',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#local_set',

+            path: 'adm_management',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_basic',

+            path: 'wifi_basic',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#network_set',

+            path: 'network_dial_set_cpe',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#fast_set',

+            path: 'adm_quick_set',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        },

+        {

+            hash: '#child_ctl',

+            path: 'firewall_parental_control',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#normal_set',

+            path: 'adm_quick_set',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#pb_main',

+            path: 'phonebook',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#msg_main',

+            path: 'sms_list',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#main',

+            path: 'main',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#entry',

+            path: 'entry',

+            level: '1',

+            requireLogin: false,

+            checkSIMStatus: false

+        },

+    ];

+

+    return menu;

+});

diff --git a/lynq/MD310/ap/app/zte_webui/js/ext/menu_pppoe.js b/lynq/MD310/ap/app/zte_webui/js/ext/menu_pppoe.js
new file mode 100755
index 0000000..52fddf8
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/js/ext/menu_pppoe.js
@@ -0,0 +1,313 @@
+define(function () {

+    var needLogin = true;

+    var menu = [{

+            hash: '#more',

+            path: 'adm_others',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_url',

+            path: 'firewall_url_filter',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin

+        }, {

+            hash: '#demilitarized_zone',

+            path: 'firewall_dmz_set',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#universal_plug_and_play',

+            path: 'firewall_upnp_set',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#map_port',

+            path: 'firewall_port_map',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#foward_port',

+            path: 'firewall_port_forward',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin

+        }, {

+            hash: '#filter_port',

+            path: 'firewall_port_filter',

+            level: '3',

+            parent: '#filter_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_sleep',

+            path: 'wifi_sleep_mode',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pin_mode',

+            path: 'adm_pin',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#pwd_mode',

+            path: 'adm_management',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_mac',

+            path: 'wifi_mac_filter',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_wps',

+            path: 'wifi_wps',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_adv',

+            path: 'wifi_advance',

+            level: '3',

+            parent: '#wlan_basic',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#conn_device',

+            path: 'wifi_station_info',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_guset',

+            path: 'wifi_guest',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_main',

+            path: 'wifi_main',

+            level: '3',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#fota',

+            path: 'ota_update',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#dynamic_dns',

+            path: 'ddns',

+            level: '3',

+            parent: '#local_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#cgdcont_set',

+            path: 'network_apn_set',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#network_choose',

+            path: 'network_net_select',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#conn_set',

+            path: 'network_dial_set',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#net_status',

+            path: 'network_info',

+            level: '3',

+            parent: '#network_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#wlan_station',

+            path: 'wifi_ap_station',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#msg_set',

+            path: 'sms_set',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#msg_sim',

+            path: 'sms_sim_messages',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#msg_list',

+            path: 'sms_list',

+            level: '2',

+            parent: '#msg_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#flow_ctl',

+            path: 'status_traffic_alert',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_work_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_friend_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_family_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_com_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#pb_all_grp',

+            path: 'phonebook',

+            level: '2',

+            parent: '#pb_main',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#usat',

+            path: 'ussd',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#route_set',

+            path: 'adm_lan',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#filter_main',

+            path: 'firewall',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#local_set',

+            path: 'adm_management',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#wlan_basic',

+            path: 'wifi_basic',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#network_set',

+            path: 'network_dial_set_cpe',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#fast_set',

+            path: 'adm_quick_set',

+            level: '2',

+            parent: '#normal_set',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        },

+        {

+            hash: '#child_ctl',

+            path: 'firewall_parental_control',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#normal_set',

+            path: 'adm_quick_set',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: true

+        }, {

+            hash: '#pb_main',

+            path: 'phonebook',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#msg_main',

+            path: 'sms_list',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#main',

+            path: 'main',

+            level: '1',

+            requireLogin: needLogin,

+            checkSIMStatus: false

+        }, {

+            hash: '#entry',

+            path: 'entry',

+            level: '1',

+            requireLogin: false,

+            checkSIMStatus: false

+        },

+    ];

+

+    return menu;

+});

diff --git a/lynq/MD310/ap/app/zte_webui/js/ext/set_aic8800.js b/lynq/MD310/ap/app/zte_webui/js/ext/set_aic8800.js
index 2e7c8b3..efe0b8a 100755
--- a/lynq/MD310/ap/app/zte_webui/js/ext/set_aic8800.js
+++ b/lynq/MD310/ap/app/zte_webui/js/ext/set_aic8800.js
@@ -17,13 +17,13 @@
             name : '802.11 b/g/n/ax',

             value : '6'

         } ],

-        WIFI_SUPPORT_QR_CODE: false,

-        HAS_PHONEBOOK: true,

+        WIFI_SUPPORT_QR_CODE: true,

+        HAS_PHONEBOOK: false,

         HAS_BATTERY: true, //ÊÇ·ñÓÐµç³Ø

-		FAST_BOOT_SUPPORT: true, //ÊÇ·ñÖ§³Ö¿ìËÙ¿ª»ú

+		FAST_BOOT_SUPPORT: false, //ÊÇ·ñÖ§³Ö¿ìËÙ¿ª»ú

         TURN_OFF_SUPPORT: true, //ÊÇ·ñÖ§³Ö¹Ø»ú

 		WIFI_SLEEP_SUPPORT: true, // ÊÇ·ñÖ§³ÖwifiÐÝÃß

-        HAS_USSD: false, // ÊÇ·ñÖ§³ÖUSSD

+        HAS_USSD: true, // ÊÇ·ñÖ§³ÖUSSD

 	HAS_URL: true, // 是否支持URL过滤

         //station¼ÓÃÜģʽ

         AUTH_MODES_ALL: [{

@@ -60,9 +60,6 @@
         WIFI_SLEEP_MODES: [{

                 name: 'turn off',

                 value: '1'

-            }, {

-                name: 'sleep',

-                value: '0'

             }

         ]

     };

diff --git a/lynq/MD310/ap/app/zte_webui/js/main.js b/lynq/MD310/ap/app/zte_webui/js/main.js
new file mode 100755
index 0000000..fa447ca
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/js/main.js
@@ -0,0 +1,122 @@
+require.config({

+    shim: {

+        knockoutbase: ['jq_tmpl'],

+        jq_additional: ['jq_validate'],

+        jq_simplemodal: ['3rd/twbs.bootstrap'],

+        jq_translate: ['jq_i18n'],

+    },

+    paths: {

+        base64: '3rd/webtoolkit.base64',

+        echarts: '3rd/apache.echarts',

+        knockout: '3rd/knockout',

+        knockoutbase: '3rd/knockout.base',

+        jq_additional: '3rd/jquery.additional-methods',

+        jq_chosen: '3rd/jquery.chosen',

+        jq_fileinput: '3rd/jquery.fileinput',

+        jq_i18n: '3rd/jquery.i18n',

+        jq_simplemodal: '3rd/jquery.simplemodal',

+        jq_tmpl: '3rd/jquery.tmpl',

+        jq_translate: '3rd/jquery.translate',

+        jq_validate: '3rd/jquery.validate',

+        jquery: '3rd/require-jquery',

+        jqui: '3rd/jqui',

+        text: '3rd/require-text',

+        tmpl: '../subpg',

+        underscore: '3rd/underscore',

+        service: 'com',

+

+        CryptoJS: '3rd/crypto-js',

+

+        menu: 'com',

+        adm_lan: 'com',

+        adm_others: 'com',

+        adm_management: 'com',

+        adm_pin: 'com',

+        adm_quick_set: 'com',

+        main: 'com',

+        language: 'com',

+        entry: 'com',

+        logout: 'com',

+        opmode: 'com',

+        opmode_popup: 'com',

+        router: 'com',

+        statusBar: 'com',

+        status_traffic_alert: 'com',

+        tooltip: 'com',

+

+        phonebook: 'sim_device',

+        sim_abnormal: 'sim_device',

+        ota_update: 'sim_device',

+        sd: 'sim_device',

+        sd_httpshare: 'sim_device',

+        sms_set: 'sim_device',

+        sms_sim_messages: 'sim_device',

+        sms_list: 'sim_device',

+        ussd: 'sim_device',

+        network_apn_set: 'net',

+        network_dial_set: 'net',

+        network_dial_set_cpe: 'net',

+		network_info: 'net',

+        locknet: 'net',

+        network_net_select: 'net',

+        ddns: 'net',

+        firewall: 'net',

+        firewall_dmz_set: 'net',

+        firewall_parental_control: 'net',

+        firewall_port_filter: 'net',

+        firewall_port_forward: 'net',

+        firewall_port_map: 'net',

+        firewall_upnp_set: 'net',

+        firewall_url_filter: 'net',

+        wifi_advance: 'wifi',

+        wifi_ap_station: 'wifi',

+        wifi_guest: 'wifi',

+        wifi_mac_filter: 'wifi',

+        wifi_main: 'wifi',

+        wifi_sleep_mode: 'wifi',

+        wifi_station_info: 'wifi',

+        wifi_wps: 'wifi',

+    },

+

+});

+

+require("set service lib".split(" "),

+    function (set, fnc, util) {

+    function initAndLoad(cfg) {

+        require([cfg.menu, cfg.set], function (params) {

+            require("menu language logout statusBar router entry jq_additional jq_translate jq_simplemodal base64".split(" "),

+                function (menu, language, logout, statusBar, router, entry) {

+                menu.init();

+                language.init();

+                router.init();

+                logout.init();

+                statusBar.init();

+            });

+        });

+    }

+    if (!set.RJ45_SUPPORT) {

+        initAndLoad({

+            set: set.DEVICE + '/set',

+            menu: set.DEVICE + '/menu'

+        });

+    } else {

+        var tmp = "menu";

+        fnc.getOpMode({}, function (mod) {

+            set.blc_wan_mode = mod.blc_wan_mode;

+            switch (mod.blc_wan_mode) {

+            case "AUTO_PPPOE":

+            case "PPPOE":

+                tmp = "menu_pppoe";

+                break;

+            default:

+                tmp = "menu";

+                break;

+            }

+            initAndLoad({

+                set: set.DEVICE + '/set',

+                menu: set.DEVICE + '/' + tmp

+            });

+        });

+    }

+

+});

diff --git a/lynq/MD310/ap/app/zte_webui/js/net.js b/lynq/MD310/ap/app/zte_webui/js/net.js
index 22a9d2b..ac6b5c9 100755
--- a/lynq/MD310/ap/app/zte_webui/js/net.js
+++ b/lynq/MD310/ap/app/zte_webui/js/net.js
@@ -3,7 +3,7 @@
     function (_, $, ko, config, service) {

 

     //system url filter setting VM

-     

+

     function UrlFilterSettingVM() {

         var target = this;

         var urlFltInfo = service.getUrlFilterList();

@@ -28,14 +28,14 @@
         });

 

         target.clear = clearFunc;

-		

+

         target.callback = callbackFunc;

 		//删除规则

-         

+

         target.deleteRule = deleteRuleFunc;

-		

+

         //添加规则

-         

+

         target.addRule = addRuleFunc;

 		function callbackFunc(elem) {

             if (elem.result != "success") {

@@ -47,7 +47,7 @@
                 $("#urlFilters").translate();

             }

 		}

-		

+

 		//添加规则

 		function addRuleFunc() {

             if (target.rules().length >= config.urlFilterMax) {

@@ -84,17 +84,17 @@
                 service.deleteSelectedRules(urlFltParams, target.callback);

             });

         }

-		

+

     }

-	

+

 		function clearFunc() {

             $("#addURLFilter").val("");

         }

-		

+

     //页面初始化

-     

+

     function initialize() {

-       

+

         var vm = new UrlFilterSettingVM();

 		bindContainer(vm);

     }

@@ -127,7 +127,7 @@
     function (_, $, ko, config, service) {

 

     //system upnp setting VM

-     

+

     function UpnpSettingVM() {

         var target = this;

         var upnpInfo = getUpnpSetting();

@@ -149,21 +149,21 @@
 

         }

     }

-	

-		

+

+

     //获取upnp 信息

-     

+

     function getUpnpSetting() {

         return service.getUpnpSetting();

     }

 

     //初始化UpnpSettingVM model

-     

+

     function initialize() {

-        

+

         var vm = new UpnpSettingVM();

 		bindContainer(vm);

-        

+

     }

 	function bindContainer(vm) {

 		var container = $('#container');

@@ -185,7 +185,7 @@
     function (_, $, ko, config, service) {

 

     //system upnp setting VM

-     

+

     function UpnpSettingVM() {

         var target = this;

         var upnpInfo = getUpnpSetting();

@@ -207,21 +207,21 @@
 

         }

     }

-	

-		

+

+

     //获取upnp 信息

-     

+

     function getUpnpSetting() {

         return service.getUpnpSetting();

     }

 

     //初始化UpnpSettingVM model

-     

+

     function initialize() {

-        

+

         var vm = new UpnpSettingVM();

 		bindContainer(vm);

-        

+

     }

 	function bindContainer(vm) {

 		var container = $('#container');

@@ -240,7 +240,7 @@
 });

 

 //端口映射

- 

+

 define("firewall_port_map","underscore jquery knockout set service".split(" "),

     function (_, $, ko, config, service) {

 

@@ -276,7 +276,7 @@
     ];

 

     //prot_map VM

-     

+

     function PortMapVM() {

         var target = this;

         var mapInfo = getPortMap();

@@ -285,11 +285,11 @@
         target.rules = ko.observableArray(mapInfo.portMapRules);

         target.portMapEnable = ko.observable(mapInfo.portMapEnable);

 

-		

+

         target.comment = ko.observable('');

         target.selectedMode = ko.observable('TCP&UDP');

         target.modes = ko.observableArray(protocolModes);

-		

+

         target.destPort = ko.observable('');

         target.destIpAddress = ko.observable('');

         target.sourcePort = ko.observable('');

@@ -305,25 +305,25 @@
         });

 

         //设定,新增,删除回调函数

-         

+

         target.callback = callbackFunc;

-		

+

 		//删除规则

-         

+

         target.deleteMapRules = deleteMapRulesFunc;

-		

+

 		//检查新增规则是否已经存在

-         

+

         target.checkExist = checkExistFunc;

-		

+

         //设定端口映射

-         

+

         target.enablePortMap = enablePortMapFunc;

 

         //保存规则

-         

+

         target.save = saveFunc;

-		        

+

 		//保存规则

 		function saveFunc() {

             if (target.rules().length >= config.portForwardMax) {

@@ -349,7 +349,7 @@
             mapParams.comment = target.comment();

             service.setPortMap(mapParams, target.callback);

         }

-		

+

 		//检查新增规则是否已经存在

 		function checkExistFunc() {

             var newMapRule = {

@@ -375,7 +375,7 @@
             }

             return false;

         }

-		

+

 		//设定端口映射

 		function enablePortMapFunc() {

             showLoading();

@@ -383,7 +383,7 @@
             mapParams.portMapEnable = target.portMapEnable();

             service.enablePortMap(mapParams, target.callback);

         }

-		

+

 		//删除规则

 		function deleteMapRulesFunc() {

             var ids = target.gridTemplate.selectedIds();

@@ -399,7 +399,7 @@
                 service.deleteMapRules(mapParams, target.callback);

             });

         }

-		

+

 		//设定,新增,删除回调函数

 		function callbackFunc(ret) {

             if (ret.result == "success") {

@@ -412,7 +412,7 @@
         }

 

         //情况添加规则输入

-         

+

         function clear() {

             target.sourcePort('');

             target.destIpAddress('');

@@ -423,7 +423,7 @@
     }

 

     //获取port map信息

-     

+

     function getPortMap() {

         return service.getPortMap();

     }

@@ -435,7 +435,7 @@
 

 	}

     //初始化port map view model

-     

+

     function initialize(viewModel) {

         var vm;

         if (viewModel) {

@@ -506,7 +506,7 @@
 });

 

 //端口转发

- 

+

 define("firewall_port_forward","underscore jquery knockout set service".split(" "),

     function (_, $, ko, config, service) {

 

@@ -514,7 +514,7 @@
         return new Option(ele.name, ele.value);

     });

     //列表模板的columns项

-     

+

     var columnsTmpl = [{

             columnType: "checkbox",

             rowText: "index",

@@ -539,30 +539,30 @@
     ];

 

     //prot_forward VM

-     

+

     function PortForwardVM() {

         var target = this;

         var fwdinfo = getPortForward();

 

         target.portForwardEnable = ko.observable(fwdinfo.portForwardEnable);

         target.oriPortForwardEnable = ko.observable(fwdinfo.portForwardEnable);

-		

+

         target.portEnd = ko.observable('');

         target.portStart = ko.observable('');

         target.ipAddress = ko.observable('');

-		

+

         target.comment = ko.observable('');

         target.selectedMode = ko.observable('3');

         target.modes = ko.observableArray(protocolModes);

 

         target.rules = ko.observableArray(fwdinfo.portForwardRules);

-		

+

 		//设定,新增,删除回调函数

-         

+

         target.callback = callbackFunc;

-		

+

         //创建列表模板

-         

+

         target.gridTemplate = new ko.simpleGrid.viewModel({

             data: target.rules(),

             idName: "index",

@@ -572,21 +572,21 @@
         });

 

         //检查新增规则是否已经存在

-         

+

         target.checkExist = checkExistFunc;

-				

+

 		//保存规则

-         

+

         target.save = saveFunc;

-		

+

 		//删除规则

-         

+

         target.deleteForwardRules = deleteForwardRulesFunc;

-		

+

         //设定虚拟服务器

-         

+

         target.enableVirtualServer = enableVirtualServerFunc;

-		

+

 		//设定虚拟服务器

 		function enableVirtualServerFunc() {

             showLoading();

@@ -594,7 +594,7 @@
             fwdParams.portForwardEnable = target.portForwardEnable();

             service.enableVirtualServer(fwdParams, target.callback);

         }

-		

+

 		//删除规则

 		function deleteForwardRulesFunc() {

             var ids = target.gridTemplate.selectedIds();

@@ -610,7 +610,7 @@
                 service.deleteForwardRules(fwdParams, target.callback);

             });

         }

-		

+

 		//保存规则

 		function saveFunc() {

             if (target.rules().length >= config.portForwardMax) {

@@ -643,7 +643,7 @@
             target.selectedMode('TCP&UDP');

             target.comment('');

         }

-		

+

 		//设定,新增,删除回调函数

 		function callbackFunc(ret) {

             if (ret.result == "success") {

@@ -681,13 +681,13 @@
     }

 

     //获取port forward信息

-     

+

     function getPortForward() {

         return service.getPortForward();

     }

 

     //初始化port forward view model

-     

+

     function initialize(viewModel) {

         var vm;

         if (viewModel) {

@@ -704,7 +704,7 @@
 

         vm = new PortForwardVM();

         bindContainer(vm);

-		

+

         fixTableHeight();

         renderCheckbox();

 

@@ -755,14 +755,14 @@
             }

         });

     }

-	

+

 	function bindContainer(vm){

 		var container = $('#container');

         ko.cleanNode(container[0]);

         ko.applyBindings(vm, container[0]);

 

 	}

-	

+

 

     return {

         init: initialize

@@ -827,17 +827,17 @@
         return new Option(elem.name, elem.value);

     });

     //prot_filter VM

-     

+

     function PortFilterVM() {

         var target = this;

         var info = getPortFilter();

-		

+

         target.oriDefaultPolicy = ko.observable(info.defaultPolicy);

         target.defaultPolicy = ko.observable(info.defaultPolicy);

         target.oriPortFilterEnable = ko.observable(info.portFilterEnable);

         target.portFilterEnable = ko.observable(info.portFilterEnable);

         target.rules = ko.observableArray(info.portFilterRules);

-		

+

         target.ipv6Support = ko.observable(config.IPV6_SUPPORT);

         target.comment = ko.observable('');

         target.selectedMode = ko.observable('5');

@@ -856,11 +856,11 @@
         target.ipType = ko.observable('ipv4');

 

         //设定,新增,删除回调函数

-         

+

         target.callback = callbackFunc;

-		

+

         //创建列表模板

-         

+

         target.gridTemplate = new ko.simpleGrid.viewModel({

             data: target.rules(),

             idName: "index",

@@ -869,40 +869,40 @@
             pageSize: 20

         });

         //default policy change handler

-         

+

         target.policyChangeHandler = policyChangeHandlerFunc;

 

         //保存规则

-         

+

         target.save = saveFunc;

-	

+

         //设定过滤基本信息

-         

+

         target.setPortFilterBasic = setPortFilterBasicFunc;

-		

+

 		//清空添加规则输入

-         

+

         target.clear = clearFunc;

 

         //检查新增规则是否已经存在

-         

+

         target.checkExist = checkExistFunc;

 

 		//ip类型变化事件监听

-         

+

         target.ipTypeChangeHandler = ipTypeChangeHandlerFunc;

-		

+

         //协议变化事件监听

-         

+

         target.protocolChangeHandler = protocolChangeHandlerFunc;

 

         //删除规则

-         

+

         target.deleteFilterRules = deleteFilterRulesFunc;

 

         //init to call

         target.policyChangeHandler();

-		

+

 		//设定,新增,删除回调函数

 		function callbackFunc(ret) {

             if (ret.result != "success") {

@@ -919,7 +919,7 @@
             target.portFilterAction(action);

             return true;

         }

-		

+

 		//保存规则

 		function saveFunc() {

             target.sourceIpAddress(target.sourceIpAddress().replace(/\s+/g, ''));

@@ -975,7 +975,7 @@
                     fltParams.destIpAddress = target.destIpv6Address();

                     fltParams.sourceIpAddress = target.sourceIpv6Address();

                 }

-				

+

                 fltParams.ipType = target.ipType();

                 fltParams.comment = target.comment();

                 fltParams.protocol = target.selectedMode();

@@ -987,7 +987,7 @@
                 service.setPortFilter(fltParams, target.callback);

             });

         }

-		

+

 		//设定过滤基本信息

 		function setPortFilterBasicFunc() {

             showLoading();

@@ -1011,7 +1011,7 @@
             target.macAddress('');

             clearValidateMsg();

         }

-		

+

 		//检查新增规则是否已经存在

 		function checkExistFunc() {

             target.macAddress(target.macAddress().toUpperCase());

@@ -1047,7 +1047,7 @@
             }

             return false;

         }

-		

+

 		//协议变化事件监听

 		function protocolChangeHandlerFunc() {

             if (target.selectedMode() == PROTOCOLS.ICMP || target.selectedMode() == PROTOCOLS.NONE) {

@@ -1064,7 +1064,7 @@
             }

             return true;

         }

-		

+

 		//删除规则

 		function deleteFilterRulesFunc() {

             var ids = target.gridTemplate.selectedIds();

@@ -1080,23 +1080,23 @@
                 service.deleteFilterRules(rules, target.callback);

             });

         }

-		

+

     }

 

     //获取port filter信息

-     

+

     function getPortFilter() {

         return service.getPortFilter();

     }

-		

+

 	//ip类型变化事件监听

 	function ipTypeChangeHandlerFunc() {

         clearValidateMsg();

         return true;

     }

-	

+

     //初始化port filter view model

-     

+

     function initialize(viewModel) {

         var vm;

         if (viewModel) {

@@ -1221,7 +1221,7 @@
 });

 

 //家长控制

- 

+

 define("firewall_parental_control","underscore jquery knockout set service".split(" "),

     function (_, $, ko, config, service) {

 

@@ -1232,8 +1232,8 @@
         MANAGE: 1,

         RULE: 2

     };

-	

-	

+

+

     function ParentalControlVM() {

         var target = this;

         var hostNameList = service.getHostNameList({}).devices;

@@ -1247,12 +1247,12 @@
                 return data.mac;

             });

         });

-		

+

         target.currentUserInChildGroup = ko.observable(true);

         //获取儿童组设备列表

-         

+

         target.fetchChildGroupList = fetchChildGroupListFunc;

-		

+

         target.fetchChildGroupList();

 

         target.manageHandler = manageHandlerFunc;

@@ -1262,15 +1262,15 @@
         }

         target.attachedDevices = ko.observable([]);

         //获取已连接设备列表

-         

+

         target.fetchAttachedDevices = fetchAttachedDevicesFunc;

-		

+

 

 		//儿童组设备 标签按钮事件

-         

+

         target.backToMainHandler = backToMainHandlerFunc;

-		

-		

+

+

         ko.computed(function () {

             target.attachedDevices();

             target.childGroupList();

@@ -1279,9 +1279,9 @@
             notify: 'always',

             throttle: 300

         });

-        

+

         //添加至儿童组

-         

+

         function addChildGroupFun(flag, eleData) {

             showLoading();

             service.addChildGroup(eleData, function (data) {

@@ -1299,41 +1299,41 @@
                 errorOverlay();

             });

         }

-		

+

         //移除按钮事件

-         

+

         target.removeChildGroupHandler = removeChildGroupHandlerFunc;

-		

-		

+

+

         //添加按钮事件

-         

+

         target.addChildGroupHandler = addChildGroupHandlerFunc;

-		

+

 

         target.dealElement = dealElementFunc;

-		

-		

-		

+

+

+

         //取消编辑主机名按钮事件

-         

+

         target.cancelEditHostNameHandler = cancelEditHostNameHandlerFunc;

-		

+

         //主机名编辑保存按钮事件

-         

+

         target.saveHostNameHandler = saveHostNameHandlerFunc;

-		

+

         //主机名编辑按钮事件

-         

+

         target.editHostNameHandler = editHostNameHandlerFunc;

-		

-		

+

+

         target.selectedIds = ko.observableArray([]);

         target.siteList = ko.observable([]);

         /////////////////////////////////////////////////////////////////

         target.disableAdd = ko.computed(function () {

             return target.siteList().length == maxItem;

         });

-        

+

         ko.computed(function () {

             target.siteList();

             target.selectedIds();

@@ -1342,21 +1342,21 @@
             }, 100);

             $("#pc_site_white_list_form").translate();

         });

-		

+

         //网站白名单添加按钮事件

-         

+

         target.openAddSitePopoverHandler = openAddSitePopoverHandlerFunc;

-		

+

         //网站白名单列表选择框点击事件

-         

+

         target.checkboxClickHandler = checkboxClickHandlerFunc;

-		

+

 		//获取网站白名单列表

-         

+

         target.fetchSiteWhiteList = fetchSiteWhiteListFunc;

-		

+

 		//网站白名单删除函数

-         

+

         function removeSiteWhiteItem(ids) {

             showConfirm('confirm_data_delete', function () {

                 showLoading();

@@ -1374,42 +1374,42 @@
             });

         }

 		//网站白名单删除所有按钮事件

-         

+

         target.removeAllWhiteSite = removeAllWhiteSiteFunc;

-		

+

         //网站白名单删除按钮事件

-         

+

         target.removeSelectedWhiteSite = removeSelectedWhiteSiteFunc;

-		

+

         //网站白名单移除按钮事件

-         

+

         target.removeWhiteSite = removeWhiteSiteFunc;

-		

-        

-        

+

+

+

         //网站白名单添加框保存按钮事件

-         

+

         target.saveSiteWhite = saveSiteWhiteFunc;

-		

+

         //////////////////////////////////////////////////////////////////

         target.notSave = ko.observable(false);

         //获取时间限制信息

-         

+

         target.fetchTimeLimited = fetchTimeLimitedFunc;

-		

-        

+

+

         //上网时间设置时间表格事件绑定

-         

+

         target.bindEvent = bindEventFunc;

-		

+

 		//上网时间设置保存按钮事件

-         

+

         target.saveTimeLimitedHandler = saveTimeLimitedHandlerFunc;

-		

+

         //////////////////////////////////////////////////////////////////

         var isBinded = false;

         //上网规则标签点击事件

-         

+

         target.openRulePage = openRulePageFunc;

 		function openRulePageFunc() {

             if (target.currentPage() == PAGES.RULE) {

@@ -1430,7 +1430,7 @@
                 hideLoading();

             });

         }

-		

+

 		//获取儿童组设备列表

 		function fetchChildGroupListFunc(cb) {

             service.childGroupList({}, function (data) {

@@ -1446,7 +1446,7 @@
                 }

             });

 		}

-		

+

 		//获取已连接设备列表

 		function fetchAttachedDevicesFunc(cb) {

             target.attachedDevices([]);

@@ -1470,7 +1470,7 @@
                     currDevices = devs;

                 }

             });

-			

+

             //wifi 已连接设备

             service.getCurrentlyAttachedDevicesInfo({}, function (data) {

                 counter++;

@@ -1494,7 +1494,7 @@
 		function backToMainHandlerFunc() {

 			target.currentPage(PAGES.MAIN);

 		}

-		

+

 		//移除按钮事件

 		function removeChildGroupHandlerFunc(ele) {

             showLoading();

@@ -1508,7 +1508,7 @@
                 errorOverlay();

             });

         }

-		

+

 		//添加按钮事件

 		function addChildGroupHandlerFunc(data) {

             var uMacAddr = service.getCurretnMAC();

@@ -1520,12 +1520,12 @@
                 })

             }

         }

-		

+

 		//取消编辑主机名按钮事件

 		function cancelEditHostNameHandlerFunc(eleData) {

             target.dealElement(false, eleData.idx);

         }

-		

+

 		//主机名编辑保存按钮事件

 		function saveHostNameHandlerFunc(ele) {

             var $hostInput = $("#hostname_input_" + ele.idx);

@@ -1556,7 +1556,7 @@
                 errorOverlay();

             });

         }

-		

+

 		//主机名编辑按钮事件

 		function editHostNameHandlerFunc(ele) {

             $("#hostname_input_" + ele.idx).val(ele.hostname);

@@ -1573,7 +1573,7 @@
                 validation: addValidation

             });

         }

-		

+

 		//网站白名单列表选择框点击事件

 		function checkboxClickHandlerFunc(eleData, evt) {

             addTimeout(function () {

@@ -1591,7 +1591,7 @@
                 _.isFunction(cb) && cb.apply(this);

             });

         }

-		

+

 		//网站白名单删除所有按钮事件

 		function removeAllWhiteSiteFunc() {

             removeSiteWhiteItem(getAllCheckboxValues());

@@ -1604,7 +1604,7 @@
 		function removeWhiteSiteFunc(ele, evt) {

             removeSiteWhiteItem([ele.id]);

         }

-		

+

 		//网站白名单添加框保存按钮事件

 		function saveSiteWhiteFunc(name, site) {

             popover.hide();

@@ -1636,7 +1636,7 @@
                 });

             });

         }

-		

+

 		//上网时间设置时间表格事件绑定

 		function bindEventFunc() {

             $("td:not('.col-head')", "#pc_time_limited_tbody").addClass('cursorhand').die().click(function () {

@@ -1660,7 +1660,7 @@
                 $this.removeClass('time_td_hover');

             });

         }

-		

+

 		//上网时间设置保存按钮事件

 		function saveTimeLimitedHandlerFunc() {

             showLoading();

@@ -1675,9 +1675,9 @@
                 errorOverlay();

             });

         }

-		

+

     }

-	

+

 		function dealElementFunc(flag, idx) {

             if (flag == false) {

                 $("#edit_btn_" + idx + ",#hostname_txt_" + idx).show();

@@ -1716,16 +1716,16 @@
         return selectedValues;

     }

     //获取列表中被选中项的value值

-     

+

     function getSelectedValues() {

         return getCheckboxValues(true);

     }

     function getAllCheckboxValues() {

         return getCheckboxValues(false);

     }

-    

+

     //增加网站白名单表单提交函数绑定和校验规则设置

-     

+

     function addValidation() {

         $('#whiteSiteAddForm').validate({

             submitHandler: function () {

@@ -1739,7 +1739,7 @@
             }

         });

     }

-	

+

     function getSavedData(timeDatas) {

         var ret = '';

         for (var ki in timeDatas) {

@@ -1755,7 +1755,7 @@
         return ret.substring(0, ret.length - 1);

     }

     //获取时间表格选中的时间

-     

+

     function getSelectedTds() {

         var defaultValue = {

             '0': [],

@@ -1783,7 +1783,7 @@
         }

     }

     //初始化时间表格

-     

+

     function initTableData() {

         $("tr", "#pc_time_limited_tbody").each(function (idx, n) {

             var $tr = $(n);

@@ -1808,11 +1808,11 @@
         pcVm.notSave(false);

     }

 

-    

+

     //页面初始化

-     

+

     function initialize() {

-       

+

         pcVm = new ParentalControlVM();

 		bindContainer(pcVm);

     }

@@ -1832,7 +1832,7 @@
     function ( _, $, ko, config, service) {

 

     //system dmz setting VM

-     

+

     function DmzSettingVM() {

         var target = this;

         var dmzInfo = getDmzSetting();

@@ -1842,9 +1842,9 @@
 

         target.clear = clearFunc;

         //应用按钮事件

-         

+

         target.save = saveFunc;

-		

+

 		function saveFunc() {

 			showLoading();

 			var params = {};

@@ -1859,24 +1859,24 @@
 				}

 			});

 		}

-		

+

     }

-	

+

 	function clearFunc() {

 		initialize();

     }

-	

-	

+

+

     //获取dmz 信息

-     

+

     function getDmzSetting() {

         return service.getDmzSetting();

     }

 

     //初始化DmzSettingVM model

-     

+

     function initialize() {

-        

+

         var dmzVm = new DmzSettingVM();

         bindContainer(dmzVm);

     }

@@ -2114,7 +2114,7 @@
 

 

 //选网模块

- 

+

 define("network_net_select","underscore jquery knockout set service".split(" "),

     function (_, $, ko, config, service) {

 

@@ -2123,7 +2123,7 @@
     });

 

     //选网功能view model

-     

+

     function NetSelectVM() {

         var target = this;

 

@@ -2135,9 +2135,9 @@
         target.selectMode = ko.observable();

 

 		target.networkText = networkTextFunc;

-		

+

 		target.networkStatusId = networkStatusIdFunc;

-		

+

         target.networkStatus = networkStatusFunc;

 

         target.subnetworkType = subnetworkTypeFunc;

@@ -2152,17 +2152,17 @@
 

         target.subnetTypeId = subnetTypeIdFunc;

        //手动搜网.

-         

+

         target.search = searchFunc;

 

         //自动选网时设置网络模式.

-         

+

         target.save = saveFunc;

 

         target.checkEnable = checkEnableFunc;

 

         //注册选择的网络.

-         

+

         target.register = registerFunc;

 

         //init data

@@ -2175,7 +2175,7 @@
         }

 

         target.selectedType(info.net_select);

-		

+

 		//注册选择的网络.

 		function registerFunc() {

             showLoading('registering_net');

@@ -2191,7 +2191,7 @@
                 }

             });

         }

-		

+

 		function checkEnableFunc() {

             var status = service.getStatusInfo();

             if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {

@@ -2200,7 +2200,7 @@
                 target.enableFlag(true);

             }

         }

-		

+

 		//自动选网时设置网络模式.

 		function saveFunc() {

             showLoading();

@@ -2217,7 +2217,7 @@
                 }

             });

         }

-		

+

 		//手动搜网.

 		function searchFunc() {

             showLoading('searching_net');

@@ -2237,15 +2237,15 @@
                 }

             });

         }

-		

+

 		function subnetTypeIdFunc(data) {

             return getSubNetworkTypeTog(data.nRat, data.SubAct);

         }

-		

+

 		function networkTypeIdFunc(data) {

             return getNetworkType(data.nRat);

         }

-		

+

 		function networkValueFunc(data) {

             var result = [];

             result.push(data.strNumeric); //strNumeric

@@ -2253,31 +2253,31 @@
             result.push(data.SubAct);

             return result.join(',');

         }

-		

+

 		function operatorNameFunc(data) {

             return data.strShortName;

         }

-		

+

 		function networkTypeFunc(data) {

             var result = getNetworkType(data.nRat);

             if (result == "auto")

                 result = $.i18n.prop("auto");

             return result;

         }

-		

+

 		function subnetworkTypeFunc(data) {

             var result = getSubNetworkTypeTog(data.nRat, data.SubAct);

             return result;

         }

-		

+

 		function networkStatusFunc(data) {

             return $.i18n.prop(getNetworkStatusTog(data.nState));

         }

-		

+

 		function networkStatusIdFunc(data) {

             return getNetworkStatusTog(data.nState);

         }

-		

+

 		function networkTextFunc(data) {

             return data.strNumeric;

         }

@@ -2285,13 +2285,13 @@
     }

 

     //获取网络选择信息.

-     

+

     function getNetSelectInfo() {

         return service.getNetSelectInfo();

     }

 

     //搜网结果中的状态转换为对应的语言项.

-     

+

     function getNetworkStatusTog(status) {

         if ("3" == status) {

             return "forbidden";

@@ -2304,7 +2304,7 @@
         }

     }

 	//子网络类型转换.

-     

+

     function getSubNetworkTypeTog(type, subtype) {

         var type_3g = [2, 4, 5, 6, 8];

         if ("1" == subtype) {

@@ -2329,7 +2329,7 @@
         return subtype;

     }

     //网络类型转换.

-     

+

     function getNetworkType(type) {

         if ("7" == type) {

             return "4G";

@@ -2343,14 +2343,14 @@
     }

 

     function bindContainer(vm){

-	

+

         var container = $('#container');

         ko.cleanNode(container[0]);

         ko.applyBindings(vm, container[0]);

 	}

 

     //初始化选网功能view model.

-     

+

     function initialize() {

         var vm = new NetSelectVM();

 		bindContainer(vm);

@@ -2388,6 +2388,7 @@
         target.hasSms = config.HAS_SMS;

         target.hasPhonebook = config.HAS_PHONEBOOK;

         target.isSupportSD = config.SD_CARD_SUPPORT;

+        target.hasUssd = config.HAS_USSD;

         if (config.WIFI_SUPPORT_QR_SWITCH == false) {

             target.showQRCode = config.WIFI_SUPPORT_QR_CODE;

         } else {

@@ -2414,7 +2415,7 @@
 

         //显示工作模式设置窗口

         target.showOpModeWindow = showOpModeWindowFunc;

-		

+

         target.isLoggedIn = ko.observable(false);

         target.enableFlag = ko.observable(false);

         //解锁

@@ -2422,7 +2423,7 @@
 

         //更新工作模式状态

         target.refreshOpmodeInfo = refreshOpmodeInfoFunc;

-		

+

         //定时检查工作模式状态

         if (target.hasRj45) {

             target.refreshOpmodeInfo();

@@ -2430,7 +2431,7 @@
                 target.refreshOpmodeInfo();

             }, 1000);

         }

-		

+

 		//更新工作模式状态

 		function refreshOpmodeInfoFunc() {

             var obj = service.getStatusInfo();

@@ -2467,7 +2468,7 @@
             }

             $("#opmode").attr("data-trans", currMode).text($.i18n.prop(currMode));

         }

-		

+

 		//解锁

 		function unlockFunc() {

             showLoading();

@@ -2491,7 +2492,7 @@
                 }

             })

         }

-		

+

 		//显示工作模式设置窗口

 		function showOpModeWindowFunc() {

             showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {});

@@ -2504,28 +2505,28 @@
 });

 

 // RJ45联网设置模块

- 

+

 define("network_dial_set_cpe","underscore jquery knockout set service".split(" "),

 function(_, $, ko, config, service) {

 	var dialActions = _.map(config.dialActions, function(elem){

 		return new Option(elem.name, elem.value);

 	});

-	

+

 	var dialModes = _.map(config.pppoeModes, function(elem) {

 		return new Option(elem.name, elem.value);

 	});

-		

+

     var checkStatusTimer = 0;

     var checkConCounter = 0;

     var timeoutTipShowed = false;

 

     // 联网设置view model.

-     

+

 	function PPPoEViewModel() {

 		var pppObj = service.getPppoeParams();

         var ethParams = pppObj;

 		var target = this;

-		

+

 		target.staticNoticeShow = ko.observable();

 		target.dhcpNoticeShow = ko.observable();

 		target.pppoeNoticeShow = ko.observable();

@@ -2549,7 +2550,7 @@
 		target.enableFlag = ko.observable();

 		target.isShowDisbtn = ko.observable();

 		target.isShowCancelbtn = ko.observable();

-		

+

 		if(pppObj.rj45_state == "dead"){

 			checkRj45DeadTip();

 		} else if(pppObj.rj45_state == "connect"){

@@ -2558,40 +2559,40 @@
 		} else if(pppObj.rj45_state == "working"){

 			setRj45WorkingTip();

 		}

-		

+

 		target.user = ko.observable(pppObj.pppoe_username);

 		target.password = ko.observable(pppObj.pppoe_cc);

 		target.autoUser = ko.observable(pppObj.pppoe_username);

 		target.autoPassword = ko.observable(pppObj.pppoe_cc);

 		target.pppMode = ko.observable(pppObj.ethwan_dialmode);

 		initContronler();

-		

+

 

 		//下拉框选择改变下面DIV模块

 		target.changeModeDiv = changeModeDivFunc;

-				

+

 		target.radioHandler = radioHandlerFunc;

-				

+

 		target.primaryDNS = ko.observable(pppObj.static_wan_primary_dns);

 		target.secondaryDNS = ko.observable(pppObj.static_wan_secondary_dns);

 		target.ipAddress = ko.observable(pppObj.static_wan_ipaddr);

 		target.subnetMask = ko.observable(pppObj.static_wan_netmask);

 		target.defaultGateway = ko.observable(pppObj.static_wan_gateway);

-		

+

 		addInterval(function(){

 			ethParams = service.getPppoeParams();

 			pppObj.rj45_state = ethParams.rj45_state;

 			initContronler();

 		}, 1000);

-		

+

         // 取消连接按钮事件.

-         					

+

 		target.cancelConnect = cancelConnectFunc;

-		

+

         // 应用按钮事件.

-         		

+

 		target.save = saveFunc;

-		

+

 		 //密码显示事件

         target.showPasswordHandler = function () {

             var checkbox = $("#showPassword:checked");

@@ -2601,9 +2602,9 @@
                 target.showPassword(false);

             }

         };

-		

+

         // 更新当前界面状态、按钮、提示语等.

-         			

+

 		function initContronler() {	

             checkRj45DeadTip();		

 			if(target.currentMode() == "PPPOE"){

@@ -2662,15 +2663,15 @@
 		    }else {

 				$("#pppoeApply").attr("disabled", false);

             }

-			

+

 			//取消/断开按钮

 			target.isShowDisbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "working");

 			target.isShowCancelbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "connect");

-			

+

 			$("#pppoeApply").translate();

 		}

         // 设置后通过定时检查rj45_state状态,判断连接或断开操作结果.

-         		

+

 	    function setRj45CheckTimer(action){

             checkStatusTimer && window.clearInterval(checkStatusTimer);

             if("connect" != action){				

@@ -2701,7 +2702,7 @@
             }			

         }

         // 设置后通过定时检查rj45_state状态,判断连接操作结果.

-         			

+

         function checkConnectionStatus(){

             if(checkConCounter < 1){

 				checkConCounter++;

@@ -2763,7 +2764,7 @@
 			}

         }

 		// 设置连接成功时提示语状态.

-         		

+

         function setRj45WorkingTip(){

             if(target.currentMode() == ethParams.ethwan_mode){

                 if(target.currentMode() == "AUTO") {

@@ -2785,9 +2786,9 @@
                 }

             }

         }

-		

+

 		// 设置网线断开提示语状态.

-         		

+

         function checkRj45DeadTip(){

             if(pppObj.rj45_state != "dead"){

                 if(target.currentMode() == "AUTO"  && target.autoNotice() == "pppoe_msg") {

@@ -2799,7 +2800,7 @@
                 }else if(target.currentMode() == "DHCP" && target.dhcpNotice() == "pppoe_msg") {

                     target.dhcpNoticeShow(false);

                 }				

-                

+

             } else{

 				target.dhcpNotice("pppoe_msg");

                 target.dhcpNoticeText($.i18n.prop("pppoe_msg"));

@@ -2821,7 +2822,7 @@
             }            

 		}

         // 设置后通过定时检查rj45_state状态,判断断开操作结果.

-         		

+

         function checkDisconnectStatus(){

             if(checkConCounter < 1){

                 checkConCounter++;

@@ -2845,7 +2846,7 @@
                 window.clearInterval(checkStatusTimer);

             }				

         }

-        

+

 		//应用按钮事件.

 		function saveFunc(){

 			target.dhcpNoticeShow(false);

@@ -2895,7 +2896,7 @@
 			requestParams.action_link = "connect";

 			requestParams.dial_mode = target.pppMode();

 			showLoading("waiting");

-			

+

 			service.setPppoeDialMode(requestParams, function(data){

 				if(data.result){

 					target.currentMode($("#pppoe_mode").val());

@@ -2908,9 +2909,9 @@
 					errorOverlay("pppoe_message_send_fail");

                 }

 			});

-			

+

 		}

-		

+

 		//取消连接按钮事件.

 		function cancelConnectFunc(){

 			target.dhcpNoticeShow(false);

@@ -2963,34 +2964,34 @@
 					errorOverlay("pppoe_message_send_fail");

                 }

 			});

-			

+

 		}

-		

+

 		function radioHandlerFunc(){

 			initContronler();

 			return true;

 		}

-		

+

 		function changeModeDivFunc(){

 			initContronler();

 		}

-        

+

     }

 

 	function bindContainer(vm){

 		var container = $('#container');

 		ko.cleanNode(container[0]);

 		ko.applyBindings(vm, container[0]);

-	

+

 	}

     // 联网设置初始化.

-     

+

 	function initialize() {

 		var vm = new PPPoEViewModel();

 		bindContainer(vm);

-		

+

 		$("#pppoeApply").translate();

-		

+

 		$('#pppoeForm').validate({

 			submitHandler : function() {

 				vm.save();

@@ -3017,11 +3018,11 @@
             }

 		});

 	}

-	

-	

+

+

 //from 4.0

     // 有效DNS检查.

-     

+

 function validateDns(dns){

 	if ( "0.0.0.0" == dns || "255.255.255.255" == dns) {

 		return false;

@@ -3029,7 +3030,7 @@
 	return true;

 }

     // 联网设置初始化.

-     

+

 function isStaticIPValid(ip, lanip, lanmask){

 	if(!ip || !lanip || !lanmask){//各参数不能为空

         return false;

@@ -3053,7 +3054,7 @@
 }

 

 // 有效子网掩码验证.

-     

+

 function isNetmaskIPValid(ip) {

 	if (ip == 255 || ip == 254 || ip == 252 || ip == 248

 		|| ip == 240 || ip == 224 || ip == 192 || ip == 128 || ip == 0)

@@ -3066,7 +3067,7 @@
 	}

 }

     // 有效子网掩码检查.

-     

+

 function validateNetmask(netmask) {

 	var array = new Array();

 	array = netmask.split(".");

@@ -3117,21 +3118,21 @@
 	}

 	return true;

 }

-    

+

     // subnetmask_check校验规则

-     

+

 jQuery.validator.addMethod("subnetmask_check", function (value, element, param) {

 	var result = validateNetmask(value);

     return this.optional(element) || result;

 });

     // dns_check校验规则

-     

+

 jQuery.validator.addMethod("dns_check", function (value, element, param) {

 	var result = validateDns(value);

     return this.optional(element) || result;

 });

     // 有效网关检查.

-     

+

 function validateGateway(wanIp, netmaskIp, gatewayIp) {

 	if(myConcat(wanIp,netmaskIp) == myConcat(netmaskIp, gatewayIp)) {

 		return true;

@@ -3140,7 +3141,7 @@
 	}

 }

     // IP和子网掩码转换成数组形式并相与,返回相与后的IP.

-     

+

 function myConcat(ip1,ip2){

 	var result = [];

 	var iplArr = ip1.split(".");

@@ -3151,12 +3152,12 @@
 	return result.join(".");

 }

     // gateway_check校验规则

-     

+

 jQuery.validator.addMethod("gateway_check", function (value, element, param) {

 	var result = validateGateway($('#txtIpAddress').val(), $('#txtSubnetMask').val(), $("#txtDefaultGateway").val());

     return this.optional(element) || result;

 });

-	

+

 	return {

 		init: initialize

 	};

@@ -3176,13 +3177,13 @@
         var originalRoaming = dialMode.isAllowedRoaming;

 

         target.setAllowedRoaming = setAllowedRoamingFunc;

-		

+

 		var checkboxFlag = $(".checkboxToggle");

         target.checkEnable = checkEnableFunc;

-		

+

         //修改联网模式

         target.save = saveFunc;

-		

+

 		function saveFunc() {

             showLoading();

             var connMode = target.selectMode();

@@ -3203,7 +3204,7 @@
                 }

             });

         }

-		

+

 		function setAllowedRoamingFunc() {

             if(!$("#roamBtn").hasClass("disable")){

                 var checkbox = $("#isAllowedRoaming:checked");

@@ -3214,7 +3215,7 @@
                 }

             }

         }

-		

+

 		function checkEnableFunc() {

             var status = service.getStatusInfo();

 

@@ -3234,18 +3235,18 @@
 	function initialize() {

 		var vm = new DialVM();

 		bindContainer(vm);

-		

+

         vm.checkEnable();

         addInterval( vm.checkEnable, 1000);

 	}

-	

+

 	function bindContainer(vm){

 		var container = $('#container');

 		ko.cleanNode(container[0]);

 		ko.applyBindings(vm, container[0]);

-	

+

 	}

-	

+

 	return {

 		init: initialize

 	};

@@ -3255,7 +3256,7 @@
     function (_, $, ko, config, service) {

 

     //获取鉴权方式

-     

+

     function getAuthModes() {

         return _.map(config.APN_AUTH_MODES, function (item) {

             return new Option(item.name, item.value);

@@ -3277,7 +3278,7 @@
     }

 

     //获取apn相关信息

-     

+

     function getApnSet() {

         var apnInfo = service.getApnSettings();

         apnInfo.ipv6ApnConfigs = getApnConfigs(apnInfo.ipv6APNs, true);

@@ -3290,7 +3291,7 @@
     var autoApnConfigs = {};

 

     //解析自动apn信息

-     

+

     function getAutoApnsConfig(autoApnV4, autoApnV6) {

         var autoApnsV4 = [];

         var autoApnsV6 = [];

@@ -3316,7 +3317,7 @@
         return dealAutoApnsV4V6(autoApnsV4, autoApnsV6);

     }

     //解析apn信息

-     

+

     function getApnConfigs(apnsStr, isIpv6) {

         var apnCfgs = [];

         var theApnConfigs = {};

@@ -3339,7 +3340,7 @@
     }

 

 	//解析单条apn信息

-     

+

     function parseApnItem(apnStr, isIpv6) {

         var apnItem = {};

         var items = apnStr.split("($)");

@@ -3367,7 +3368,7 @@
         return apnItem;

     }

     //合并V4\V6自动apn信息

-     

+

     function dealAutoApnsV4V6(v4, v6) {

         autoApnConfigs = {};

         var autoApns = [];

@@ -3396,7 +3397,7 @@
     }

 

     //APNViewModel

-     

+

     function APNViewModel() {

         var target = this;

         var apnSettings = getApnSet();

@@ -3409,7 +3410,7 @@
         target.autoProfiles = ko.observableArray(getProfileOptions(apnSettings.autoApnConfigs));

         target.profiles = ko.observableArray(getProfileOptions(apnSettings.apnConfigs));

         target.wanDial = ko.observable(apnSettings.wanDial);

-		

+

         target.showApnDns = ko.observable(config.SHOW_APN_DNS);

         target.index = ko.observable(apnSettings.currIndex);

         target.supportIPv6 = ko.observable(config.IPV6_SUPPORT);

@@ -3422,7 +3423,7 @@
         target.authModes = ko.observableArray(getAuthModes());

         target.username = ko.observable(apnSettings.username);

         target.password = ko.observable(apnSettings.password);

-		

+

         target.pdpTypes = ko.observableArray(getApnPdpTypes());

         target.selectedPdpType = ko.observable(apnSettings.pdpType);

         target.selectedPdpTypeTmp = ko.observable(apnSettings.pdpType); //the PdpType select's value before chang

@@ -3452,12 +3453,12 @@
             $("#apn_ipv4_apn").removeClass("required");

             $("#apn_ipv6_apn").removeClass("required");

         }

-		

+

         target.disableProfile = ko.observable(false); //表示处于新增页面

         target.addApnHide = ko.observable(true);

         target.defaultCfg = ko.observable(true); //当前选中的是默认APN

         target.predeterminedCfg = ko.observable(true); //当前选中的是预置的APN

-		

+

         target.selectedAuthentication = ko.observable(apnSettings.authMode);

         target.selectedAuthenticationV6 = ko.observable(apnSettings.authModeV6);

 

@@ -3469,7 +3470,7 @@
         target.transAuthV6 = ko.observable('apn_authentication');

         target.transUserNameV6 = ko.observable('apn_user_name');

         target.transPasswordV6 = ko.observable('apn_password');

-		

+

         target.transApn = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_ipv4_apn' : 'apn');

         target.transDnsMode = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns_mode_ipv4' : 'apn_dns_mode');

         target.transDns1 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns1_ipv4' : 'apn_dns1');

@@ -3528,7 +3529,7 @@
         target.autoApnChecked = ko.computed(function () {

             return target.apnMode() == "auto";

         });

-		

+

         target.hasCapacity = ko.computed(function () {

             if (target.profiles().length < config.maxApnNumber) {

                 return true;

@@ -3540,7 +3541,7 @@
         target.showDnsV6 = ko.computed(function () {

             return target.dnsModeV6() == "manual";

         });

-		

+

         target.showDns = ko.computed(function () {

             return target.dnsMode() == "manual";

         });

@@ -3562,7 +3563,7 @@
 

         var data = service.getDeviceInfo();

         target.pdpTypeChangeAlert = pdpTypeChangeAlertFunc;

-		

+

 

         target.showAutoApnDetail = ko.computed(function () {

             if (target.apnMode() != "auto") {

@@ -3581,21 +3582,21 @@
             }

         };

 		//auto apn profile change 事件处理

-         

+

         target.autoProfileChangeHandler = autoProfileChangeHandlerFunc;

-		

-		

+

+

         //profile change 事件处理

-         

+

         target.profileChangeHandler = profileChangeHandlerFunc;

-		

-        

+

+

         //切换profile时重置下面的显示项

         target.setUIData = setUIDataFunc;

-		

+

 

         //设置默认apn状态

-         

+

         function checkDefaultProfileStatus() {

             var index = getApnIndex();

             //默认apn不允许编辑

@@ -3622,16 +3623,16 @@
 

 

         //设置为默认apn

-         

-        target.setDefaultAct = setDefaultActFunc;

-		

 

-		

+        target.setDefaultAct = setDefaultActFunc;

+

+

+

         //APN mode change 事件处理

-         

+

         target.apnModeChangeHandler = apnModeChangeHandlerFunc;

-		

-		

+

+

         function doSetDefaultAct() {

             var index = 0;

             if (target.apnMode() != 'auto') {

@@ -3673,10 +3674,10 @@
         }

 

         target.getSelectedManualProfile = getSelectedManualProfileFunc;

-		

+

 

         //获取自动apn索引

-         

+

         function getAutoApnIndex() {

             var configs = $("#autoProfile option");

             for (var ki = 0; ki < configs.length; ki++) {

@@ -3686,9 +3687,9 @@
             }

             return configs.length - 1;

         }

-		

+

 		//获取apn索引

-         

+

         function getApnIndex() {

             var configs = $("#profile option");

             if (configs.length == 0) {

@@ -3704,11 +3705,11 @@
         }

 

         //保存APN设置信息

-         

+

         target.saveAct = saveActFunc;

-		

+

 		//编辑APN信息

-         

+

         function editApnSetting(preAct) { //默认设置按钮触发为TRUE

             showLoading();

             var apnIndex = getApnIndex();

@@ -3760,9 +3761,9 @@
                 errorOverlay();

             });

         }

-		

+

         //新增APN信息

-         

+

         function addNewApnSetting() {

             showLoading("waiting");

             var optionLen = $("option", "#profile").length;

@@ -3814,19 +3815,19 @@
             });

         }

 

-        

+

 

         var tempApn = {};

 		//删除APN

-         

+

         target.deleteAct = deleteActFunc;

-		

+

 		//取消新增APN

-         

+

         target.cancelAddAct = cancelAddActFunc;

-		

+

         //进入新增APN页面

-         

+

         target.addAct = addActFunc;

 		//进入新增APN页面

 		function addActFunc() {

@@ -3845,7 +3846,7 @@
                 authModeV6: target.selectedAuthenticationV6(),

                 usernameV6: target.usernameV6(),

                 passwordV6: target.passwordV6(),

-				

+

                 wanApn: target.apn(),

                 dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',

                 dns1: config.SHOW_APN_DNS ? target.dns1() : '',

@@ -3866,7 +3867,7 @@
             target.selectedAuthenticationV6("none");

             target.usernameV6("");

             target.passwordV6("");

-			

+

             target.apn("");

             target.dnsMode("auto");

             target.dns1("");

@@ -3876,7 +3877,7 @@
             target.password("");

 

         }

-		

+

 		//取消新增APN

 		function cancelAddActFunc() {

             clearValidateMsg('#apn_setting_form');

@@ -3894,7 +3895,7 @@
             target.selectedAuthenticationV6(tempApn.authModeV6);

             target.usernameV6(tempApn.usernameV6);

             target.passwordV6(tempApn.passwordV6);

-			

+

             target.apn(tempApn.wanApn);

             target.dnsMode(tempApn.dnsMode);

             target.dns1(tempApn.dns1);

@@ -3904,7 +3905,7 @@
             target.password(tempApn.password);

 

         }

-		

+

 		//删除APN

 		function deleteActFunc() {

             if (!target.selectedProfile()) {

@@ -3938,7 +3939,7 @@
                 });

             });

         }

-		

+

 		//保存APN设置信息

 		function saveActFunc() {

             if (!$('#apn_setting_form').valid()) {

@@ -3972,7 +3973,7 @@
                     editApnSetting(false);

                 }

             } else {

-				

+

                 if ($("#profile option").length >= config.maxApnNumber) {

                     showInfo({

                         msg: "apn_profile_full",

@@ -3989,7 +3990,7 @@
                     //showConfirm("apn_alert", function () {

                     addNewApnSetting();

                     //});

-                    

+

                 } else {

 					showConfirm("apn_diconneted_network_confirm", function () {

                         showLoading('disconnecting');

@@ -4005,7 +4006,7 @@
                 }

             }

         }

-		

+

 		function getSelectedManualProfileFunc() {

             var cfg = {};

             var profileVal = $("#profile").val();

@@ -4027,7 +4028,7 @@
             }

             return cfg;

         }

-		

+

 		//APN mode change 事件处理

 		function apnModeChangeHandlerFunc(data, event) {

             if (target.apnMode() != 'auto') {

@@ -4039,7 +4040,7 @@
             }

             return true;

         }

-		

+

 		//设置为默认apn

 		function setDefaultActFunc() {

             if (!target.selectedProfile()) {

@@ -4092,7 +4093,7 @@
                 }

             }

         }

-		

+

 		//切换profile时重置下面的显示项

 		function setUIDataFunc(data) {

             clearValidateMsg('#apn_setting_form');

@@ -4119,7 +4120,7 @@
             target.passwordV6(data.passwordV6);

             target.selectedAuthenticationV6(data.authModeV6 || 'none');

         }

-		

+

 		//profile change 事件处理

 		function profileChangeHandlerFunc(data, event) {

             target.pdpTypeNote(true);

@@ -4131,7 +4132,7 @@
             checkDefaultProfileStatus();

             return true;

         }

-		

+

 		//auto apn profile change 事件处理

 		function autoProfileChangeHandlerFunc(data, event) {

             if (target.apnMode() != 'auto') {

@@ -4142,7 +4143,7 @@
             checkDefaultProfileStatus();

             return true;

         }

-		

+

 		function pdpTypeChangeAlertFunc() {

             if (target.pdpTypeNote()) {

                 showAlert({

@@ -4173,12 +4174,12 @@
             }

             target.selectedPdpTypeTmp(target.selectedPdpType());

         }

-       

+

 

     }

 

     //是否已联网

-     

+

     function isConnectedNetWork() {

         var info = service.getConnectionInfo();

         return info.connectStatus == "ppp_connected";

@@ -4195,10 +4196,10 @@
         ko.applyBindings(vm, container[0]);

 	}

     //初始化ViewModel

-     

+

     function initialize(formInit) {

         initVar();

-        

+

         var vm = new APNViewModel();

 		bindContainer(vm);

 

@@ -4230,4 +4231,31 @@
     return {

         init: initialize

     };

-});
\ No newline at end of file
+});

+define("network_info","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+        function NetInfoVM() {

+            var target = this;

+            var network_status = service.getNetworkStatus();

+

+            target.pci = ko.observable(network_status.pci);

+            target.sinr = ko.observable(network_status.sinr);

+            target.rsrp = ko.observable(network_status.rsrp);

+            target.rsrq = ko.observable(network_status.rsrq);

+            target.plmn = ko.observable(network_status.plmn);

+            target.cellid = ko.observable(network_status.cellid);

+            target.band = ko.observable(network_status.band);

+        }

+

+        function initialize() {

+            var container = $('#container');

+            ko.cleanNode(container[0]);

+            var imVm = new NetInfoVM();

+            ko.applyBindings(imVm, container[0]);

+        }

+

+        return {

+            init: initialize

+        };

+});

diff --git a/lynq/MD310/ap/app/zte_webui/js/sim_device.js b/lynq/MD310/ap/app/zte_webui/js/sim_device.js
index 633e2e6..3701db6 100755
--- a/lynq/MD310/ap/app/zte_webui/js/sim_device.js
+++ b/lynq/MD310/ap/app/zte_webui/js/sim_device.js
@@ -38,6 +38,7 @@
         target.hasSms = config.HAS_SMS;

         target.hasPhonebook = config.HAS_PHONEBOOK;

         target.isSupportSD = config.SD_CARD_SUPPORT;

+        target.hasUssd = config.HAS_USSD;

         if (config.WIFI_SUPPORT_QR_SWITCH) {

             var wifiInfo = service.getWifiBasic();

             target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/adm_lan.html b/lynq/MD310/ap/app/zte_webui/subpg/adm_lan.html
new file mode 100755
index 0000000..c3d8912
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/adm_lan.html
@@ -0,0 +1,106 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='advanced_settings'></h1>

+            </div>

+        </div>

+    </div>

+<div class="row">

+<div class="col-xs-2">

+    <div class="nav_right">

+		<ul>

+			<li><a href="#wlan_sleep" data-trans="sleep_mode"></a></li>

+			<li class="active"><a href="#route_set" data-trans="router_setting"></a></li>

+			<li><a href="#filter_main" data-trans="firewall"></a></li>

+			<li data-bind="visible:hasUpdateCheck"><a href="#fota" data-trans="update_settings"></a></li>

+			<!-- <li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li> -->

+			<li data-bind="visible:hasDdns"><a href="#dynamic_dns" data-trans="DDNS"></a></li>

+			<li><a href="#more" data-trans="others"></a></li>

+		</ul>

+	</div>

+</div>

+

+<div class="col-xs-10">

+<form id="frmLan" role="form">

+    <h3 class="form-title" data-trans="router_setting"></h3>

+    <div class="form-body margin-top-20">

+        <div class="content">

+            <div class="row form-group">

+                <label data-trans="ip_address" for="txtIpAddress" class="col-xs-4 side-right"></label>

+                <div class="col-xs-3">

+                    <input id="txtIpAddress" name="txtIpAddress" data-bind="value: ipAddress" maxlength="15" type="text" class="required form-control"/>

+                </div>

+            </div>

+            <div class="row form-group">

+                <label data-trans="subnet_mask" for="txtSubnetMask" class="col-xs-4 side-right"></label>

+                <div class="col-xs-3">

+                <input id="txtSubnetMask" name="txtSubnetMask" data-bind="value: subnetMask" maxlength="15"  type="text" class="required form-control"/>

+                </div>

+            </div>

+            <div class="row form-group" data-bind="visible: showMacAddress() && hasWifi()">

+                <label data-trans="mac_address" class="col-xs-4 side-right"></label>

+                <div class="col-xs-3">

+                <label id="txtMacAddress" data-bind="text: macAddress" class="label-content"></label>

+                </div>

+            </div>

+            <div class="row form-group">

+                <label class="col-xs-4 side-right" data-trans="dhcp_server"></label>

+                <div class="col-xs-8">

+                    <div class="row">

+                        <div class="col-xs-3">

+                            <input id="dhcpEnable" name="dhcpServer" data-bind="checked: dhcpServer,click: dhcpServerHandler" type="radio" value="1"/>

+                            <label data-trans="enable" for="dhcpEnable"></label>

+                        </div>

+                        <div class="col-xs-3">

+                            <input id="dhcpDisable" name="dhcpServer" data-bind="checked: dhcpServer,click: dhcpServerHandler" type="radio" value="0"/>

+                            <label data-trans="disable" for="dhcpDisable"></label>

+                        </div>

+                    </div>

+                </div>

+            </div>

+            <div data-bind='visible: dhcpServer() == "1"'>

+                <div class="row form-group">

+                    <label data-trans='dhcp_ip_pool' for="txtDhcpIpPoolStart" class="col-xs-4 side-right"></label>

+                    <div class="col-xs-8 form-inline">

+                        <input id='txtDhcpIpPoolStart' name="txtDhcpIpPoolStart" data-bind="value: dhcpStart" maxlength="15" type="text" class="required rangeInput form-control"/>

+                        -

+                        <input id='txtDhcpIpPoolEnd' name="txtDhcpIpPoolEnd" data-bind="value: dhcpEnd" maxlength="15" type="text" class="required rangeInput form-control"/>

+                    </div>

+                </div>

+                <div class="row form-group">

+                    <label for="txtDhcpLease" data-trans="dhcp_lease" class="col-xs-4 side-right"></label>

+                    <div class="col-xs-3">

+                        <div class="input-group">

+                            <input id="txtDhcpLease" name="txtDhcpLease" data-bind="value: dhcpLease" maxlength="5"  type="text" class="required form-control"/>

+                            <div data-trans="hours" id="leaseLabel" class="input-group-addon"></div>

+

+                        </div>

+                        <div id="errorHolder"></div>

+                    </div>

+                </div>

+            </div>

+        </div>

+        <div class="form-buttons">

+            <input type="submit" formmethod="post" data-trans="apply" class="btn btn-primary"/>

+        </div>

+        <div class="form-note">

+            <div class="notes-title">&nbsp;</div>

+            <ul class="notes-content">

+                <li data-trans="lan_note_ip_address"></li>

+                <li data-trans="lan_note_subnet_mask"></li>

+                <li data-trans="lan_note_dhcp_server_enable"></li>

+                <li data-trans="lan_note_dhcp_server_disable"></li>

+                <li data-trans="lan_note_dhcp_ip_pool"></li>

+                <li data-trans="lan_note_dhcp_lease_time"></li>

+            </ul></div>

+    </div>

+</form>

+    </div>

+    </div>

+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/adm_others.html b/lynq/MD310/ap/app/zte_webui/subpg/adm_others.html
index 15c1e11..d1a22e6 100755
--- a/lynq/MD310/ap/app/zte_webui/subpg/adm_others.html
+++ b/lynq/MD310/ap/app/zte_webui/subpg/adm_others.html
@@ -19,7 +19,7 @@
 				<li><a href="#route_set" data-trans="router_setting"></a></li>

 				<li><a href="#filter_main" data-trans="firewall"></a></li>

 				<li data-bind="visible:hasUpdateCheck"><a href="#fota" data-trans="update_settings"></a></li>

-				<li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li>

+				<!-- <li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li> -->

 				<li data-bind="visible:hasDdns"><a href="#dynamic_dns" data-trans="DDNS"></a></li>      

 				<li class="active"><a href="#more" data-trans="others"></a></li>

 			</ul>

@@ -87,7 +87,7 @@
                 </div>

             </div>

         </form>

-		

+

         <form data-bind="visible: fastbootSupport">

             <div class="form-body">

                 <h3 class="form-title" data-trans="fastboot_setting"></h3>

@@ -117,7 +117,7 @@
             </div>

         </form>

 

-		

+

 		<form id="sntpForm" data-bind="visible: SNTPSupport">

 			<div class="form-body">

 				<h3 class="form-title">SNTP</h3>

@@ -139,20 +139,20 @@
 					<div id="manualSetTime" data-bind="visible: isManualSetTime">

 						<div class="row form-group">

 							<label class="col-xs-4 side-right" data-trans='time_set_time_manual'></label>							

-						

+

 							<div class="col-xs-8">

 									<select id="manualYear" data-bind="options: years, value: currentYear, optionsText: 'text', optionsValue: 'value', event:{change: initDateList}" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px"  class="form-control"></select> 

 								    <label data-trans="year" for="manualYear" style="display:inline-block; width:auto; padding-right:0"></label>

-								

+

 								    <select id="manualMonth" data-bind="options: months, value: currentMonth, optionsText: 'text', optionsValue: 'value', event: {change: initDateList}" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

 								    <label data-trans="month" for="manualMonth" style="display:inline-block; width:auto; padding-right:0"></label>

-								

+

 									<select id="manualDate" data-bind="options: dates, value: currentDate, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

 								    <label data-trans="date" for="manualDate" style="display:inline-block; width:auto; padding-right:0"></label>

-								

+

 									<select id="manualHour" data-bind="options: hours, value: currentHour, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

 								    <label data-trans="hour" for="manualHour" style="display:inline-block; width:auto; padding-right:0"></label>

-								

+

 									<select id="manualMinute" data-bind="options: minutes, value: currentMinute, optionsText: 'text', optionsValue: 'value'" style="display:inline-block; width:auto; padding-right:5px; padding-left:5px" class="form-control"></select> 

 									<label data-trans="minute" for="manualMinute" style="display:inline-block; width:auto; padding-right:0"></label>

 							</div>

@@ -192,7 +192,7 @@
 								<select id="time_zone_select" data-bind="options: timeZones, value: currentTimeZone, optionsText: transOption('time_zone'), optionsValue: 'value'" data-transid="time_zone" class="form-control"></select>

 							</div>

 						</div>

-	

+

 					</div>		

 				</div>

 				<div class="form-buttons">

@@ -233,7 +233,7 @@
 			</div>

 		</form>

 		<!-- add by qumengjia for schedule ping diagnostics end -->

-		

+

         <div class="form-body">

             <div class="content margin-top-20 line-height-30">

                 <div class="row">

@@ -246,4 +246,4 @@
         </div>

     </div>

 </div>

-</div>
\ No newline at end of file
+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/firewall.html b/lynq/MD310/ap/app/zte_webui/subpg/firewall.html
index 51a418d..bf00b0c 100755
--- a/lynq/MD310/ap/app/zte_webui/subpg/firewall.html
+++ b/lynq/MD310/ap/app/zte_webui/subpg/firewall.html
@@ -19,7 +19,7 @@
 					<li><a data-trans="router_setting" href="#route_set"></a></li>

 					<li class="active"><a data-trans="firewall" href="#filter_main"></a></li>

 					<li data-bind="visible:hasUpdateCheck"><a data-trans="update_settings" href="#fota"></a></li>

-					<li data-bind="visible:hasUssd"><a data-trans="USSD" href="#usat"></a></li>

+					<!-- <li data-bind="visible:hasUssd"><a data-trans="USSD" href="#usat"></a></li> -->

 					<li data-bind="visible:hasDdns"><a data-trans="DDNS" href="#dynamic_dns"></a></li>

 					<li><a data-trans="others" href="#more"></a></li>

 				</ul>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/main.html b/lynq/MD310/ap/app/zte_webui/subpg/main.html
new file mode 100755
index 0000000..eb7a57c
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/main.html
@@ -0,0 +1,233 @@
+

+<div class="row margin-top-20">

+<div class="type_items">

+	<ul>

+		<li><a href="#child_ctl" data-bind="visible: hasParentalControl" data-trans="parental_control" class="c0EC6DC"></a></li>

+		<li><a href="#msg_main"  data-bind="visible: hasSms" data-trans="sms" class="cF53A58"></a></li>

+		<li><a href="#usat" data-bind="visible:hasUssd" data-trans="USSD"></a></li>

+		<li><a href="#pb_main" data-bind="visible: hasPhonebook" data-trans="phonebook" class="c00AEFF"></a></li>

+		<li><a href="#sdcard" data-bind="visible: isSupportSD" data-trans="sd" class="c2175FF"></a></li>

+		<li><a data-bind="attr: {href: notDataCard? '#wlan_sleep' : '#demilitarized_zone'}" data-trans="advanced_settings" class="cFFCE2B"></a></li>

+		<li><a href="#fast_set" data-bind="visible: isSupportQuicksetting()" data-trans="quick_setting" class="cFFCE2B"></a></li>

+	</ul>

+</div>

+</div>

+

+<div class="row margin-top-20" id="home_image">

+

+<div class="row">

+    <div style="position: relative">	

+        <div class="internet_status_container">

+		    <div data-bind=" css: {'item_icon_connect': cStatus()== 1, 'item_icon_disconnect': cStatus() != 1}"></div>

+			<h3 data-trans="net_surfing" class="home_h3"></h3>

+			<div class="net_surfing_list">

+				<ul>

+					<li><a id="h_connect_btn" href="javascript: void(0)" data-bind="visible: canConnect() && isShowHomeConnect(), click: connectHandler , css: {'h_connect_on': cStatus()== 1, 'h_connect_off': cStatus() != 1}" style="display: none;"></a></li>

+					<li><i class="up"></i><span data-bind="text: up_Speed"></span></li>

+					<li><i class="down"></i><span data-bind="text: down_Speed"></span></li>

+					<li><span data-bind="text: connected_Time"></span></li>

+				</ul>

+			</div>

+        </div>

+

+		<div class="network_control_container">

+		    <div class="item_icon"></div>

+			<h3 data-trans="my_router" class="home_h3"></h3>			

+			<!--div id="h_network_type" data-bind="text: networkType, css: {'no-btn': !(canConnect() && isShowHomeConnect())}"></div-->

+			<div class="my_router_list">

+				<ul>

+					<li data-bind="visible: hasRj45"><a id="opmode" data-bind="click: showOpModeWindow, css: {'not-allowed': enableFlag}" href="javascript:void(0)"></a></li>

+					<li><a data-bind="click: showNetworkSettingsWindow" data-trans="settings_internet" href="javascript:void(0)"></a></li>

+					<!--li><div id="h_ssid"></div></li-->

+					<li data-bind="visible: notDataCard"><a data-trans="settings_wireless" href="#wlan_main"></a></li>

+				</ul>

+			</div>

+		</div>

+

+        <!--div id="h_connect_status" data-bind="visible:notDataCard, css: {'h_status_connected': cStatus()== 1, 'h_status_disconnected': cStatus()== 2, 'h_status_connecting': cStatus()== 3, 'h_status_disconnecting': cStatus()== 4, }">

+        </div-->

+

+		<div data-bind="visible: notDataCard" onclick="window.location.hash='#conn_device'" class="connected_devices_container">

+		    <div class="item_icon"></div>

+			<h3 data-trans="station_info" class="home_h3" ></h3>

+            <div style="text-align:center;display:inline" class="margin-top-20">

+				<div id="h_wire_device" data-bind="visible: hasRj45 && isCPE">

+					<span data-bind="text: wireDeviceNum" style="font-size:70px;"><em></em></span><sub data-trans="device_unit" style="font-size: 16px;"></sub>

+					<span data-trans="cable" style="font-size:15px;text-align:center;display:block"></span>

+				</div>

+				<div id="h_wireless_device" style="display-block">

+					<span data-bind="text: wirelessDeviceNum" style="font-size:70px"></span><sub data-trans="device_unit" style="font-size: 16px;"></sub>

+					<span data-trans="wireless" style="font-size:15px;text-align:center;display:block"></span>

+				</div>

+			</div>	

+            <!--a href="#conn_device" id="h_attached_device_link">

+            </a-->

+        </div>

+    </div>

+</div>

+</div>

+

+

+<div class="row margin-top-20 label-font-normal margin-bottom-20">

+    <div class="text-center traffic_control_container" data-bind="visible: showTraffic()">

+        <h4 data-trans="traffic_data_plan" style="font-size:14px;text-align:right;padding-right:15px"></h4>

+        <div style="display:inline-block">

+            <div id="traffic_graphic" style="width: 200px; height: 165px; visibility: visible;"></div>

+        </div>		

+        <div style="text-align: left;padding-left:20px;font-size:18px">

+			<span style="background-color: #8CC916;" class="color_block"></span>

+			<span data-trans="traffic_used" class="color_block_desc"></span>

+			<span class="color_block_desc">:</span>

+			<span data-bind="text: trafficUsed" class="color_block_desc"></span>

+	    </div>

+		<div class="statistics_list">

+			<ul>

+				<li><a href="#flow_ctl">

+				    <div data-bind="visible: trafficAlertEnable">

+                        <span data-bind="text: trafficLimited" class="line-height-20"></span>

+                        <span data-trans="traffic_limit_data" class="line-height-20"></span>

+                    </div>

+                    <div data-bind="visible: trafficAlertEnable() == false">

+                        <div data-trans="traffic_not_set_limited" class="line-height-20"></div>

+                    </div>

+				</a></li>

+			</ul>

+		</div>

+    </div>

+

+

+	<div data-bind="css:{'device_info_container_hastraffic':showTraffic(),'device_info_container_notraffic':!showTraffic()}" class="device_info_container">

+        <h4 data-trans="device_info" style="font-size:14px;text-align:left;padding-left:15px;color:#fff"></h4>

+        <div style="color:#fff;position: relative;height: 210px;font-size: 18px;line-height: 1.5em;padding:20px 0px 0px 15px;">

+			<div class="row">

+				<label data-trans="sim_serial_number" class="col-xs-5"></label>

+				<label data-bind="text: simSerialNumber" class="col-xs-7"></label>

+			</div>

+			<div class="row">

+				<label data-trans="imei" class="col-xs-5"></label>

+				<label data-bind="text: imei" class="col-xs-7"></label>

+			</div>

+			<div class="row">

+				<label data-trans="imsi" class="col-xs-5"></label>

+				<label data-bind="text: imsi" class="col-xs-7"></label>

+			</div>

+			<div class="row">

+				<label data-trans="iccid" class="col-xs-5"></label>

+				<label data-bind="text: iccid" class="col-xs-7"></label>

+			</div>

+			<div class="row">

+				<label data-trans="cellid" class="col-xs-5"></label>

+				<label data-bind="text: cellid" class="col-xs-7"></label>

+			</div>

+			<!--div class="row" data-bind="visible: notDataCard">

+				<label class="col-xs-5" data-trans="wifi_range"></label>

+				<label class="col-xs-7" data-bind="attr: {'data-trans': wifiLongMode}"></label>

+			</div-->

+			<div class="row">

+				<label data-trans="signal_strength_label" class="col-xs-5"></label>

+				<label id="fresh_signal_strength" class="col-xs-7"></label>

+			</div>

+			<div class="row" data-bind="visible: hasWifi && showMultiSsid()">

+				<label data-trans="network_name_ssid1" class="col-xs-5"></label>

+				<label data-bind="text: ssid" style="word-wrap: break-word;" class="col-xs-7"></label>

+			</div>

+			<div class="row" data-bind="visible: hasWifi && !showMultiSsid()">

+				<label data-trans="network_name" class="col-xs-5"></label>

+				<label data-bind="text: ssid" style="word-wrap: break-word;" class="col-xs-7"></label>

+			</div>

+		</div>

+        <div style="text-align:right;">

+		    <a href="javascript: void(0)" data-trans="detail_info" id="showDetailInfo" tabindex="0"></a>

+        </div>

+    </div>

+</div>

+

+

+<div id="h_qrcode" data-bind="visible: showQRCode" style="float:right" class="text-center">

+    <img id="qrcode_img" data-bind="attr: {src: qrcodeSrc}" src="./pic/res_blacktrans.png" width="111"/>

+</div>

+

+<script type="text/x-jquery-tmpl" id="detailInfoTmpl">

+<div class="row">

+    <label class="col-xs-6" data-trans="sim_serial_number" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= simSerialNumber %></label>

+</div>

+<div class="row">

+    <label data-trans="imei" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= imei %></label>

+</div>

+<div class="row">

+    <label data-trans="imsi" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= imsi %></label>

+</div>

+<div class="row">

+    <label data-trans="iccid" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= iccid %></label>

+</div>

+<div class="row">

+    <label data-trans="cellid" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= cellid %></label>

+</div>

+<div class="row">

+    <label data-trans="signal_strength_label" class="col-xs-6"></label>

+    <label class="col-xs-6" id="popoverSignalTxt"><%= signal %></label>

+</div>

+<% if(hasWifi){ %>

+<div class="row">

+    <label data-trans="<%= showMultiSsid ? 'network_name_ssid1': 'network_name' %>" class="col-xs-6"></label>

+    <label style="word-wrap: break-word; word-break: break-all;" class="col-xs-6"><%= ssid %></label>

+</div>

+<div class="row">

+    <label data-trans="<%= showMultiSsid ? 'max_access_num_ssid1': 'max_access_num' %>" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= max_access_num %></label>

+</div>

+    <% if(showMultiSsid){ %>

+        <div class="row">

+            <label data-trans="network_name_ssid2" class="col-xs-6"></label>

+            <label style="word-wrap: break-word; word-break: break-all;" class="col-xs-6"><%= m_ssid %></label>

+        </div>

+        <div class="row">

+            <label data-trans="max_access_num_ssid2" class="col-xs-6"></label>

+            <label class="col-xs-6"><%= m_max_access_num %></label>

+        </div>

+    <% } %>

+<div class="row">

+    <label data-trans="wifi_range" class="col-xs-6"></label>

+    <label data-trans="<%= wifi_long_mode %>" class="col-xs-6"></label>

+</div>

+<% } %>

+<div class="row">

+    <label data-trans="lan_domain" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= lanDomain %></label>

+</div>

+<div class="row">

+    <label data-trans="ip_address" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= ipAddress %></label>

+</div>

+<% if(showMacAddress){ %>

+<div class="row">

+    <label data-trans="mac_address" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= macAddress %></label>

+</div>

+<% } %>

+<% if(showIpv4WanIpAddr){ %>

+<div class="row">

+    <label data-trans="wan_ip_address" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= wanIpAddress %></label>

+</div>

+<% } %>

+<% if(showIpv6WanIpAddr){ %>

+<div class="row">

+    <label data-trans="ipv6_wan_ip_address" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= ipv6WanIpAddress %></label>

+</div>

+<% } %>

+<div class="row">

+    <label data-trans="software_version" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= sw_version %></label>

+</div>

+<div class="row">

+    <label data-trans="hardware_version" class="col-xs-6"></label>

+    <label class="col-xs-6"><%= hw_version %></label>

+</div>

+</script>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/network_apn_set.html b/lynq/MD310/ap/app/zte_webui/subpg/network_apn_set.html
new file mode 100755
index 0000000..16cd939
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/network_apn_set.html
@@ -0,0 +1,221 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='net_setting'></h1>

+            </div>

+        </div>

+    </div>

+    <div class="row">

+        <div class="col-xs-2">

+		<div class="nav_right">

+			<ul>

+			    <li><a data-trans="dial_mode" href="#conn_set"></a></li>

+				<li><a data-trans="net_select" href="#network_choose"></a></li>

+				<li class="active"><a data-trans="apn_setting" href="#cgdcont_set"></a></li>

+				<li><a data-trans="net_info" href="#net_status"></a></li>

+			</ul>

+		</div>

+	    </div>

+

+	    <div class="col-xs-10">

+

+<form id="apn_setting_form">

+	<div class="form-body">

+	    <h3 data-trans="apn_setting" class="form-title"></h3>

+		<div class="content">

+            <!-- 当前APN -->

+			<div class="row form-group">

+				<label data-trans="apn_currentApn" class="col-xs-3 side-right"></label>

+				<label data-bind="text: defApn" class="col-xs-6"></label>

+			</div>

+            <!-- 模式  手动、自动 -->

+			<div class="row form-group">

+				<label data-trans="apn_mode" class="col-xs-3 side-right"></label>

+                <div class="col-xs-6">

+                    <div class="row">

+                        <div class="col-xs-4">

+                            <input id="apnMode_auto" type="radio" name="apnMode" data-bind="checked: apnMode, event: {click: apnModeChangeHandler}, disable: autoApnChecked() == false && disableProfile() == true" value="auto"/>

+                            <label for="apnMode_auto" data-trans="apn_auto_apn"></label>

+                        </div>

+                        <div class="col-xs-4">

+                            <input id="apnMode_manual" type="radio" name="apnMode" data-bind="checked: apnMode, event: {click: apnModeChangeHandler}, disable: autoApnChecked() == false && disableProfile() == true" value="manual"/>

+                            <label for="apnMode_manual" data-trans="apn_manual_apn"></label>

+                        </div>

+                    </div>

+                </div>

+			</div>

+			<div id="apn_form_container" data-bind="visible: showAutoApnDetail()">

+				<div class="row form-group">

+					<label class="col-xs-3 side-right" for="profile" data-trans="apn_profile"></label>

+	                <div class="col-xs-4">

+	                    <select id="autoProfile" name="autoProfile" data-bind="options: autoProfiles, value: selectedAutoProfile, optionsText: 'text', optionsValue: 'value', disable: disableProfile, event:{ change: autoProfileChangeHandler}, visible: apnMode() == 'auto'" class="form-control"></select>

+	                    <select id="profile" name="profile" data-bind="options: profiles, value: selectedProfile, optionsText: 'text', optionsValue: 'value', disable: disableProfile, event:{ change: profileChangeHandler}, visible: apnMode() == 'manual'" class="form-control"></select>

+	                </div>

+

+                    <div class="col-xs-2">

+                        <input type="button" data-bind="click: addAct, visible: autoApnChecked() == false && disableProfile() == false && hasCapacity() == true" data-trans="add_new" class="btn btn-primary"/>

+                        <input type="button" data-bind="click: cancelAddAct, visible: autoApnChecked() == false && disableProfile() == true && hasCapacity() == true" data-trans="cancel" class="btn btn-primary"/>

+                    </div>

+				</div>

+				<div data-bind="visible: supportIPv6()" class="row form-group">

+					<label for="apn_pdp_type" data-trans="apn_pdp_type" class="col-xs-3 side-right"></label>

+	                <div class="col-xs-6">

+	                    <select id="apn_pdp_type" name="apn_pdp_type" data-bind="options: pdpTypes, value: selectedPdpType, optionsText: 'text', optionsValue: 'value', disable: checkInputDisable, event:{ change: pdpTypeChangeAlert}" class="form-control"></select>&nbsp;

+	                </div>

+				</div>

+				<div class="row form-group">

+					<label for="profile_name" data-trans="apn_profile_name" class="col-xs-3 side-right"></label>

+	                <div class="col-xs-6">

+	                    <input id="profile_name" type="text" name="profile_name" data-bind="value: profileName, disable: checkInputDisable" maxlength="15" class="required form-control"/>

+	                </div>

+				</div>

+				<div id="ipv4_section" data-bind="visible: selectedPdpType() != 'IPv6'">

+					<div class="row form-group">

+						<label for="apn_ipv4_apn" data-bind="attr:{'data-trans': transApn}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+							<input id="apn_ipv4_apn" type="text" name="apn_ipv4_apn" data-bind="value: apn, disable: checkInputDisable" maxlength="64" class="required form-control"/>

+		                </div>

+					</div>

+					<div class="row form-group" data-bind="visible: showApnDns()">

+						<label data-bind="attr:{'data-trans': transDnsMode}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_auto_dns_ipv4" type="radio" name="apn_auto_dns_ipv4" data-bind="checked: dnsMode, disable: checkInputDisable" value="auto"/>

+		                    <label for="apn_auto_dns_ipv4" data-trans="apn_auto_dns"></label>

+		                    <input id="apn_manual_dns_ipv4" type="radio" name="apn_manual_dns_ipv4" data-bind="checked: dnsMode, disable: checkInputDisable" value="manual"/>

+		                    <label for="apn_manual_dns_ipv4" data-trans="apn_manual_dns"></label>

+		                </div>

+					</div>

+					<div data-bind="visible: showDns() && showApnDns()" class="row form-group">

+						<label for="apn_dns1_ipv4" data-bind="attr:{'data-trans': transDns1}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_dns1_ipv4" type="text" name="apn_dns1_ipv4" data-bind="value: dns1, disable: checkInputDisable" maxlength="15" class="required ipv4 form-control"/>

+		                </div>

+					</div>

+					<div data-bind="visible: showDns() && showApnDns()" class="row form-group">

+						<label for="apn_dns2_ipv4" data-bind="attr:{'data-trans': transDns2}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_dns2_ipv4" type="text" name="apn_dns2_ipv4" data-bind="value: dns2, disable: checkInputDisable" maxlength="15" class="ipv4 form-control"/>

+		                </div>

+					</div>

+					<div class="row form-group">

+						<label for="apn_authentication_ipv4" data-bind="attr:{'data-trans': transAuth}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <select id="apn_authentication_ipv4" name="apn_authentication_ipv4" data-bind="options: authModes, disable: checkInputDisable, value: selectedAuthentication, optionsText: 'text', optionsValue: 'value'" class="form-control"></select>

+		                </div>

+					</div>

+					<div class="row form-group">

+						<label for="apn_user_name_ipv4" data-bind="attr:{'data-trans': transUserName}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+							<input id="apn_user_name_ipv4" type="text" name="apn_user_name_ipv4" data-bind="value: username, disable: checkInputDisable" maxlength="64" class="form-control"/>

+		                </div>

+					</div>

+					<div class="row form-group">

+						<label class="col-xs-3 side-right" for="apn_secretcode_ipv4" data-bind="attr:{'data-trans': transPassword}"></label>

+						<div class="col-xs-6">

+							<input id="apn_secretcode_ipv4" type="password" name="apn_secretcode_ipv4" data-bind="value: password,visible:!showPassword(), disable: checkInputDisable" maxlength="64" class="form-control"/>

+							<input id="apn_secretcode_ipv4_show" type="text" name="apn_secretcode_ipv4" data-bind="value: password,visible:showPassword(), disable: checkInputDisable" maxlength="64" class="form-control"/>

+							<div class="margin-top-10">

+								<p data-bind="css:{'checkbox_selected': showPassword()}, click: showPasswordHandler" manualControl="true" class="checkbox">

+									<input id="showPassword" data-bind="checked:showPassword" type="checkbox"/>

+								</p>

+								<label data-trans="display_password" class="floatleft lineheight25 margintop5"></label>

+							</div>

+						</div>

+					</div>

+				</div>

+

+				<!-- 以下是ipv6 -->

+

+				<div data-bind="visible: (selectedPdpType() == 'IPv4v6' && supportIpv4AndIpv6()) || selectedPdpType() == 'IPv6'">

+					<div class="row form-group">

+						<label for="apn_ipv6_apn" data-bind="attr:{'data-trans': transApnV6}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+							<input id="apn_ipv6_apn" type="text" name="apn_ipv6_apn" data-bind="value: apnV6, disable: checkInputDisable" maxlength="64" class="required form-control"/>

+		                </div>

+					</div>

+					<div data-bind="visible: showApnDns()" class="row form-group">

+						<label data-bind="attr:{'data-trans': transDnsModeV6}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_auto_dns_ipv6" type="radio" name="dns_ipv6" data-bind="checked: dnsModeV6, disable: checkInputDisable" value="auto"/>

+		                    <label for="apn_auto_dns_ipv6" data-trans="apn_auto_dns"></label>

+		                    <input id="apn_manual_dns_ipv6" type="radio" name="dns_ipv6" data-bind="checked: dnsModeV6, disable: checkInputDisable" value="manual"/>

+		                    <label for="apn_manual_dns_ipv6" data-trans="apn_manual_dns"></label>

+		                </div>

+					</div>

+					<div data-bind="visible: showDnsV6() && showApnDns()" class="row form-group">

+						<label for="apn_dns1_ipv6" data-bind="attr:{'data-trans': transDns1V6}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_dns1_ipv6" type="text" name="apn_dns1_ipv6" data-bind="value: dns1V6, disable: checkInputDisable" class="required ipv6 form-control"/>

+		                </div>

+					</div>

+					<div class="row form-group" data-bind="visible: showDnsV6() && showApnDns()">

+						<label class="col-xs-3 side-right" for="apn_dns2_ipv6" data-bind="attr:{'data-trans': transDns2V6}"></label>

+		                <div class="col-xs-6">

+		                    <input id="apn_dns2_ipv6" type="text" name="apn_dns2_ipv6" data-bind="value: dns2V6, disable: checkInputDisable" class="ipv6 form-control"/>

+		                </div>

+					</div>

+

+					<div class="row form-group">

+						<label for="authentication_ipv6" data-bind="attr:{'data-trans': transAuthV6}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+		                    <select id="authentication_ipv6" name="authentication_ipv6" data-bind="options: authModes, disable: checkInputDisable, value: selectedAuthenticationV6, optionsText: 'text', optionsValue: 'value'" class="form-control"></select>

+		                </div>

+					</div>

+					<div class="row form-group">

+						<label for="apn_user_name_ipv6" data-bind="attr:{'data-trans': transUserNameV6}" class="col-xs-3 side-right"></label>

+		                <div class="col-xs-6">

+							<input id="apn_user_name_ipv6" type="text" name="apn_user_name_ipv6" data-bind="value: usernameV6, disable: checkInputDisable" maxlength="64" class="form-control"/>

+		                </div>

+					</div>

+					<div class="row form-group">

+						<label for="apn_secretcode_ipv6" data-bind="attr:{'data-trans': transPasswordV6}" class="col-xs-3 side-right"></label>

+						<div class="col-xs-6">

+							<input id="apn_secretcode_ipv6" type="password" name="apn_secretcode_ipv6" data-bind="value: passwordV6,visible:!showPassword(), disable: checkInputDisable" maxlength="64" class="form-control"/>

+							<input id="apn_secretcode_ipv6_show" type="text" name="apn_secretcode_ipv6" data-bind="value: passwordV6,visible:showPassword(), disable: checkInputDisable" maxlength="64" class="form-control"/>

+							<div class="margin-top-10">

+								<p data-bind="css:{'checkbox_selected': showPassword()}, click: showPasswordHandler" manualControl="true" class="checkbox">

+									<input id="showV6Password" data-bind="checked:showPassword" type="checkbox"/>

+								</p>

+								<label data-trans="display_password" class="floatleft lineheight25 margintop5"></label>

+							</div>

+						</div>

+					</div>

+				</div>

+			    <div class="row form-group">

+					<label for="apn_secretcode_ipv6" data-trans="dial_num" class="col-xs-3 side-right"></label>

+		            <label class="col-xs-6" data-bind="text: wanDial"></label>

+				</div>

+			</div>

+		</div>

+		<div class="form-buttons">

+			<input type="button" data-bind="click: setDefaultAct, visible: disableProfile() == false && setDefaultVisible() && !defaultCfg()" data-trans="set_default" class="btn btn-primary"/>

+			<input type="submit" formmethod="post" data-bind="visible: (!autoApnChecked() && !predeterminedCfg()) || disableProfile() == true" data-trans="apply" class="btn btn-primary"/>

+			<input type="button" data-bind="click: deleteAct, visible: !autoApnChecked() && !defaultCfg() && !predeterminedCfg() && !disableProfile()" data-trans="delete" class="btn btn-primary"/>

+		</div>

+		<div class="form-note">

+            <div class="notes-title">&nbsp;</div>

+            <ul class="notes-content">

+        		<li data-trans="apn_note_whole_page"></li>

+        		<li data-trans="apn_note_mode"></li>

+        		<li data-trans="apn_note_profile"></li>

+        		<li data-trans="apn_note_pdp_type" data-bind="visible: supportIPv6()"></li>

+        		<li data-trans="apn_note_profile_name"></li>

+        		<li data-trans="apn_note_apn"></li>

+        		<li data-trans="apn_note_dns_mode" data-bind="visible: showApnDns()"></li>

+        		<li data-trans="apn_note_authentication"></li>

+        		<li data-trans="apn_note_username"></li>

+        		<li data-trans="apn_note_password"></li>

+        		<li data-trans="apn_note_set_default"></li>

+        	</ul>

+		</div>

+	</div>

+</form>

+    </div>

+</div>

+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/network_dial_set.html b/lynq/MD310/ap/app/zte_webui/subpg/network_dial_set.html
new file mode 100755
index 0000000..a13017d
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/network_dial_set.html
@@ -0,0 +1,69 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='net_setting'></h1>

+            </div>

+        </div>

+    </div>

+    <div class="row">

+        <div class="col-xs-2">

+		<div class="nav_right">

+			<ul>

+			    <li class="active"><a data-trans="dial_mode" href="#conn_set"></a></li>

+				<li><a data-trans="net_select" href="#network_choose"></a></li>

+				<li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>

+                <li><a data-trans="net_info" href="#net_status"></a></li>

+			</ul>

+		</div>

+	    </div>

+

+	    <div class="col-xs-10">

+

+<form>

+<div class="form-body">

+	    <h3 data-trans="dial_mode" class="form-title"></h3>

+    <div class="content">

+            <div class="row form-group">

+                <label data-trans='dial_mode' class="col-xs-3 side-right"></label>

+                <div class="col-xs-2">

+                    <input id='auto_mode' type="radio" name="modeGroup" value="auto_dial" data-bind="checked: selectMode, enable: enableFlag" />

+                    <label for='auto_mode' data-trans='auto_select'></label>

+                </div>

+                <div class="col-xs-2">

+                    <input id='manual_mode' type="radio" name="modeGroup"  value="manual_dial" data-bind="checked: selectMode, enable: enableFlag" />

+                    <label for='manual_mode' data-trans='manual_select'></label>

+                </div>

+            </div>

+

+            <div data-bind="visible: selectMode() == 'auto_dial'" class="row form-group">

+                <div class="col-xs-3"></div>

+                <div class="col-xs-8 label-absolute">

+                    <p id="roamBtn" data-bind="css:{'checkbox_selected': isAllowedRoaming()=='on'}, click: setAllowedRoaming" manualControl="true"class="checkbox floatleft margintop5 checkboxToggle">

+                        <input type="checkbox" id="isAllowedRoaming" value="on" data-bind="checked:isAllowedRoaming()=='on'" />

+                    </p>

+                    <label for="isAllowedRoaming" data-trans="dial_roaming_remind" class="update_inline floatleft lineheight25"></label>

+                </div>

+            </div>

+    </div>

+    <div class="form-buttons">

+        <input type="button" data-bind='click: save, enable: enableFlag' data-trans="apply" class="btn btn-primary"/>

+    </div>

+    <div class="form-note">

+        <div class="notes-title">&nbsp;</div>

+        <ul class="notes-content">

+			<li data-trans="diconneted_operate_note"></li>

+            <li data-trans="dial_setting_note_automatic"></li>

+            <li data-trans="dial_setting_note_manual"></li>

+        </ul>

+    </div>

+</div>

+</form>

+    </div>

+</div>

+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/network_info.html b/lynq/MD310/ap/app/zte_webui/subpg/network_info.html
new file mode 100755
index 0000000..84dabe4
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/network_info.html
@@ -0,0 +1,64 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='net_setting'></h1>

+            </div>

+        </div>

+    </div>

+    <div class="row">

+        <div class="col-xs-2">

+            <div class="nav_right">

+                <ul>

+                    <li><a data-trans="dial_mode" href="#conn_set"></a></li>

+                    <li><a data-trans="net_select" href="#network_choose"></a></li>

+                    <li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>

+                    <li class="active"><a data-trans="net_info" href="#net_status"></a></li>

+                </ul>

+            </div>

+	    </div>

+

+        <div class="col-xs-10">

+            <form role="form">

+                <div class="form-body">

+                    <h3 data-trans="net_info" class="form-title"></h3>

+                    <div class="content">

+                        <div class="row form-group">

+                            <label data-trans="pci" class="col-xs-5"></label>

+				            <label data-bind="text: pci" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="sinr" class="col-xs-5"></label>

+				            <label data-bind="text: sinr" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="rsrp" class="col-xs-5"></label>

+				            <label data-bind="text: rsrp" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="rsrq" class="col-xs-5"></label>

+				            <label data-bind="text: rsrq" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="plmn" class="col-xs-5"></label>

+				            <label data-bind="text: plmn" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="cellid" class="col-xs-5"></label>

+				            <label data-bind="text: cellid" class="col-xs-7"></label>

+                        </div>

+                        <div class="row form-group">

+                            <label data-trans="band" class="col-xs-5"></label>

+				            <label data-bind="text: band" class="col-xs-7"></label>

+                        </div>

+                    </div>

+                </div>

+            </form>

+        </div>

+    </div>

+</div>
\ No newline at end of file
diff --git a/lynq/MD310/ap/app/zte_webui/subpg/network_net_select.html b/lynq/MD310/ap/app/zte_webui/subpg/network_net_select.html
new file mode 100755
index 0000000..b5552c1
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/network_net_select.html
@@ -0,0 +1,107 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='net_setting'></h1>

+            </div>

+        </div>

+    </div>

+    <div class="row">

+        <div class="col-xs-2">

+		<div class="nav_right">

+			<ul>

+			    <li><a data-trans="dial_mode" href="#conn_set"></a></li>

+				<li class="active"><a data-trans="net_select" href="#network_choose"></a></li>

+				<li><a data-trans="apn_setting" href="#cgdcont_set"></a></li>

+                <li><a data-trans="net_info" href="#net_status"></a></li>

+			</ul>

+		</div>

+	    </div>

+

+	    <div class="col-xs-10">

+

+<form role="form">

+<div class="form-body">

+	    <h3 data-trans="net_select" class="form-title"></h3>

+    <div class="content">

+        <div class="row form-group">

+            <label data-trans='net_select' class="col-xs-4 side-right"></label>

+            <div class="col-xs-8">

+                <div class="row">

+                    <div class="col-xs-4">

+                        <input id='auto_select' type="radio" name="selectGroup" value="auto_select" data-bind="checked: selectMode, enable: enableFlag" />

+                        <label for='auto_select' data-trans='auto_select'></label>

+                    </div>

+                    <div class="col-xs-6">

+                        <select id="type" data-transid='auto_select_type' data-bind="options: types, value: selectedType, optionsText: transOption('auto_select_type'), optionsValue: 'value', enable: enableFlag() && selectMode() == 'auto_select'" class="form-control"></select>

+                    </div>

+                </div>

+            </div>

+        </div>

+        <div class="row form-group">

+            <label class="col-xs-4 side-right"></label>

+            <div class="col-xs-8">

+                <input id='manual_select' type="radio" name="selectGroup"  value="manual_select" data-bind="checked: selectMode, enable: enableFlag" />

+                <label for='manual_select' data-trans='manual_select'></label>

+            </div>

+        </div>

+    </div>

+    <div class="form-buttons">

+        <input type="button" data-bind='click: save, visible: selectMode() == "auto_select", enable: enableFlag, css: {disabled: !enableFlag()}' data-trans='apply' class="btn btn-primary"/>

+        <input type="button" data-bind='click: search, visible: selectMode() != "auto_select", enable: enableFlag, css: {disabled: !enableFlag()}' data-trans='search' class="btn btn-primary"/>

+    </div>

+

+    <div data-bind='visible: networkList().length > 0 && selectMode() == "manual_select"' class="content">

+        <div class="form-title">

+            <h2 data-trans='network_list'></h2>

+        </div>

+        <div class="content">

+            <div class="ko-grid-container marginnone">

+                <table cellspacing="0" cellpadding="0" class="table table-striped table-hover">

+                    <thead>

+                    <tr>

+                        <th width="12%" data-trans="option"></th>

+                        <th width="16%" data-trans="net_status"></th>

+                        <th width="21%" data-trans="network_provider"></th>

+                        <th width="18%" data-trans="mccmnc"></th>

+                        <th width="18%" data-trans="networktype"></th>

+                        <th width="15%" data-trans="subnet"></th>

+                    </tr>

+                    </thead>

+                    <tbody data-bind='foreach: networkList'>

+                    <tr data-bind="css:{odd:$index()%2==1, even:$index()%2==0}">

+                        <td><input type="radio" name="networkGroup"

+                                   data-bind='value: $root.networkValue($data), checked: $root.selectNetwork, attr: {id: $root.networkValue($data)}, enable: $root.enableFlag'/>

+                        </td>

+                        <td data-bind='attr: {"data-trans": $root.networkStatusId($data)}, text: $root.networkStatus($data)'></td>

+                        <td data-bind='text: $root.operatorName($data)'></td>

+                        <td data-bind='text: $root.networkText($data)'></td>

+                        <td data-bind='attr: {"data-trans": $root.networkTypeId($data)}, text: $root.networkType($data)'></td>

+                        <td data-bind='attr: {"data-trans": $root.subnetTypeId($data)}, text: $root.subnetworkType($data)'></td>

+                    </tr>

+                    </tbody>

+                </table>

+            </div>

+        </div>

+	     <div class="form-buttons">

+		     <input type="button" data-bind='click: register, enable: selectNetwork() != "" && enableFlag, css: {disabled: selectNetwork() == "" || !enableFlag()}' data-trans='register' class="btn btn-primary"/>

+		 </div>

+     </div>

+    <div class="form-note">

+        <div class="notes-title">&nbsp;</div>

+        <ul class="notes-content">

+			<li data-trans="diconneted_operate_note"></li>

+            <li data-trans="net_select_note_automatic"></li>

+            <li data-trans="net_select_note_manual"></li>

+        </ul>

+    </div>

+</div>

+</form>

+    </div>

+</div>

+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/ota_update.html b/lynq/MD310/ap/app/zte_webui/subpg/ota_update.html
index 20efa98..243be6c 100755
--- a/lynq/MD310/ap/app/zte_webui/subpg/ota_update.html
+++ b/lynq/MD310/ap/app/zte_webui/subpg/ota_update.html
@@ -21,7 +21,7 @@
 					<li data-bind="visible: !isDataCard"><a href="#route_set" data-trans="router_setting"></a></li>

 					<li data-bind="visible: !isDataCard"><a href="#filter_main" data-trans="firewall"></a></li>

 					<li data-bind="visible:hasUpdateCheck" class="active"><a href="#fota" data-trans="update_settings"></a></li>

-					<li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li>

+					<!-- <li data-bind="visible:hasUssd"><a href="#usat" data-trans="USSD"></a></li> -->

 					<li data-bind="visible:hasDdns"><a href="#dynamic_dns" data-trans="DDNS"></a></li>

 					<li data-bind="visible: !isDataCard"><a href="#more" data-trans="others"></a></li>

 				</ul>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/ussd.html b/lynq/MD310/ap/app/zte_webui/subpg/ussd.html
new file mode 100755
index 0000000..7310027
--- /dev/null
+++ b/lynq/MD310/ap/app/zte_webui/subpg/ussd.html
@@ -0,0 +1,85 @@
+<div id="innerContainer">

+    <div class="row header-row">

+        <div class="col-xs-1">

+            <a href="#main">

+                <img alt="" src="pic/direct-back.png">

+            </a>

+        </div>

+        <div class="col-xs-11">

+            <div class="form-title">

+                <h1 data-trans='USSD'></h1>

+            </div>

+        </div>

+    </div>

+<div class="row">

+    <!-- <div class="col-xs-2">

+		<div class="nav_right">

+			<ul>

+			    <li><a data-trans="sleep_mode" href="#wlan_sleep"></a></li>

+				<li><a data-trans="router_setting" href="#route_set"></a></li>

+				<li><a data-trans="firewall" href="#filter_main"></a></li>

+				<li data-bind="visible:hasUpdateCheck"><a data-trans="update_settings" href="#fota"></a></li>

+				<li class="active"><a data-trans="USSD" href="#usat"></a></li>

+				<li data-bind="visible:hasDdns"><a data-trans="DDNS" href="#dynamic_dns"></a></li>

+				<li><a data-trans="others" href="#more"></a></li>

+			</ul>

+		</div>

+	</div> -->

+

+	<div class="innerContainer">

+

+    <form id="frmUSSD">

+        <div class="col-xs-1 margin-top-15">

+	</div>

+	<div class="col-xs-11">

+	    <h3 data-trans="USSD" class="form-title"></h3>

+        <div id="USSD_send_div"  data-bind="visible: USSDLocation()==0" class="margin-top-20">

+            <div class="content">

+                <div class="row form-group">

+                    <label data-trans="ussd_send_to" class="col-xs-4 side-right"></label>

+                    <div class="col-xs-3">

+                        <input id="USSD_send" type="text" size="20" data-bind="value:USSDSend,valueUpdate:'afterkeydown'" class="required form-control">

+                    </div>

+                </div>

+                <div class="form-buttons">

+                    <input id="sendToNet" type="button" data-trans='ussd_send' data-bind="disable:USSDSend().length<=0,css:{disabled:USSDSend().length<=0},click:sendToNet" class="btn btn-primary marginright10" />

+                    <!--input type="reset"  data-trans='ussd_cancel' data-bind="disable:USSDSend().length<=0,css:{disabled:USSDSend().length<=0},click:resetUSSD" id="cancelToNet" class="btn btn-primary"/-->

+                </div>

+            </div>

+        </div>

+        <div id="USSD_reply_div"  data-bind="visible: USSDLocation()==1" class="margin-top-20">

+            <!--<div class="form-title" data-trans='ussd_contents'></div>!-->

+            <div class="content">

+                <div class="row form-group">

+                    <label data-trans="ussd_contents" class="col-xs-4 side-right"></label>

+                    <div class="col-xs-3">

+                        <textarea id="USSD_Content" rows="8" cols="50" readonly="readonly" name="USSD_Content"></textarea>

+                    </div>

+                </div>

+                <div class="form-buttons">

+                    <input type="button" data-trans='ussd_cancel' data-bind="click:noReplyCancel" class="btn btn-primary marginright10"/>

+                </div>

+                <div id="ussd_action" data-bind="visible: ussd_action()!=0">

+                    <div class="row form-group">

+                        <label class="col-xs-4 side-right" data-trans="ussd_reply_to"></label>

+                        <div class="col-xs-3">

+                            <input id="USSD_reply" type="text" name="USSD_reply" size="20" data-bind="value:USSDReply"  class="required form-control">

+                        </div>

+                    </div>

+                    <div class="form-buttons">

+                        <input type="button" data-trans='ussd_reply' data-bind="click:replyToNet" class="btn btn-primary marginright10"/>

+                    </div>

+                </div>

+            </div>

+        </div>

+        <div class="form-note">

+            <div class="notes-title">&nbsp;</div>

+            <ul class="notes-content">

+                <li data-trans="ussd_note1"></li>

+            </ul>

+        </div>

+	</div>

+	</form>

+    </div>

+    </div>

+</div>

diff --git a/lynq/MD310/ap/app/zte_webui/subpg/wifi_sleep_mode.html b/lynq/MD310/ap/app/zte_webui/subpg/wifi_sleep_mode.html
index 5c2e39b..8a3234c 100755
--- a/lynq/MD310/ap/app/zte_webui/subpg/wifi_sleep_mode.html
+++ b/lynq/MD310/ap/app/zte_webui/subpg/wifi_sleep_mode.html
@@ -19,14 +19,14 @@
             <li><a data-trans="router_setting" href="#route_set"></a></li>

             <li><a data-trans="firewall" href="#filter_main"></a></li>

             <li data-bind="visible:hasUpdateCheck"><a data-trans="update_settings" href="#fota"></a></li>

-            <li data-bind="visible:hasUssd"><a data-trans="USSD" href="#usat"></a></li>

+            <!-- <li data-bind="visible:hasUssd"><a data-trans="USSD" href="#usat"></a></li> -->

 			<li data-bind="visible:hasDdns"><a data-trans="DDNS" href="#dynamic_dns"></a></li>

             <li><a data-trans="others" href="#more"></a></li>

         </ul>

 	    </div>

 	</div>

     <div class="col-xs-10">

-        

+

 

 <div class="form-body margin-top-20">

     <!--hide wifi range settings until sw implements it-->

@@ -138,8 +138,9 @@
         <div class="form-group">

             <div class="row">

                 <label data-trans='wifi_sleep_mode' class="col-xs-3" for='power_save_mode'></label>

-                <div class="col-xs-4">

-                <select id="power_save_mode" data-bind="options: option, value: wifiSleepedMode, optionsText: transOption('sleep_select'), optionsValue: 'value'" data-transid='sleep_select' class="form-control"></select>

+                <div class="col-xs-4" style="border: none;">

+                <!-- <select id="power_save_mode" data-bind="options: option, value: wifiSleepedMode, optionsText: transOption('sleep_select'), optionsValue: 'value'" data-transid='sleep_select' class="form-control"></select> -->

+                <label id="power_save_mode" data-trans='sleep_select_1' style="border: none;"></label>

                 </div>

             </div>

         </div>

@@ -164,4 +165,4 @@
 </div>

     </div>

 </div>

-</div>
\ No newline at end of file
+</div>

diff --git a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk
index 751d10e..b8e63f0 100755
--- a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk
+++ b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_app.mk
@@ -13,7 +13,7 @@
 

 #yes only when klocwork static analysis 

 ifneq ($(KW_SKIP),yes)

-zte_app += iproute2 iptables c-ares

+zte_app += iproute2 iptables c-ares qrencode

 endif

 

 ifneq ($(CONFIG_WIFI_FUNCTION)), )

diff --git a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk
index 1033f81..33d160b 100755
--- a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk
+++ b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/config/normal/config_lib.mk
@@ -8,7 +8,7 @@
 

 #yes only  when klocwork static analysis 

 ifneq ($(KW_SKIP),yes)

-zte_lib += libsqlite libssl libnl libcurl

+zte_lib += zlib libsqlite libssl libnl libcurl libpng

 

 ifeq ($(USE_FOTA),yes)

 zte_lib += liblzma

diff --git a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_sys b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_sys
index 2aabda2..3487136 100755
--- a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_sys
+++ b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_sys
@@ -115,7 +115,7 @@
 Login=admin
 Password=
 sntp_server_count=3
-MAX_Station_num=8
+MAX_Station_num=10
 MAX_Station_num_bak=0
 MAX_Access_num_bbak=0
 MAX_Chip_Capability=8
diff --git a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user
index 3b4e379..c97c678 100755
--- a/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user
+++ b/lynq/MD310/ap/project/zx297520v3/prj_cpe_min/fs/normal/rootfs/etc_ro/default/default_parameter_user
@@ -277,7 +277,7 @@
 fota_upgrade_result_internal=
 mmi_battery_voltage_line=3258+3403+3426+3463+3500+3527+3551+3566+3582+3604+3632+3659+3698+3761+3819+3865+3911+3964+4019+4067+4118
 mmi_fast_poweron=
-mmi_led_mode=sleep_mode
+mmi_led_mode=
 mmi_new_sms_blink_flag=0
 mmi_show_pagetab=page1+page2+page3
 mmi_showmode=lcd
@@ -321,7 +321,7 @@
 HTTP_SHARE_WR_AUTH=readWrite
 ipv6_pdp_type=
 ipv6_wan_apn=
-Language=zh-cn
+Language=en
 manual_time_day=
 manual_time_hour=
 manual_time_minute=
@@ -383,8 +383,8 @@
 m_wifi_mac=901D45692A5C
 m_WPAPSK1_aes=
 m_WPAPSK1_encode=MTIzNDU2Nzg=
-MAX_Access_num=8
-MAX_Access_num_bak=8
+MAX_Access_num=10
+MAX_Access_num_bak=10
 NoForwarding=0
 openEnable=0
 openTime=