| 
							
							
							
						 |  |  | @@ -1,287 +0,0 @@ | 
		
	
		
			
				|  |  |  |  | package cc.winboll.studio.libapputils.bean; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | /** | 
		
	
		
			
				|  |  |  |  |  * @Author ZhanGSKen@QQ.COM | 
		
	
		
			
				|  |  |  |  |  * @Date 2025/01/15 11:11:52 | 
		
	
		
			
				|  |  |  |  |  * @Describe Json Bean 基础类。 | 
		
	
		
			
				|  |  |  |  |  */ | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | import android.content.Context; | 
		
	
		
			
				|  |  |  |  | import android.util.JsonReader; | 
		
	
		
			
				|  |  |  |  | import android.util.JsonWriter; | 
		
	
		
			
				|  |  |  |  | import cc.winboll.studio.libappbase.LogUtils; | 
		
	
		
			
				|  |  |  |  | import cc.winboll.studio.libapputils.util.FileUtils; | 
		
	
		
			
				|  |  |  |  | import java.io.File; | 
		
	
		
			
				|  |  |  |  | import java.io.IOException; | 
		
	
		
			
				|  |  |  |  | import java.io.StringReader; | 
		
	
		
			
				|  |  |  |  | import java.io.StringWriter; | 
		
	
		
			
				|  |  |  |  | import java.util.ArrayList; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | public abstract class BaseBean<T extends BaseBean> { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static final String TAG = "BaseBean"; | 
		
	
		
			
				|  |  |  |  |     static final String BEAN_NAME = "BeanName"; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public BaseBean() {} | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public abstract String getName(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public String getBeanJsonFilePath(Context context) { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         return context.getExternalFilesDir(TAG) + "/" + getName() + ".json"; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public String getBeanListJsonFilePath(Context context) { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         return context.getExternalFilesDir(TAG) + "/" + getName() + "_List.json"; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { | 
		
	
		
			
				|  |  |  |  |         jsonWriter.name(BEAN_NAME).value(getName()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     abstract public T readBeanFromJsonReader(JsonReader jsonReader) throws IOException; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> String checkIsTheSameBeanListAndFile(String szFilePath, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         StringBuilder sbResult = new StringBuilder(); | 
		
	
		
			
				|  |  |  |  |         String szErrorInfo = "Check Is The Same Bean List And File Error : "; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             int nSameCount = 0; | 
		
	
		
			
				|  |  |  |  |             int nBeanListCout = 0; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |             T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |             String szBeanSimpleName = beanTemp.getName(); | 
		
	
		
			
				|  |  |  |  |             String szListJson = FileUtils.readStringFromFile(szFilePath); | 
		
	
		
			
				|  |  |  |  |             StringReader stringReader = new StringReader(szListJson); | 
		
	
		
			
				|  |  |  |  |             JsonReader jsonReader = new JsonReader(stringReader); | 
		
	
		
			
				|  |  |  |  |             jsonReader.beginArray(); | 
		
	
		
			
				|  |  |  |  |             while (jsonReader.hasNext()) { | 
		
	
		
			
				|  |  |  |  |                 nBeanListCout++; | 
		
	
		
			
				|  |  |  |  |                 jsonReader.beginObject(); | 
		
	
		
			
				|  |  |  |  |                 while (jsonReader.hasNext()) { | 
		
	
		
			
				|  |  |  |  |                     String name = jsonReader.nextName(); | 
		
	
		
			
				|  |  |  |  |                     if (name.equals(BEAN_NAME)) { | 
		
	
		
			
				|  |  |  |  |                         if (szBeanSimpleName.equals(jsonReader.nextString())) { | 
		
	
		
			
				|  |  |  |  |                             nSameCount++; | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                     } else { | 
		
	
		
			
				|  |  |  |  |                         jsonReader.skipValue(); | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |                 jsonReader.endObject(); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             jsonReader.endArray(); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |             // 返回检查结果 | 
		
	
		
			
				|  |  |  |  |             if (nSameCount == nBeanListCout) { | 
		
	
		
			
				|  |  |  |  |                 // 检查一致直接返回空串 | 
		
	
		
			
				|  |  |  |  |                 return ""; | 
		
	
		
			
				|  |  |  |  |             } else { | 
		
	
		
			
				|  |  |  |  |                 // 检查不一致返回对比信息 | 
		
	
		
			
				|  |  |  |  |                 sbResult.append("Total : "); | 
		
	
		
			
				|  |  |  |  |                 sbResult.append(nBeanListCout); | 
		
	
		
			
				|  |  |  |  |                 sbResult.append(" Diff : "); | 
		
	
		
			
				|  |  |  |  |                 sbResult.append(nBeanListCout - nSameCount); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |             sbResult.append(szErrorInfo); | 
		
	
		
			
				|  |  |  |  |             sbResult.append(e); | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             sbResult.append(szErrorInfo); | 
		
	
		
			
				|  |  |  |  |             sbResult.append(e); | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             sbResult.append(szErrorInfo); | 
		
	
		
			
				|  |  |  |  |             sbResult.append(e); | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return sbResult.toString(); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> T parseStringToBean(String szBean, Class<T> clazz) throws IOException { | 
		
	
		
			
				|  |  |  |  |         // 创建 JsonWriter 对象 | 
		
	
		
			
				|  |  |  |  |         StringReader stringReader = new StringReader(szBean); | 
		
	
		
			
				|  |  |  |  |         JsonReader jsonReader = new JsonReader(stringReader); | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |             return (T)beanTemp.readBeanFromJsonReader(jsonReader); | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean parseStringToBeanList(String szBeanList, ArrayList<T> beanList, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             beanList.clear(); | 
		
	
		
			
				|  |  |  |  |             StringReader stringReader = new StringReader(szBeanList); | 
		
	
		
			
				|  |  |  |  |             JsonReader jsonReader = new JsonReader(stringReader); | 
		
	
		
			
				|  |  |  |  |             jsonReader.beginArray(); | 
		
	
		
			
				|  |  |  |  |             while (jsonReader.hasNext()) { | 
		
	
		
			
				|  |  |  |  |                 T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |                 T bean = (T)beanTemp.readBeanFromJsonReader(jsonReader); | 
		
	
		
			
				|  |  |  |  |                 if (bean != null) { | 
		
	
		
			
				|  |  |  |  |                     beanList.add(bean); | 
		
	
		
			
				|  |  |  |  |                     //LogUtils.d(TAG, "beanList.add(bean)"); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             jsonReader.endArray(); | 
		
	
		
			
				|  |  |  |  |             return true; | 
		
	
		
			
				|  |  |  |  |             //LogUtils.d(TAG, "beanList.size() is " + Integer.toString(beanList.size())); | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     @Override | 
		
	
		
			
				|  |  |  |  |     public String toString() { | 
		
	
		
			
				|  |  |  |  |         // 创建 JsonWriter 对象 | 
		
	
		
			
				|  |  |  |  |         StringWriter stringWriter = new StringWriter(); | 
		
	
		
			
				|  |  |  |  |         JsonWriter jsonWriter = new JsonWriter(stringWriter); | 
		
	
		
			
				|  |  |  |  |         jsonWriter.setIndent("  "); | 
		
	
		
			
				|  |  |  |  |         try {// 开始 JSON 对象 | 
		
	
		
			
				|  |  |  |  |             jsonWriter.beginObject(); | 
		
	
		
			
				|  |  |  |  |             // 写入键值对 | 
		
	
		
			
				|  |  |  |  |             writeThisToJsonWriter(jsonWriter); | 
		
	
		
			
				|  |  |  |  |             // 结束 JSON 对象 | 
		
	
		
			
				|  |  |  |  |             jsonWriter.endObject(); | 
		
	
		
			
				|  |  |  |  |             return stringWriter.toString(); | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         // 获取 JSON 字符串 | 
		
	
		
			
				|  |  |  |  |         return ""; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> String toStringByBeanList(ArrayList<T> beanList) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             StringWriter stringWriter = new StringWriter(); | 
		
	
		
			
				|  |  |  |  |             JsonWriter jsonWriter = new JsonWriter(stringWriter); | 
		
	
		
			
				|  |  |  |  |             jsonWriter.setIndent("  "); | 
		
	
		
			
				|  |  |  |  |             jsonWriter.beginArray(); | 
		
	
		
			
				|  |  |  |  |             for (int i = 0; i < beanList.size(); i++) { | 
		
	
		
			
				|  |  |  |  |                 // 开始 JSON 对象 | 
		
	
		
			
				|  |  |  |  |                 jsonWriter.beginObject(); | 
		
	
		
			
				|  |  |  |  |                 // 写入键值对 | 
		
	
		
			
				|  |  |  |  |                 beanList.get(i).writeThisToJsonWriter(jsonWriter); | 
		
	
		
			
				|  |  |  |  |                 // 结束 JSON 对象 | 
		
	
		
			
				|  |  |  |  |                 jsonWriter.endObject(); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             jsonWriter.endArray(); | 
		
	
		
			
				|  |  |  |  |             jsonWriter.close(); | 
		
	
		
			
				|  |  |  |  |             return stringWriter.toString(); | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return ""; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> T loadBean(Context context, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |             return loadBeanFromFile(beanTemp.getBeanJsonFilePath(context), clazz); | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> T loadBeanFromFile(String szFilePath, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             try { | 
		
	
		
			
				|  |  |  |  |                 File fTemp = new File(szFilePath); | 
		
	
		
			
				|  |  |  |  |                 if (fTemp.exists()) { | 
		
	
		
			
				|  |  |  |  |                     T beanTemp = clazz.newInstance();String szJson = FileUtils.readStringFromFile(szFilePath); | 
		
	
		
			
				|  |  |  |  |                     return beanTemp.parseStringToBean(szJson, clazz); | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |                 LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |             } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |                 LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return null; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean saveBean(Context context, T bean) { | 
		
	
		
			
				|  |  |  |  |         return saveBeanToFile(bean.getBeanJsonFilePath(context), bean); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean saveBeanToFile(String szFilePath, T bean) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             String szJson = bean.toString(); | 
		
	
		
			
				|  |  |  |  |             FileUtils.writeStringToFile(szFilePath, szJson); | 
		
	
		
			
				|  |  |  |  |             return true; | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean loadBeanList(Context context, ArrayList<T> beanListDst, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |             return loadBeanListFromFile(beanTemp.getBeanListJsonFilePath(context), beanListDst, clazz); | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) {} catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean loadBeanListFromFile(String szFilePath, ArrayList<T> beanList, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             File fTemp = new File(szFilePath); | 
		
	
		
			
				|  |  |  |  |             if (fTemp.exists()) { | 
		
	
		
			
				|  |  |  |  |                 String szListJson = FileUtils.readStringFromFile(szFilePath); | 
		
	
		
			
				|  |  |  |  |                 return parseStringToBeanList(szListJson, beanList, clazz); | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean saveBeanList(Context context, ArrayList<T> beanList, Class<T> clazz) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             T beanTemp = clazz.newInstance(); | 
		
	
		
			
				|  |  |  |  |             return saveBeanListToFile(beanTemp.getBeanListJsonFilePath(context), beanList); | 
		
	
		
			
				|  |  |  |  |         } catch (InstantiationException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } catch (IllegalAccessException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     public static <T extends BaseBean> boolean saveBeanListToFile(String szFilePath, ArrayList<T> beanList) { | 
		
	
		
			
				|  |  |  |  |         try { | 
		
	
		
			
				|  |  |  |  |             String szJson = toStringByBeanList(beanList); | 
		
	
		
			
				|  |  |  |  |             FileUtils.writeStringToFile(szFilePath, szJson); | 
		
	
		
			
				|  |  |  |  |             //LogUtils.d(TAG, "FileUtil.writeFile beanList.size() is " + Integer.toString(beanList.size())); | 
		
	
		
			
				|  |  |  |  |             return true; | 
		
	
		
			
				|  |  |  |  |         } catch (IOException e) { | 
		
	
		
			
				|  |  |  |  |             LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } |