From 7d797b1a5786a8d4ca3aafe2484c75ad15ba9d8f Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期一, 17 十二月 2018 20:25:22 +0800
Subject: [PATCH] init QiaojiaoSystem Code (svn version is r3340)

---
 QiaoJiaSystem/build/data/labels/34_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/50_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/68_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/62_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_6.png                              |    0 
 QiaoJiaSystem/YoloServer/YoloDetectServerI.h                          |   40 
 QiaoJiaSystem/build/data/labels/121_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/47_1.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h               |   42 
 QiaoJiaSystem/build/data/labels/85_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/105_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/75_5.png                              |    0 
 QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp                        |  264 
 QiaoJiaSystem/build/data/labels/45_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/54_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/84_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/76_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/93_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/39_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/92_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/122_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/37_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/42_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/100_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/41_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_5.png                             |    0 
 QiaoJiaSystem/build/data/voc.names                                    |   20 
 QiaoJiaSystem/build/data/labels/101_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/88_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/59_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/70_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/109_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/54_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/126_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/67_5.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h   |   48 
 QiaoJiaSystem/build/data/labels/75_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/119_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/72_0.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h                    |   22 
 QiaoJiaSystem/build/data/labels/118_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/71_2.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice               |   24 
 QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h                     |   28 
 QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp            |   86 
 QiaoJiaSystem/build/data/labels/97_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/32_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/125_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/50_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/110_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/51_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/79_7.png                              |    0 
 QiaoJiaSystem/StructureApp/AppPipeController.h                        |  116 
 QiaoJiaSystem/build/data/labels/62_6.png                              |    0 
 QiaoJiaSystem/build/cfg/yolov3-voc.cfg                                |  785 +
 QiaoJiaSystem/build/data/labels/122_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/63_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/67_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/105_5.png                             |    0 
 QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp                           |  312 
 QiaoJiaSystem/build/data/labels/66_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/85_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/39_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_7.png                              |    0 
 QiaoJiaSystem/RecordVideo/CMakeLists.txt                              |   88 
 QiaoJiaSystem/build/FaceDetectServer                                  |    0 
 QiaoJiaSystem/build/data/labels/38_3.png                              |    0 
 QiaoJiaSystem/build/erl_crash.dump                                    | 10393 +++++++++++++
 QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp                    |   54 
 QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt                        |  228 
 QiaoJiaSystem/build/data/labels/75_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/76_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/46_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/54_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/84_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/120_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/87_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/101_3.png                             |    0 
 QiaoJiaSystem/StructureApp/TrackingTrigger.h                          |   69 
 QiaoJiaSystem/build/data/labels/92_2.png                              |    0 
 QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp                       |  854 +
 QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h                       |   59 
 QiaoJiaSystem/build/runTestCutImage.sh                                |    9 
 QiaoJiaSystem/build/data/labels/40_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/70_7.png                              |    0 
 QiaoJiaSystem/StructureApp/FaceExtractElement.h                       |   61 
 QiaoJiaSystem/build/data/labels/59_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_3.png                              |    0 
 QiaoJiaSystem/StructureApp/PerimeterElement.h                         |   82 
 QiaoJiaSystem/build/data/labels/69_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/71_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/100_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/58_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/63_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/47_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/109_6.png                             |    0 
 QiaoJiaSystem/build/configjson说明.txt                                  |   16 
 QiaoJiaSystem/build/data/labels/97_4.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp       |   91 
 QiaoJiaSystem/build/data/labels/32_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/118_3.png                             |    0 
 QiaoJiaSystem/LocalDBTool/CMakeLists.txt                              |   59 
 QiaoJiaSystem/build/data/labels/42_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/126_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/34_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/98_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/84_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/47_3.png                              |    0 
 QiaoJiaSystem/StructureApp/PerimeterElement.cpp                       |  241 
 QiaoJiaSystem/build/data/labels/63_4.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri                           |   22 
 QiaoJiaSystem/build/data/labels/125_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/66_6.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp                          |    1 
 QiaoJiaSystem/build/data/labels/118_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/97_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/110_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/93_2.png                              |    0 
 QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h                         |   38 
 QiaoJiaSystem/build/data/labels/122_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/42_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_3.png                             |    0 
 QiaoJiaSystem/FaceSearchServer/rpc/gen.sh                             |    3 
 QiaoJiaSystem/build/data/labels/105_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/50_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/82_7.png                              |    0 
 QiaoJiaSystem/StructureApp/YoloRpcElement.h                           |   52 
 QiaoJiaSystem/VideoServer/QiaoJia/widget.h                            |   22 
 QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user                    |  271 
 QiaoJiaSystem/build/data/labels/126_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/39_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/90_7.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp                           |   70 
 QiaoJiaSystem/build/DataWebServer                                     |    0 
 QiaoJiaSystem/build/data/labels/58_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/71_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/92_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/102_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/101_0.png                             |    0 
 QiaoJiaSystem/StructureApp/ImageDrawElement.h                         |   30 
 QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py                 |   10 
 QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h                    |   92 
 QiaoJiaSystem/build/data/labels/100_2.png                             |    0 
 QiaoJiaSystem/RapidStructureApp/TriggerElement.h                      |   51 
 QiaoJiaSystem/build/data/labels/98_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/70_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/51_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/67_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/43_0.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/myThread.h                          |  128 
 QiaoJiaSystem/build/data/labels/109_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/59_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/62_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/54_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/109_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/97_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/122_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/84_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/118_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/34_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/125_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/94_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_2.png                             |    0 
 QiaoJiaSystem/LocalDBTool/GetUUId.h                                   |   27 
 QiaoJiaSystem/build/data/labels/93_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/105_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/50_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_4.png                             |    0 
 QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h                           |   85 
 QiaoJiaSystem/build/data/labels/110_2.png                             |    0 
 QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user                      |  484 
 QiaoJiaSystem/build/data/labels/102_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/47_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/63_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_4.png                             |    0 
 QiaoJiaSystem/YoloServer/CMakeLists.txt                               |  103 
 QiaoJiaSystem/build/data/labels/66_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/74_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/58_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/39_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/71_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_3.png                              |    0 
 QiaoJiaSystem/DataManagerServer/AppPipeController.cpp                 |   33 
 QiaoJiaSystem/build/data/labels/74_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_2.png                              |    0 
 QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp                 |  194 
 QiaoJiaSystem/build/data/labels/126_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/42_1.png                              |    0 
 QiaoJiaSystem/RecordVideo/VideoRecorderManager.h                      |   25 
 QiaoJiaSystem/build/data/labels/92_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/98_2.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h           |   26 
 QiaoJiaSystem/build/data/labels/59_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/62_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/51_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/54_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/70_5.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/widget.ui                           |   20 
 QiaoJiaSystem/build/data/labels/43_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/75_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/101_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/67_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/35_0.png                              |    0 
 QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp                     |  276 
 QiaoJiaSystem/build/data/labels/37_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/36_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/111_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/53_4.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp           |  463 
 QiaoJiaSystem/build/data/labels/109_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/125_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/67_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/48_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/112_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/82_5.png                              |    0 
 QiaoJiaSystem/DataManagerServer/net_config/net_config.h               |   61 
 QiaoJiaSystem/build/data/labels/35_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/34_5.png                              |    0 
 QiaoJiaSystem/build/data/coco.names                                   |   80 
 QiaoJiaSystem/build/data/labels/66_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/64_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/126_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/81_1.png                              |    0 
 QiaoJiaSystem/StructureApp/FaceRpcElement.h                           |   52 
 QiaoJiaSystem/build/data/labels/80_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/65_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/71_6.png                              |    0 
 QiaoJiaSystem/StructureApp/StructureAppI.h                            |   50 
 QiaoJiaSystem/build/data/labels/57_7.png                              |    0 
 QiaoJiaSystem/build/config.db                                         |    0 
 QiaoJiaSystem/build/data/labels/110_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/89_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/32_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_1.png                              |    0 
 QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp                           |  117 
 QiaoJiaSystem/build/data/labels/105_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/85_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/69_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/62_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_7.png                              |    0 
 QiaoJiaSystem/CMakeLists.txt                                          |   28 
 QiaoJiaSystem/build/data/labels/116_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/88_2.png                              |    0 
 QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice                         |   24 
 QiaoJiaSystem/build/data/labels/51_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/35_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_0.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/CMakeLists.txt                         |   75 
 QiaoJiaSystem/build/data/labels/38_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/50_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/124_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/39_5.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h                            |   46 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h            |   25 
 QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py                    |  172 
 QiaoJiaSystem/build/data/labels/84_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/107_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/114_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/make_labels.py                        |   23 
 QiaoJiaSystem/build/data/labels/118_7.png                             |    0 
 QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h                    |   27 
 QiaoJiaSystem/build/data/labels/123_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/89_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/48_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_0.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp                             |   70 
 QiaoJiaSystem/build/data/labels/59_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/112_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/82_6.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h              |   28 
 QiaoJiaSystem/build/data/labels/111_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_7.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp                    |   89 
 QiaoJiaSystem/build/data/labels/37_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/44_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_7.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp                       |   17 
 QiaoJiaSystem/build/data/labels/125_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/80_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/109_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/97_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/71_7.png                              |    0 
 QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp             |  969 +
 QiaoJiaSystem/build/data/labels/103_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/57_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/35_3.png                              |    0 
 QiaoJiaSystem/build/startHC.sh                                        |    3 
 QiaoJiaSystem/build/data/labels/64_2.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp                |  265 
 QiaoJiaSystem/build/data/labels/34_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp          |  135 
 QiaoJiaSystem/RecordVideo/RecordVideoI.cpp                            |   38 
 QiaoJiaSystem/build/data/labels/126_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/84_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/62_2.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp                          |   26 
 QiaoJiaSystem/build/data/labels/116_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/51_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/88_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/105_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/85_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/39_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/55_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/66_3.png                              |    0 
 QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp                           |  496 
 QiaoJiaSystem/build/data/labels/60_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_1.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/main.cpp                            |  436 
 QiaoJiaSystem/build/data/labels/86_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/107_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/123_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/53_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_4.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h             |   67 
 QiaoJiaSystem/build/data/labels/50_4.png                              |    0 
 QiaoJiaSystem/build/killAll.sh                                        |    9 
 QiaoJiaSystem/build/data/labels/123_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/67_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/107_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/64_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/126_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/34_3.png                              |    0 
 QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h                           | 1571 ++
 QiaoJiaSystem/YoloServer/ImageDrawElement.h                           |   20 
 QiaoJiaSystem/build/data/labels/33_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/114_7.png                             |    0 
 QiaoJiaSystem/FaceDetectServer/main.cpp                               |   40 
 QiaoJiaSystem/build/data/labels/53_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/37_5.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp            |   38 
 QiaoJiaSystem/build/data/labels/52_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/69_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/62_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/88_7.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h           |   29 
 QiaoJiaSystem/build/data/labels/87_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/125_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/109_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/112_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/48_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_5.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp          |    4 
 QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h                        |  142 
 QiaoJiaSystem/build/data/labels/35_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/51_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/32_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/54_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/84_5.png                              |    0 
 QiaoJiaSystem/VideoServer/CMakeLists.txt                              |   50 
 QiaoJiaSystem/build/data/labels/50_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/65_2.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/main_extract.cpp                       |   60 
 QiaoJiaSystem/build/data/labels/32_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/49_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/67_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/85_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/36_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/63_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/108_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/68_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/82_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/124_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/66_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/55_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/87_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/CMakeLists.txt                         |  151 
 QiaoJiaSystem/build/data/labels/69_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/88_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/120_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/61_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/67_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_3.png                              |    0 
 QiaoJiaSystem/RecordVideo/ImageGrabberI.h                             |   21 
 QiaoJiaSystem/build/data/labels/39_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/52_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/main.cpp                               |   37 
 QiaoJiaSystem/build/data/labels/64_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/126_2.png                             |    0 
 QiaoJiaSystem/build/test_cpu_mem.sh                                   |   28 
 QiaoJiaSystem/build/data/labels/34_4.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp               |    5 
 QiaoJiaSystem/build/data/labels/65_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/53_7.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp    |   90 
 QiaoJiaSystem/build/data/labels/51_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/87_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/122_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/37_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/112_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/32_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/89_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/123_0.png                             |    0 
 QiaoJiaSystem/DataManagerServer/http_configserver.cpp                 | 2787 +++
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp         |  105 
 QiaoJiaSystem/build/data/labels/109_0.png                             |    0 
 QiaoJiaSystem/build/StructureApp                                      |    0 
 QiaoJiaSystem/build/data/labels/69_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/125_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/88_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/35_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_6.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice                     |   61 
 QiaoJiaSystem/build/data/labels/81_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/122_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/50_6.png                              |    0 
 QiaoJiaSystem/DataManagerServer/main.cpp                              |   31 
 QiaoJiaSystem/build/data/labels/84_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/124_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/87_5.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h                       |   43 
 QiaoJiaSystem/build/KeepRight                                         |    0 
 QiaoJiaSystem/build/data/labels/82_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/39_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h             |   85 
 QiaoJiaSystem/build/data/labels/85_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/33_4.png                              |    0 
 QiaoJiaSystem/StructureApp/CMakeLists.txt                             |  127 
 QiaoJiaSystem/build/data/labels/110_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/63_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/52_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/66_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_4.png                              |    0 
 QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py                  |   10 
 QiaoJiaSystem/build/data/labels/74_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/57_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/115_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/56_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/116_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/86_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/87_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/120_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/43_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp |  145 
 QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp                  |    0 
 QiaoJiaSystem/build/data/labels/90_2.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h                   |   56 
 QiaoJiaSystem/RecordVideo/VideoRecorder.cpp                           |  146 
 QiaoJiaSystem/build/testLoadDB.sh                                     |   17 
 QiaoJiaSystem/build/data/labels/44_3.png                              |    0 
 QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp                  |  112 
 QiaoJiaSystem/build/data/labels/45_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_4.png                              |    0 
 QiaoJiaSystem/StructureApp/rpc/StructureApp.ice                       |   17 
 QiaoJiaSystem/build/data/labels/85_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/51_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/52_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/69_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_4.png                              |    0 
 QiaoJiaSystem/build/data/coco9k.map                                   |   80 
 QiaoJiaSystem/build/data/labels/53_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/61_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/108_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/49_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/82_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/123_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/124_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/66_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/110_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/48_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/95_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/79_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/37_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/125_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/112_0.png                             |    0 
 QiaoJiaSystem/VideoAnalysFromHC/myThread.h                            |  128 
 QiaoJiaSystem/build/data/labels/94_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/40_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/32_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/35_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_4.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h                 |  158 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp          |   68 
 QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp                      |  363 
 QiaoJiaSystem/StructureApp/AppPipeController.cpp                      |  508 
 QiaoJiaSystem/RecordVideo/VideoRecorder.h                             |   56 
 QiaoJiaSystem/RecordVideo/main.cpp                                    |   93 
 QiaoJiaSystem/build/data/labels/111_4.png                             |    0 
 QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp                       |   98 
 QiaoJiaSystem/build/data/labels/103_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/65_4.png                              |    0 
 QiaoJiaSystem/RecordVideo/rpc/test2.py                                |   70 
 QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp                     |    0 
 QiaoJiaSystem/build/data/labels/64_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/72_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/87_2.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h                 |  678 
 QiaoJiaSystem/DataManagerServer/AppPipeController.h                   |   18 
 QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp                   |   55 
 QiaoJiaSystem/build/data/labels/56_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/74_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/90_1.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp                        |    1 
 QiaoJiaSystem/build/data/labels/85_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/116_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/44_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/86_3.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/main.cpp                              |   36 
 QiaoJiaSystem/build/data/labels/69_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/61_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/52_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/107_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/115_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/77_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/Cleint.cpp                             |  438 
 QiaoJiaSystem/build/data/labels/53_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/48_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/107_5.png                             |    0 
 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp                 |  304 
 QiaoJiaSystem/build/data/labels/79_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_5.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp                     |  192 
 QiaoJiaSystem/build/data/labels/65_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/95_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/79_1.png                              |    0 
 QiaoJiaSystem/YoloServer/ImageDrawElement.cpp                         |   30 
 QiaoJiaSystem/build/data/labels/123_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/64_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/34_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/108_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/93_7.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/AppController.cpp                     |  132 
 QiaoJiaSystem/StructureApp/main.cpp                                   |  120 
 QiaoJiaSystem/build/data/labels/32_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/82_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/110_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/124_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/103_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/111_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/120_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/35_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/112_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/94_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/49_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/57_2.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp                  |   28 
 QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp                     |   79 
 QiaoJiaSystem/build/WebFDSClient.conf                                 |   62 
 QiaoJiaSystem/build/startAllServer.sh                                 |   44 
 QiaoJiaSystem/build/data/labels/44_1.png                              |    0 
 QiaoJiaSystem/YoloServer/DnDetect.cpp                                 |  121 
 QiaoJiaSystem/DataManagerServer/demo.cpp                              |   28 
 QiaoJiaSystem/build/data/labels/40_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/115_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/72_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/103_1.png                             |    0 
 QiaoJiaSystem/build/scpToSer.sh                                       |   40 
 QiaoJiaSystem/PerimeterAlarm/main.cpp                                 |  113 
 QiaoJiaSystem/build/data/labels/90_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/53_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/116_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/57_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/82_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/108_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/88_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_2.png                              |    0 
 QiaoJiaSystem/DataManagerServer/web-server接口.txt                      |  605 
 QiaoJiaSystem/build/data/labels/124_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_0.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h                       |  324 
 QiaoJiaSystem/build/data/labels/111_2.png                             |    0 
 QiaoJiaSystem/StructureApp/NewRecordVideoElement.h                    |   38 
 QiaoJiaSystem/build/data/labels/110_4.png                             |    0 
 QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h                            |   52 
 QiaoJiaSystem/build/data/labels/107_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/52_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/61_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/49_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_6.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h                       | 1459 +
 QiaoJiaSystem/build/data/labels/119_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/64_4.png                              |    0 
 QiaoJiaSystem/StructureApp/ImageDrawElement.cpp                       |   42 
 QiaoJiaSystem/build/data/labels/112_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/123_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/95_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/94_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/83_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/48_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/37_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_6.png                              |    0 
 QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h                          |   37 
 QiaoJiaSystem/build/data/labels/73_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/56_5.png                              |    0 
 QiaoJiaSystem/DataManagerServer/http_configserver.h                   |  178 
 QiaoJiaSystem/build/data/labels/120_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/104_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/60_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/103_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/100_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/41_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/69_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/72_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/57_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/53_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/115_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/76_7.png                              |    0 
 QiaoJiaSystem/StructureApp/RecordVideoElement.h                       |   33 
 QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h                         |   19 
 QiaoJiaSystem/build/data/labels/124_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/65_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/45_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_3.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h                   |   21 
 QiaoJiaSystem/build/data/labels/119_6.png                             |    0 
 QiaoJiaSystem/DataManagerServer/http_examples.cpp                     |  264 
 QiaoJiaSystem/build/data/labels/88_1.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro                         |   30 
 QiaoJiaSystem/build/data/labels/116_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/108_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/44_2.png                              |    0 
 QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp                 |   80 
 QiaoJiaSystem/build/data/labels/96_1.png                              |    0 
 QiaoJiaSystem/LocalDBTool/GetUUId.cpp                                 |    6 
 QiaoJiaSystem/build/data/labels/111_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/52_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/120_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/36_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/80_7.png                              |    0 
 QiaoJiaSystem/YoloServer/rpc/gen.sh                                   |    1 
 QiaoJiaSystem/build/data/labels/123_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/64_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/68_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/49_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/61_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/65_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/45_2.png                              |    0 
 QiaoJiaSystem/RecordVideo/rpc/testClient.py                           |   74 
 QiaoJiaSystem/build/data/labels/95_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/87_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/37_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/81_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/107_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/48_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/56_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/112_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/40_0.png                              |    0 
 QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp                         |  406 
 QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db                        |    0 
 QiaoJiaSystem/build/data/labels/94_1.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt             |   74 
 QiaoJiaSystem/build/data/labels/93_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/54_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/76_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/124_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/108_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/100_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/113_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/70_2.png                              |    0 
 QiaoJiaSystem/YoloServer/rpc/YoloServer.ice                           |   27 
 QiaoJiaSystem/build/data/labels/47_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/42_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/102_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/111_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/95_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/101_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/63_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/56_2.png                              |    0 
 QiaoJiaSystem/build/FaceExtractServer                                 |    0 
 QiaoJiaSystem/build/data/labels/65_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/59_1.png                              |    0 
 QiaoJiaSystem/StructureApp/StructureAppI.cpp                          |   90 
 QiaoJiaSystem/build/data/labels/41_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/40_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/58_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/119_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/49_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/72_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/120_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/61_5.png                              |    0 
 QiaoJiaSystem/build/cfg/coco.data                                     |    8 
 QiaoJiaSystem/build/data/labels/103_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/44_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/74_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/98_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_3.png                              |    0 
 QiaoJiaSystem/build/runWebSer.sh                                      |   13 
 QiaoJiaSystem/build/data/labels/117_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/56_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_3.png                             |    0 
 QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt                           |  121 
 QiaoJiaSystem/build/data/labels/43_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/90_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/75_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/115_3.png                             |    0 
 QiaoJiaSystem/RecordVideo/config.cfg                                  |    1 
 QiaoJiaSystem/build/data/labels/79_5.png                              |    0 
 QiaoJiaSystem/StructureApp/FaceRpcElement.cpp                         |  168 
 QiaoJiaSystem/build/data/labels/106_4.png                             |    0 
 QiaoJiaSystem/build/fastDfsClient.conf                                |   62 
 QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp                          |   14 
 QiaoJiaSystem/build/data/labels/45_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/122_6.png                             |    0 
 QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h                  |   64 
 QiaoJiaSystem/build/data/labels/78_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/38_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/119_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/70_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/93_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/40_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/92_6.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/AppController.h                       |   37 
 QiaoJiaSystem/build/data/labels/47_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/43_3.png                              |    0 
 QiaoJiaSystem/build/yolov3.weights                                    |    0 
 QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp                          |  356 
 QiaoJiaSystem/build/data/labels/108_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/54_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_3.png                              |    0 
 QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp                         | 1385 +
 QiaoJiaSystem/build/data/labels/58_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/49_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/41_2.png                              |    0 
 QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp             |  185 
 QiaoJiaSystem/build/data/labels/102_3.png                             |    0 
 QiaoJiaSystem/build/data/labels/72_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/94_7.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp                  |   91 
 QiaoJiaSystem/build/data/labels/111_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/101_4.png                             |    0 
 QiaoJiaSystem/StructureApp/rpc/StructureApp.h                         | 1268 +
 QiaoJiaSystem/build/data/labels/95_4.png                              |    0 
 QiaoJiaSystem/StructureApp/RecordVideoElement.cpp                     |   63 
 QiaoJiaSystem/build/data/labels/56_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/100_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/98_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/45_4.png                              |    0 
 QiaoJiaSystem/runPath.sh                                              |    2 
 QiaoJiaSystem/build/FaceSearchServer                                  |    0 
 QiaoJiaSystem/PerimeterAlarm/AppPaController.h                        |  168 
 QiaoJiaSystem/build/data/labels/98_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/76_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/120_6.png                             |    0 
 QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h                       |   73 
 QiaoJiaSystem/build/data/labels/90_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/41_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/60_6.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp                 |  112 
 QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py                      |  285 
 QiaoJiaSystem/build/data/labels/74_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/52_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/91_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/63_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/75_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/122_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/78_1.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp                     |  861 +
 QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp               |  118 
 QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py                      |   10 
 QiaoJiaSystem/build/VideoAnalysFromHC                                 |    0 
 QiaoJiaSystem/build/data/labels/115_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/61_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/79_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/76_5.png                              |    0 
 QiaoJiaSystem/StructureApp/YoloRpcElement.cpp                         |  199 
 QiaoJiaSystem/build/data/labels/92_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/121_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/62_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/105_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/46_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/101_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/43_4.png                              |    0 
 QiaoJiaSystem/build/runAll.sh                                         |   52 
 QiaoJiaSystem/build/PerimeterAlarm                                    |    0 
 QiaoJiaSystem/build/data/labels/95_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/76_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/119_3.png                             |    0 
 QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp               |  515 
 QiaoJiaSystem/build/data/labels/57_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/92_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/58_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/102_4.png                             |    0 
 QiaoJiaSystem/build/data/labels/41_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/70_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/117_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/48_7.png                              |    0 
 QiaoJiaSystem/YoloServer/DnDetect.h                                   |   26 
 QiaoJiaSystem/build/data/labels/107_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/104_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/114_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/94_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/42_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/72_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/118_2.png                             |    0 
 QiaoJiaSystem/build/data/labels/59_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/115_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/75_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/56_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/100_6.png                             |    0 
 QiaoJiaSystem/YoloServer/main.cpp                                     |   35 
 QiaoJiaSystem/build/data/labels/45_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/79_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/103_5.png                             |    0 
 QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp                   |  100 
 QiaoJiaSystem/build/data/labels/106_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/98_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/97_5.png                              |    0 
 QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp                        |  198 
 QiaoJiaSystem/build/data/labels/40_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/102_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/43_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/61_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/93_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/47_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/74_3.png                              |    0 
 QiaoJiaSystem/LocalDBTool/new_file                                    |    0 
 QiaoJiaSystem/build/data/labels/42_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/44_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/116_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/55_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/113_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/119_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/41_6.png                              |    0 
 QiaoJiaSystem/build/cfg/yolov3.cfg                                    |  789 +
 QiaoJiaSystem/build/data/labels/108_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/49_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/71_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/43_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/90_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/99_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/102_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/58_1.png                              |    0 
 QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp                        |  105 
 QiaoJiaSystem/build/data/labels/46_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/101_6.png                             |    0 
 QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp                 |   52 
 QiaoJiaSystem/build/data/labels/95_6.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_7.png                              |    0 
 QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h         |   27 
 QiaoJiaSystem/build/data/labels/76_3.png                              |    0 
 QiaoJiaSystem/RecordVideo/RecordVideoI.h                              |   14 
 QiaoJiaSystem/build/data/labels/92_4.png                              |    0 
 QiaoJiaSystem/build/data/labels/104_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/45_6.png                              |    0 
 QiaoJiaSystem/build/LocalDataDB                                       |    0 
 QiaoJiaSystem/build/data/labels/57_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/59_0.png                              |    0 
 QiaoJiaSystem/build/data/labels/73_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/40_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/70_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/78_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/42_6.png                              |    0 
 QiaoJiaSystem/RapidStructureApp/CMakeLists.txt                        |   74 
 QiaoJiaSystem/build/data/labels/118_0.png                             |    0 
 QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp           |  145 
 QiaoJiaSystem/build/data/labels/97_6.png                              |    0 
 QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp                        |  169 
 QiaoJiaSystem/build/data/labels/117_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/91_5.png                              |    0 
 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp                     |  230 
 QiaoJiaSystem/build/data/labels/97_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/41_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/106_7.png                             |    0 
 QiaoJiaSystem/build/data/labels/91_4.png                              |    0 
 QiaoJiaSystem/build/config.json                                       |   23 
 QiaoJiaSystem/build/syncDBClient                                      |    0 
 QiaoJiaSystem/VideoAnalysFromHC/main.cpp                              |  182 
 QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h                   |  118 
 QiaoJiaSystem/build/data/labels/94_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/75_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/72_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/103_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/115_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/100_5.png                             |    0 
 QiaoJiaSystem/build/data/labels/118_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/79_4.png                              |    0 
 QiaoJiaSystem/DataManagerServer/CMakeLists.txt                        |  202 
 QiaoJiaSystem/build/data/labels/98_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/105_7.png                             |    0 
 QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp                  |   93 
 QiaoJiaSystem/build/data/labels/71_1.png                              |    0 
 QiaoJiaSystem/build/data/labels/96_6.png                              |    0 
 QiaoJiaSystem/FaceDetectServer/main_detect.cpp                        |   59 
 QiaoJiaSystem/StructureApp/TrackingTrigger.cpp                        |    1 
 QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp                      | 2709 +++
 QiaoJiaSystem/build/data/labels/93_5.png                              |    0 
 QiaoJiaSystem/build/data/labels/77_3.png                              |    0 
 QiaoJiaSystem/build/data/labels/119_1.png                             |    0 
 QiaoJiaSystem/build/data/labels/44_6.png                              |    0 
 QiaoJiaSystem/YoloServer/rpc/YoloServer.h                             |  731 
 QiaoJiaSystem/build/data/labels/102_6.png                             |    0 
 QiaoJiaSystem/build/data/labels/116_0.png                             |    0 
 QiaoJiaSystem/build/data/labels/90_4.png                              |    0 
 QiaoJiaSystem/LocalDBTool/main.cpp                                    |  273 
 QiaoJiaSystem/build/data/labels/47_7.png                              |    0 
 QiaoJiaSystem/build/data/labels/74_2.png                              |    0 
 QiaoJiaSystem/build/data/labels/58_0.png                              |    0 
 981 files changed, 46,660 insertions(+), 0 deletions(-)

diff --git a/QiaoJiaSystem/CMakeLists.txt b/QiaoJiaSystem/CMakeLists.txt
new file mode 100644
index 0000000..8dcb3f2
--- /dev/null
+++ b/QiaoJiaSystem/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.5)
+project(QiaoJiaSystem)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-fpermissive)
+
+include_directories(
+    ./
+    ../BasicPlatForm/
+    ../BasicPlatForm/libs/jsoncpp/include
+    ../BasicPlatForm/libs/opencv/include
+    ../BasicPlatForm/libs/libuuid/include
+)
+
+add_subdirectory(StructureApp)
+add_subdirectory(FaceDetectServer)
+#add_subdirectory(YoloServer)
+add_subdirectory(FaceSearchServer)
+add_subdirectory(VideoAnalysFromHC)
+add_subdirectory(RapidStructureApp)
+add_subdirectory(RecordVideo)
+add_subdirectory(DataManagerServer)
+
+
+#add_subdirectory(FaceSearchDbWithImg)
+
diff --git a/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp b/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp
new file mode 100644
index 0000000..1b7a76a
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/AppPipeController.cpp
@@ -0,0 +1,33 @@
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+//#include <sstream>
+#include <algorithm>
+AppPipeController::AppPipeController(int index, const Json::Value &json):
+    videoCaptureElement(json["rtsp"].asString(), 25,3000,appPref.getLongData("gpu.index")),
+    index(index), videoPublishElement(appPref.getStringData("publish.basepath")+".flv",
+                        cv::Size(appPref.getIntData("pulish.width"),appPref.getIntData("pulish.height")),
+                        "flv", 25, appPref.getLongData("gpu.index"))
+{
+    videoCaptureElement.registerConnector([&]{
+        //if(!videoPublishElement.isBusy()){
+            videoPublishElement.setImage(videoCaptureElement.getImage());
+            //videoPublishElement.submit();
+        //}
+
+    });
+
+    registerElement(videoCaptureElement);
+    registerElement(videoPublishElement);
+
+    videoCaptureElement.setOutPutInterval(3);
+}
+
+std::string AppPipeController::getRtmp()
+{
+    std::string ret = videoPublishElement.getPath();
+    size_t pos = ret.find(".flv");
+    ret = ret.substr(0,pos);
+    INFO(ret);
+    return ret;
+}
diff --git a/QiaoJiaSystem/DataManagerServer/AppPipeController.h b/QiaoJiaSystem/DataManagerServer/AppPipeController.h
new file mode 100644
index 0000000..fb7c9b1
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/AppPipeController.h
@@ -0,0 +1,18 @@
+#ifndef APPPIPECONTROLLER_H
+#define APPPIPECONTROLLER_H
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <jsoncpp/json/json.h>
+
+class AppPipeController : public PipeController
+{
+public:
+    AppPipeController(int index, const Json::Value& json);
+    std::string getRtmp();
+private:
+    ffmpeg::VideoCaptureElement videoCaptureElement;
+    ffmpeg::VideoPublishElement videoPublishElement;
+    int index;
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/DataManagerServer/CMakeLists.txt b/QiaoJiaSystem/DataManagerServer/CMakeLists.txt
new file mode 100644
index 0000000..dd5cd26
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/CMakeLists.txt
@@ -0,0 +1,202 @@
+cmake_minimum_required(VERSION 3.5)
+project(DataWebServer)
+
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+
+set(CMAKE_CXX_STANDARD 11)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+add_definitions(-DGLOG)
+set(CMAKE_BUILD_TYPE debug)
+
+include_directories(
+    ./
+    ../FaceSearchServer/CasiaFaceWrapper
+    ../VideoServer/QiaoJia/DB
+
+    #
+    ../LocalDBTool/
+    ../../BasicPlatForm/basic/db/sqlite/
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000/
+
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/libs/FastDFS/include
+    ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+    ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+    ../../BasicPlatForm/libs/ffmpeg/include
+
+    ../../BasicPlatForm/basic/util/fastdfs/
+    ../../BasicPlatForm/basic/util/curl/
+    ../../BasicPlatForm/basic/http_server/
+    ../../BasicPlatForm/libs/libuuid/include
+    ../../BasicPlatForm/libs/uniview/include
+
+    ../../../Erlang/syncDBTool
+
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/incCn
+
+    ../../BasicPlatForm/libs/libboost/include
+
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+
+)
+
+link_directories(
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+
+    /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+    /usr/local/cuda/lib64
+
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/cpu
+    ../../BasicPlatForm/libs/crul/lib
+    ../../BasicPlatForm/libs/FastDFS/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom/
+    ../../BasicPlatForm/libs/uniview/lib
+
+    ../../BasicPlatForm/libs/libboost/lib
+
+
+    ../../BasicPlatForm/basic/db/sqlite/
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+)
+
+add_executable(DataWebServer
+    main.cpp
+    http_configserver.cpp
+    http_configserver.h
+
+    ./net_config/net_config.cpp
+    ./net_config/net_config.h
+    ../VideoServer/QiaoJia/DB/LDBTool.cpp
+    ./AppPipeController.cpp
+    ./AppPipeController.h
+
+    ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+    ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+    ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+
+
+    ../../../Erlang/syncDBTool/ErlangDbTool.cpp
+    #
+    ../LocalDBTool/GetUUId.cpp
+    ../LocalDBTool/SqliteFaceEncap.cpp
+    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+    )
+
+target_link_libraries(DataWebServer
+    glog
+    boost_system
+    boost_thread
+    boost_filesystem
+    ei
+    erl_interface_st
+    ei_st
+    erl_interface
+    uuid
+    rt
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+
+    opencv_world
+    THFaceImage
+    THFeature
+    THFaceProperty
+
+    curl
+    fastcommon
+    fdfsclient
+
+    Qt5Core
+    Qt5Sql
+    sqlite3
+
+    jsoncpp
+
+    imos_mw_sdk
+    mw_sdk_player
+    mw_sdk_ipc
+    mw_sdk_bp
+    mw_sdk_rm
+
+    HCCore
+    hcnetsdk
+    pthread
+    )
+
+#add_executable(Apptest
+#    demo.cpp
+#    ./AppPipeController.cpp
+#    ./AppPipeController.h
+#
+#    ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+#    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+#    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+#    ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+#    ../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
+#    ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+#    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+#    )
+#
+#target_link_libraries(Apptest
+#    boost_system
+#    boost_thread
+#    boost_filesystem
+#    ei
+#    erl_interface_st
+#    ei_st
+#    erl_interface
+#    #    uuid
+#    rt
+#    pthread
+#    avformat
+#    avcodec
+#    swresample
+#    swscale
+#    avutil
+#    bz2 dl z
+#
+#    opencv_world
+#    THFaceImage
+#    THFeature
+#    THFaceProperty
+#
+#    curl
+#    fastcommon
+#    fdfsclient
+#
+#    Qt5Core
+#    Qt5Sql
+#
+#    jsoncpp
+#
+#    HCCore
+#    hcnetsdk
+#    )
+
diff --git a/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp b/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp
new file mode 100644
index 0000000..cbff042
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/HttpSrvRetRecieve.hpp
@@ -0,0 +1,80 @@
+#ifndef HTTPSRVRETRECIEVE_H_XZL_201808171114
+#define HTTPSRVRETRECIEVE_H_XZL_201808171114
+
+#include "client_http.hpp"
+#include "server_http.hpp"
+
+// Added for the json-example
+#define BOOST_SPIRIT_THREADSAFE
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+// Added for the default_resource example
+#include <algorithm>
+#include <boost/filesystem.hpp>
+#include <fstream>
+#include <vector>
+#include <basic/debug/Debug.h>
+
+#ifdef HAVE_OPENSSL
+#include "crypto.hpp"
+#endif
+
+using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
+using HttpClient = SimpleWeb::Client<SimpleWeb::HTTP>;
+class HttpSrvRetRecieve
+{
+    using TASK_FUNCTION = std::function<std::string(std::string,unsigned short,std::string,std::shared_ptr<HttpServer::Response>&)>;
+    using OTHER_FUNCTION = std::function<void(int)>;
+public:
+    HttpSrvRetRecieve(const std::string& ip,const unsigned short port,const std::size_t& threadPoolSize)
+        :m_TASK_FUNCTION(nullptr)
+    {
+        m_server.config.address = ip;
+        m_server.config.port = port;
+        m_server.config.thread_pool_size = threadPoolSize;
+    }
+
+    int setInfo(const std::string& strInfo,const std::string& strType,TASK_FUNCTION f)
+    {
+        m_map_TASKFUNC[strInfo.substr(1,(strInfo.size()-2))] = f;
+        m_server.resource[strInfo][strType] = [this](std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request)
+        {
+            std::string strInfo =  request->path;
+            auto func = m_map_TASKFUNC[strInfo];
+            if(func != nullptr){
+                std::string strRet = func(request->remote_endpoint_address(),request->remote_endpoint_port(),request->content.string(),response);
+                if(strRet.size() > 0){
+                    DBG("strRet.size() > 0");
+                    response->write(strRet);
+                } else{
+                    ERR("strRet.size() <= 0");
+                }
+            }else{
+                std::cout << " func == nullptr " << std::endl;
+            }
+        };
+        m_server.on_error = [](std::shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code & /*ec*/)
+        {};
+    }
+
+    int start()
+    {
+        m_server_thread = std::make_shared<std::thread>([&]() {
+            // Start server
+            m_server.start();
+          });
+        return 0;
+    }
+    int waitForShutDown()
+    {
+        m_server_thread->join();
+    }
+
+private:
+    HttpServer m_server;
+    TASK_FUNCTION m_TASK_FUNCTION;
+    std::map<std::string,TASK_FUNCTION> m_map_TASKFUNC;
+    std::shared_ptr<std::thread> m_server_thread;
+};
+#endif
diff --git a/QiaoJiaSystem/DataManagerServer/demo.cpp b/QiaoJiaSystem/DataManagerServer/demo.cpp
new file mode 100644
index 0000000..8756a8c
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/demo.cpp
@@ -0,0 +1,28 @@
+//
+// Created by ps on 18-9-18.
+//
+
+#include <AppPipeController.h>
+#include <basic/util/app/AppPreference.hpp>
+
+
+int main() {
+    Json::Value json;
+    json["rtsp"] = "rtsp://admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream";
+
+    std::string publish_basepath = "rtmp://localhost:1934/live/cam" + std::to_string(554);
+    appPref.setLongData("gpu.index", 0);
+    appPref.setStringData("publish.basepath", publish_basepath);
+    appPref.setIntData("pulish.width", 640);
+    appPref.setIntData("pulish.height", 360);
+
+    AppPipeController a(0, json);
+    a.start();
+
+    getchar();
+
+    a.stop();
+    a.wait();
+
+    return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
new file mode 100644
index 0000000..5505ad3
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -0,0 +1,2787 @@
+#include <iostream>
+#include <VideoServer/QiaoJia/DB/DBStruct.h>
+#include <jsoncpp/json/json.h>
+#include "http_configserver.h"
+#include <QString>
+#include <basic/util/app/AppConfig.h>
+#include "net_config/net_config.h"
+#include "HCNetSDK.h"
+#include "univiewDriver.h"
+#include <basic/util/app/AppPreference.hpp>
+#include "HttpRequestWithCrul.hpp"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <GetUUId.h>
+
+#include <uuid/uuid.h>
+//#include "HcRecord.h"
+#include <time.h>
+#include <dirent.h>
+using namespace std;
+
+devHttpServer_c::devHttpServer_c()
+    : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+    init();
+}
+
+devHttpServer_c::devHttpServer_c(std::string test)
+    : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+
+    fdfsClient.rwLock.wrlock();
+    fdfsClient.fastFds = new FastFds("WebFDSClient.conf");
+    fdfsClient.rwLock.unlock();
+}
+
+
+devHttpServer_c::devHttpServer_c(std::string ip, int port, int pthNum)
+    : _HttpSrvRetRecieve(ip, port, pthNum), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+
+    auto erlNode = appConfig.getStringProperty("erlNode");
+    auto erlCookie = appConfig.getStringProperty("erlCookie");
+    auto erlPath = appConfig.getStringProperty("erlPath");
+    auto erlFatherNode = appConfig.getStringProperty("erlFatherNode");
+    if (erlNode.size() > 0 && erlCookie.size() > 0) {
+        string str_tmp = "DataWebserver";
+        erlangDbTool = new ErlangTool::ErlangDbTool(erlPath, erlNode, erlCookie, str_tmp);
+        if (erlangDbTool->initErlang() == 1) {
+            erlangDbTool->startNodeDb(erlFatherNode);
+        } else {
+            DBG("not is startNodeDb");
+        }
+    }
+    init();
+}
+
+devHttpServer_c::~devHttpServer_c() {
+
+}
+
+
+void devHttpServer_c::init(void) {
+
+    std::string strDevId = appConfig.getStringProperty("DEV_ID");
+//    DSVAD010120181119
+    m_batch = strDevId.substr(5, 2);
+    m_SerialNumber = strDevId.substr(7, 2);
+
+
+    fdfsClient.rwLock.wrlock();
+    fdfsClient.fastFds = new FastFds("WebFDSClient.conf");
+    fdfsClient.rwLock.unlock();
+
+    _HttpSrvRetRecieve.setInfo("^/dev_show$", "POST", std::bind(&devHttpServer_c::dev_show, this,
+                                                                std::placeholders::_1, std::placeholders::_2,
+                                                                std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/dev_edit$", "POST", std::bind(&devHttpServer_c::dev_edit, this,
+                                                                std::placeholders::_1, std::placeholders::_2,
+                                                                std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/devchn_show$", "POST", std::bind(&devHttpServer_c::devchn_show, this,
+                                                                   std::placeholders::_1, std::placeholders::_2,
+                                                                   std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/devchn_edit$", "POST", std::bind(&devHttpServer_c::devchn_edit, this,
+                                                                   std::placeholders::_1, std::placeholders::_2,
+                                                                   std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/dev_search_chns$", "POST", std::bind(&devHttpServer_c::dev_search_chns, this,
+                                                                       std::placeholders::_1, std::placeholders::_2,
+                                                                       std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/chk_chn_connet$", "POST", std::bind(&devHttpServer_c::chk_chn_connet, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/cam_edit$", "POST", std::bind(&devHttpServer_c::cam_edit, this,
+                                                                std::placeholders::_1, std::placeholders::_2,
+                                                                std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/cam_show$", "POST", std::bind(&devHttpServer_c::cam_show, this,
+                                                                std::placeholders::_1, std::placeholders::_2,
+                                                                std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/chk_cam_connet$", "POST", std::bind(&devHttpServer_c::chk_cam_connet, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/chk_cam_disconnet$", "POST", std::bind(&devHttpServer_c::chk_cam_disconnet, this,
+                                                                         std::placeholders::_1, std::placeholders::_2,
+                                                                         std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/dev_del$", "POST", std::bind(&devHttpServer_c::dev_del, this,
+                                                               std::placeholders::_1, std::placeholders::_2,
+                                                               std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/cam_del$", "POST", std::bind(&devHttpServer_c::cam_del, this,
+                                                               std::placeholders::_1, std::placeholders::_2,
+                                                               std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/server_info_edit$", "POST", std::bind(&devHttpServer_c::server_info_edit, this,
+                                                                        std::placeholders::_1, std::placeholders::_2,
+                                                                        std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/server_info_show$", "POST", std::bind(&devHttpServer_c::server_info_show, this,
+                                                                        std::placeholders::_1, std::placeholders::_2,
+                                                                        std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/cut_dura_edit$", "POST", std::bind(&devHttpServer_c::cut_dura_edit, this,
+                                                                     std::placeholders::_1, std::placeholders::_2,
+                                                                     std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/cut_dura_show$", "POST", std::bind(&devHttpServer_c::cut_dura_show, this,
+                                                                     std::placeholders::_1, std::placeholders::_2,
+                                                                     std::placeholders::_3, std::placeholders::_4));
+
+    //#data modifyCluName
+    _HttpSrvRetRecieve.setInfo("^/addNode$", "POST", std::bind(&devHttpServer_c::addNode, this,
+                                                               std::placeholders::_1, std::placeholders::_2,
+                                                               std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/searchNode$", "POST", std::bind(&devHttpServer_c::searchNode, this,
+                                                                  std::placeholders::_1, std::placeholders::_2,
+                                                                  std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/modifyCluName$", "POST", std::bind(&devHttpServer_c::modifyCluName, this,
+                                                                     std::placeholders::_1, std::placeholders::_2,
+                                                                     std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/removeNode$", "POST", std::bind(&devHttpServer_c::removeNode, this,
+                                                                  std::placeholders::_1, std::placeholders::_2,
+                                                                  std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/createDatabase$", "POST", std::bind(&devHttpServer_c::createDatabase, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/deleteDatabase$", "POST", std::bind(&devHttpServer_c::deleteDatabase, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/updateDatabase$", "POST", std::bind(&devHttpServer_c::updateDatabase, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/findAllDatabase$", "POST", std::bind(&devHttpServer_c::findAllDatabase, this,
+                                                                       std::placeholders::_1, std::placeholders::_2,
+                                                                       std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/findLocalDatabase$", "POST", std::bind(&devHttpServer_c::findLocalDatabase, this,
+                                                                         std::placeholders::_1, std::placeholders::_2,
+                                                                         std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/addPerson$", "POST", std::bind(&devHttpServer_c::addPerson, this,
+                                                                 std::placeholders::_1, std::placeholders::_2,
+                                                                 std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/addPersons$", "POST", std::bind(&devHttpServer_c::addPersons, this,
+                                                                  std::placeholders::_1, std::placeholders::_2,
+                                                                  std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/personIsExists$", "POST", std::bind(&devHttpServer_c::personIsExists, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/updatePersonByOldId$", "POST", std::bind(&devHttpServer_c::updatePersonByOldId, this,
+                                                                           std::placeholders::_1, std::placeholders::_2,
+                                                                           std::placeholders::_3,
+                                                                           std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/delPerson$", "POST", std::bind(&devHttpServer_c::delPerson, this,
+                                                                 std::placeholders::_1, std::placeholders::_2,
+                                                                 std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/loadFaceFeaData$", "POST", std::bind(&devHttpServer_c::loadFaceFeaData, this,
+                                                                       std::placeholders::_1, std::placeholders::_2,
+                                                                       std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/netconfig_edit$", "POST", std::bind(&devHttpServer_c::netconfig_edit, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/netconfig_show$", "POST", std::bind(&devHttpServer_c::netconfig_show, this,
+                                                                      std::placeholders::_1, std::placeholders::_2,
+                                                                      std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/getAlarmImageFromVideoFile$", "POST",
+                               std::bind(&devHttpServer_c::getAlarmImageFromVideoFile, this,
+                                         std::placeholders::_1, std::placeholders::_2,
+                                         std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/getRecordVideoPath$", "POST",
+                               std::bind(&devHttpServer_c::getRecordVideoPath, this,
+                                         std::placeholders::_1, std::placeholders::_2,
+                                         std::placeholders::_3, std::placeholders::_4));
+
+    _HttpSrvRetRecieve.setInfo("^/findDevId$", "POST",
+                               std::bind(&devHttpServer_c::findDevId, this,
+                                         std::placeholders::_1, std::placeholders::_2,
+                                         std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/editDevName$", "POST",
+                               std::bind(&devHttpServer_c::editDevName, this,
+                                         std::placeholders::_1, std::placeholders::_2,
+                                         std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.setInfo("^/editDevId$", "POST",
+                               std::bind(&devHttpServer_c::editDevId, this,
+                                         std::placeholders::_1, std::placeholders::_2,
+                                         std::placeholders::_3, std::placeholders::_4));
+    _HttpSrvRetRecieve.start();
+    _HttpSrvRetRecieve.waitForShutDown();
+}
+
+
+//鏄剧ず纾佺洏闃靛垪
+std::string devHttpServer_c::dev_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Value value;
+    Json::Value elem;
+    bool ret = false;
+
+    std::list<Record_Storage_Dev> rec_list = db_c.searchDeviceTableAll();
+
+    list<Record_Storage_Dev>::iterator iter;
+
+    for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+        elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+        elem["str_dev_name"] = iter->str_dev_name.toStdString();
+        elem["str_addr"] = iter->str_addr.toStdString();
+        elem["str_longitude"] = iter->str_longitude.toStdString();
+        elem["str_latitude"] = iter->str_latitude.toStdString();
+        elem["str_ip"] = iter->str_ip.toStdString();
+        elem["n_port"] = iter->n_port;
+        elem["str_username"] = iter->str_username.toStdString();
+        elem["str_password"] = iter->str_password.toStdString();
+        elem["tim_start_time"] = iter->tim_start_time.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+        elem["n_duration"] = iter->n_duration;
+        elem["str_brand"] = iter->str_brand.toStdString();
+        elem["str_reserved"] = iter->str_reserved.toStdString();
+        cout << elem.toStyledString() << endl;
+        value.append(elem);
+    }
+    cout << value.toStyledString() << endl;
+//    std::string out = value.toStyledString();
+    std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+
+    return out;
+}
+
+//************************************
+// Method:    string_replace
+// FullName:  string_replace
+// Access:    public
+// Returns:   void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+    std::string::size_type pos = 0;
+    std::string::size_type srclen = strsrc.size();
+    std::string::size_type dstlen = strdst.size();
+
+    while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+        strBig.replace(pos, srclen, strdst);
+        pos += dstlen;
+    }
+}
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+                                 std::string passwd, std::string brand) {
+    std::string rtsp_url;
+    if (brand == "haikang") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/h264/ch1/main/av_stream";
+    } else if (brand == "dahua") {
+        //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/cam/realmonitor?channel=1&subtype=0";
+        //TODO
+    } else if (brand == "yushi") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/video1";
+    } else {
+        //TODO
+    }
+
+    return rtsp_url;
+}
+
+bool devHttpServer_c::getDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd, \
+                                        const char *brand, unsigned char *serialNumber) const {
+    std::string strBrand(brand);
+    if (strBrand == "haikang") {
+        getHKDevSerialNumber(ip, port, username, passwd, serialNumber);
+    } else if (strBrand == "dahua") {
+        //TODO
+    } else if (strBrand == "yushi") {
+        return getUVDevSerialNumber(ip, username, passwd, serialNumber);
+    } else {
+        //TODO
+    }
+
+    return true;
+}
+
+bool devHttpServer_c::getHKDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd,
+                                           unsigned char *serialNumber) const {
+    NET_DVR_Init();
+    //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+    NET_DVR_SetConnectTime(2000, 1);
+    NET_DVR_SetReconnect(10000, true);
+
+    NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+    struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+    strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+    struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+    strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+    strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+    //璁惧淇℃伅, 杈撳嚭鍙傛暟
+    NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+    LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+    if (m_lUserID < 0) {
+        //        printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+        NET_DVR_Cleanup();
+        return false;
+    }
+
+    if (serialNumber != NULL) {
+        memcpy(serialNumber, struDeviceInfoV40.struDeviceV30.sSerialNumber, SERIALNO_LEN);//TODO鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+        string serialNO((char *) serialNumber);
+
+        string_replace(serialNO, " ", "_");
+        serialNO.copy(serialNumber, serialNO.length(), 0);
+        *(serialNumber + serialNO.length()) = '\0';
+    }
+
+    //娉ㄩ攢鐢ㄦ埛
+    NET_DVR_Logout(m_lUserID);
+    //閲婃斁SDK璧勬簮
+    NET_DVR_Cleanup();
+}
+
+bool
+devHttpServer_c::getUVDevSerialNumber(const char *ip, const char *username, const char *passwd,
+                                      unsigned char *serialNumber) const {
+    ULONG ulRet = 0;
+    CHAR szUserID[1024] = {0};
+    IMOS_MW_BASIC_DEVICE_INFO_S *pstBasicInfo = NULL;
+
+    ulRet = IMOS_MW_Initiate();
+    if (ERR_COMMON_SUCCEED != ulRet) {
+        printf("Initiate ret[%lu]", ulRet);
+        return false;
+    }
+
+    /*sdk login*/
+    ulRet = IMOS_MW_Login(username, passwd, ip, 0, szUserID);
+    if (ERR_COMMON_SUCCEED != ulRet) {
+        printf("Login error ulRet[%lu]", ulRet);
+        return false;
+    }
+
+    pstBasicInfo = (IMOS_MW_BASIC_DEVICE_INFO_S *) malloc(sizeof(IMOS_MW_BASIC_DEVICE_INFO_S));
+    ulRet = IMOS_MW_GetDeviceStatus(szUserID, 0, IMOS_MW_STATUS_BASIC_INFO, (void *) pstBasicInfo);
+    if (ERR_COMMON_SUCCEED != ulRet) {
+        printf("GetDeviceStatus Error[%lu]\n", ulRet);
+        return false;
+    }
+
+    if (serialNumber != NULL) {
+        printf("SerialNumber   :%s\n", pstBasicInfo->szSerialNumber);
+        strcpy((char *) serialNumber, pstBasicInfo->szSerialNumber);//TODO鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+        string serialNO((char *) serialNumber);
+
+        string_replace(serialNO, " ", "_");
+        serialNO.copy(serialNumber, serialNO.length(), 0);
+        *(serialNumber + serialNO.length()) = '\0';
+        free(pstBasicInfo);
+    }
+
+    (VOID) IMOS_MW_Logout(szUserID);
+    (VOID) IMOS_MW_Cleanup();
+
+    return true;
+}
+
+bool devHttpServer_c::getDevChnList(const char *ip, const int port, const char *username, const char *passwd, \
+                                        const char *brand, std::vector<int> &lvecUsefulChans) const {
+    std::string strBrand(brand);
+    if (strBrand == "haikang") {
+        NET_DVR_Init();
+        //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+        NET_DVR_SetConnectTime(2000, 1);
+        NET_DVR_SetReconnect(10000, true);
+
+        //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+        NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+        struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+        strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+        struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+        strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+        strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+        //璁惧淇℃伅, 杈撳嚭鍙傛暟
+        NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+        LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+        if (m_lUserID < 0) {
+            //        printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+            NET_DVR_Cleanup();
+            return false;
+        }
+
+
+        NET_DVR_IPPARACFG_V40 ipOut;
+        long len;
+        int iGroupNO = 0 + 33;//33 offset
+        BOOL bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_IPPARACFG_V40, iGroupNO, &ipOut,
+                                         sizeof(NET_DVR_IPPARACFG_V40),
+                                         (LPDWORD) &len);
+        DWORD dErr = NET_DVR_GetLastError();
+        NET_DVR_PICCFG_V40 picOut;
+
+        bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_PICCFG_V40, iGroupNO, &picOut, sizeof(NET_DVR_PICCFG_V40),
+                                    (LPDWORD) &len);
+        dErr = NET_DVR_GetLastError();
+        lvecUsefulChans.clear();
+        for (int i = 0; i < ipOut.dwDChanNum; i++) {
+            if (ipOut.struStreamMode[i].uGetStream.struChanInfo.byEnable) {
+
+                BYTE byIPID, byIPIDHigh;
+                int iDevInfoIndex;
+                byIPID = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPID;
+                byIPIDHigh = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
+                iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - iGroupNO * 64;
+//                printf("IP channel no.%d is online, IP: %s\n", i + 1,
+//                       ipOut.struIPDevInfo[iDevInfoIndex].struIP.sIpV4);
+
+
+                lvecUsefulChans.push_back(i + 33);
+            }
+        }
+
+        //娉ㄩ攢鐢ㄦ埛
+        NET_DVR_Logout(m_lUserID);
+        //閲婃斁SDK璧勬簮
+        NET_DVR_Cleanup();
+    } else if (strBrand == "dahua") {
+        return false;//TODO
+    } else if (strBrand == "yushi") {
+        return false;//TODO
+    } else {
+        return false;//TODO
+    }
+
+    return true;
+}
+
+bool devHttpServer_c::loadCurrentVideo(const char *ip, const int port, const char *username, const char *passwd, \
+                                        const char *brand, const int chn, std::string &videopath) const {
+    std::string strBrand(brand);
+    if (strBrand == "haikang") {
+        NET_DVR_Init();
+        //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+        NET_DVR_SetConnectTime(2000, 1);
+        NET_DVR_SetReconnect(10000, true);
+
+        //鐧诲綍鍙傛暟锛屽寘鎷澶囧湴鍧�銆佺櫥褰曠敤鎴枫�佸瘑鐮佺瓑
+        NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+        struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+        strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+        struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+        strcpy(struLoginInfo.sUserName, username); //璁惧鐧诲綍鐢ㄦ埛鍚�
+        strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+        //璁惧淇℃伅, 杈撳嚭鍙傛暟
+        NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+        LONG m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+        if (m_lUserID < 0) {
+            //        printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+            NET_DVR_Cleanup();
+            return false;
+        }
+
+        NET_DVR_PLAYCOND struDownloadCond = {0};
+        struDownloadCond.dwChannel = chn;
+
+        time_t rowtime;
+        time(&rowtime);
+        time_t start_time = rowtime - 7200;
+        time_t end_time = rowtime - 7200 + 10;
+        struct tm *pStartTime = localtime(&start_time);
+
+        struDownloadCond.struStartTime.dwYear = pStartTime->tm_year + 1900;
+        struDownloadCond.struStartTime.dwMonth = pStartTime->tm_mon + 1;
+        struDownloadCond.struStartTime.dwDay = pStartTime->tm_mday;
+        struDownloadCond.struStartTime.dwHour = pStartTime->tm_hour;
+        struDownloadCond.struStartTime.dwMinute = pStartTime->tm_min;
+        struDownloadCond.struStartTime.dwSecond = pStartTime->tm_sec;
+
+        struct tm *pEndTime = localtime(&end_time);
+        struDownloadCond.struStopTime.dwYear = pEndTime->tm_year + 1900;
+        struDownloadCond.struStopTime.dwMonth = pEndTime->tm_mon + 1;
+        struDownloadCond.struStopTime.dwDay = pEndTime->tm_mday;
+        struDownloadCond.struStopTime.dwHour = pEndTime->tm_hour;
+        struDownloadCond.struStopTime.dwMinute = pEndTime->tm_min;
+        struDownloadCond.struStopTime.dwSecond = pEndTime->tm_sec;
+
+        std::string ip_t(ip);
+        std::string filePath = "./" + ip_t + ":" + \
+                                  std::to_string(port) + "-" + \
+                                  std::to_string(chn) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwYear) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwMonth) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwDay) + "_" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwHour) + ":" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwMinute) + ":" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwSecond) + ".mp4";
+
+        std::string filePath_tmp = "./" + ip_t + ":" + \
+                                  std::to_string(port) + "-" + \
+                                  std::to_string(chn) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwYear) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwMonth) + "-" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwDay) + "_" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwHour) + ":" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwMinute) + ":" + \
+                                  std::to_string(struDownloadCond.struStopTime.dwSecond) + "_tmp.mp4";
+
+        //---------------------------------------
+        //鎸夋椂闂翠笅杞�
+        int hPlayback;
+        hPlayback = NET_DVR_GetFileByTime_V40(m_lUserID, (char *) filePath.c_str(), &struDownloadCond);
+        if (hPlayback < 0) {
+            printf("NET_DVR_GetFileByTime_V40 fail,last error %d\n", NET_DVR_GetLastError());
+            NET_DVR_Logout(m_lUserID);
+            NET_DVR_Cleanup();
+            return false;
+        }
+
+        //---------------------------------------
+        //寮�濮嬩笅杞�
+        if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+            printf("Play back control failed [%d]\n", NET_DVR_GetLastError());
+            NET_DVR_Logout(m_lUserID);
+            NET_DVR_Cleanup();
+            return false;
+        }
+
+        int nPos = 0;
+        for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+            //printf("Be downloading... %d %%\n",nPos);
+            sleep(5);  //millisecond
+        }
+        if (!NET_DVR_StopGetFile(hPlayback)) {
+            printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+            NET_DVR_Logout(m_lUserID);
+            NET_DVR_Cleanup();
+            return false;
+        }
+        if (nPos < 0 || nPos > 100) {
+            printf("download err [%d]\n", NET_DVR_GetLastError());
+            NET_DVR_Logout(m_lUserID);
+            NET_DVR_Cleanup();
+            return false;
+        }
+
+        std::string cmd_transform = "ffmpeg -i " + filePath + " -strict -2 -vf scale=640:360 " + filePath_tmp;
+        system(cmd_transform.c_str());
+        std::string cmd_delsrc = "rm -f " + filePath;
+        system(cmd_delsrc.c_str());
+        videopath = filePath_tmp;
+
+        //娉ㄩ攢鐢ㄦ埛
+        NET_DVR_Logout(m_lUserID);
+        //閲婃斁SDK璧勬簮
+        NET_DVR_Cleanup();
+    } else if (strBrand == "dahua") {
+        //TODO
+    } else if (strBrand == "yushi") {
+        //TODO
+    } else {
+        //TODO
+    }
+
+    return true;
+}
+
+#define DEV_NO_TYPE (0)
+#define DEV_STORAGE (1)
+#define DEV_CAMERA (2)
+
+//缂栬緫纾佺洏闃靛垪
+std::string devHttpServer_c::dev_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+
+    int dev_type = db_c.searchDevTypeFromConfigTable();
+    if (DEV_CAMERA == dev_type) {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    } else {
+        DBG("dev_type :" << dev_type);
+    }
+
+    Record_Storage_Dev dev_rec;
+    if (reader.parse(content, value)) {
+        dev_rec.str_dev_name = QString::fromStdString(value["str_dev_name"].asString());
+        dev_rec.n_total_chn = 0;
+        dev_rec.str_all_chn_num = "";
+        dev_rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+        dev_rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+        dev_rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+        dev_rec.str_ip = QString::fromStdString(value["str_ip"].asString());
+        dev_rec.n_port = value["n_port"].asInt();
+        dev_rec.str_username = QString::fromStdString(value["str_username"].asString());
+        dev_rec.str_password = QString::fromStdString(value["str_password"].asString());
+        dev_rec.tim_start_time = QDateTime::fromString(QString::fromStdString(value["tim_start_time"].asString()), \
+                "yyyy-MM-dd hh:mm:ss");
+        dev_rec.n_duration = value["n_duration"].asInt();
+        dev_rec.str_brand = QString::fromStdString(value["str_brand"].asString());
+        dev_rec.str_reserved = "";
+
+        unsigned char serialnumber[SERIALNO_LEN] = {0};
+        ret = getDevSerialNumber(value["str_ip"].asCString(), value["n_port"].asInt(),
+                                 value["str_username"].asCString(), \
+                                 value["str_password"].asCString(), value["str_brand"].asCString(), serialnumber);
+        if ((!ret) || (serialnumber[0] == 0)) {
+            return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+
+        dev_rec.str_storage_dev_id = QString::fromLatin1((const char *) serialnumber);//鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
+        std::cout << dev_rec.str_storage_dev_id.toStdString() << std::endl;
+        ret = db_c.updateDeviceTable(dev_rec);
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (ret) {
+        if (DEV_NO_TYPE == dev_type) {
+            db_c.updateConfigTableByDevType(DEV_STORAGE);
+            runAllApp();
+        } else {
+            DBG("dev_type :" << dev_type);
+        }
+
+        Json::Value value_out;
+        value_out["str_storage_dev_id"] = dev_rec.str_storage_dev_id.toStdString();
+        std::string out = value_out.toStyledString();
+
+        return out;
+    } else {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+//鎼滅储纾佺洏闃靛垪閫氶亾
+std::string
+devHttpServer_c::dev_search_chns(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    if (!reader.parse(content, value_reader)) {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(
+        QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+    //璋冪敤娴峰悍澶у崕纾佺洏闃靛垪sdk锛岃幏鍙栫鐩樼殑閫氶亾鍒楄〃
+    std::vector<int> lvecUsefulChans;
+    getDevChnList(rec.str_ip.toStdString().c_str(), rec.n_port, rec.str_username.toStdString().c_str(), \
+                rec.str_password.toStdString().c_str(), rec.str_brand.toStdString().c_str(), lvecUsefulChans);
+
+    std::string str_result;
+    std::string str_tmp;
+    for (int i = 0; i < lvecUsefulChans.size(); i++) {
+        std::cout << lvecUsefulChans.at(i) << std::endl;
+        str_tmp = std::to_string(lvecUsefulChans.at(i));
+        str_result += str_tmp;
+        str_result += ",";
+    }
+    str_result = str_result.substr(0, str_result.length() - 1);
+    Json::Value value;
+
+    value["devchn_list"] = str_result;
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+//娴嬭瘯纾佺洏闃靛垪閫氶亾杩炴帴
+std::string
+devHttpServer_c::chk_chn_connet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    if (!reader.parse(content, value_reader)) {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(\
+                QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+
+    //TODO
+    //璋冪敤娴峰悍澶у崕纾佺洏闃靛垪sdk锛岃幏鍙栫鐩榲alue_reader["str_storage_dev_id"].asString(),value_reader["n_chn"].asString()
+    std::string loadpath;
+    bool ret = loadCurrentVideo(rec.str_ip.toStdString().c_str(), \
+                                rec.n_port, \
+                                rec.str_username.toStdString().c_str(), \
+                                rec.str_password.toStdString().c_str(), \
+                                rec.str_brand.toStdString().c_str(), \
+                                value_reader["n_chn"].asInt(), \
+                                loadpath);
+
+    fdfsClient.rwLock.rdlock();
+    std::string vid_url = "http://";
+    if (fdfsClient.fastFds != nullptr) {
+        vid_url.append(fdfsClient.fastFds->getIp() + "/");
+        std::string t_strVid = "";
+        if (!fdfsClient.fastFds->uploadFile(loadpath, t_strVid)) {
+            vid_url = "upload video fail";
+        } else {
+            vid_url.append(t_strVid);
+        }
+    }
+    fdfsClient.rwLock.unlock();
+    std::string cmd_delsrc = "rm -f " + loadpath;
+    system(cmd_delsrc.c_str());
+
+    Json::Value value;
+    if (!ret) {
+        value["connect_status"] = "False";
+        value["video_url"] = "";
+    } else {
+
+
+        value["connect_status"] = "True";
+        value["video_url"] = vid_url;
+    }
+
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+static std::vector<int> string2vectorint(std::string str_list) {
+    std::vector<int> result_int;
+    char *property_list = const_cast<char *>(str_list.c_str());
+    const char *c_Analyse = ",";
+    char *t_property;
+
+#ifdef linux
+    char *t_save = NULL;
+    t_property = strtok_r(property_list, c_Analyse, &t_save);
+#else
+    t_property = strtok(property_list,c_Analyse);
+#endif
+
+    while (t_property) {
+        std::string str_pro(t_property);
+        result_int.push_back(std::stoi(str_pro));
+#ifdef linux
+        t_property = strtok_r(t_save, c_Analyse, &t_save);
+#else
+        t_property = strtok(NULL,c_Analyse);
+#endif
+
+    }
+    return result_int;
+}
+
+//鏄剧ず纾佺洏闃靛垪閫氶亾鍒楄〃
+std::string
+devHttpServer_c::devchn_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+    Json::Value value;
+    Json::Value elem;
+    Json::Value chn_unused;
+    bool ret = false;
+
+    if (reader.parse(content, value_reader)) {
+        QString dev_id = QString::fromStdString(value_reader["str_storage_dev_id"].asString());
+
+        std::list<Record_Cam_Chn> rec_list = db_c.searchChannelTableByDevlId(dev_id);
+        list<Record_Cam_Chn>::iterator iter;
+
+        Record_Storage_Dev rec = db_c.searchDeviceTableByDeviceId(
+            QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+        std::vector<int> chns;
+        getDevChnList(rec.str_ip.toStdString().c_str(), rec.n_port, rec.str_username.toStdString().c_str(), \
+                rec.str_password.toStdString().c_str(), rec.str_brand.toStdString().c_str(), chns);
+
+        for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+            //            elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+            elem["str_name"] = iter->str_name.toStdString();
+            elem["n_chn"] = iter->n_chn;
+            elem["str_addr"] = iter->str_addr.toStdString();
+            elem["str_longitude"] = iter->str_longitude.toStdString();
+            elem["str_latitude"] = iter->str_latitude.toStdString();
+            elem["str_reserved"] = iter->str_reserved.toStdString();
+
+            Record_Chn_Sdk rec_sdk = db_c.searchChnSdkTableByChannelId(iter->str_storage_dev_id, iter->n_chn);
+            elem["str_sdks"] = rec_sdk.str_sdks.toStdString();
+            elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString();
+            elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString();
+
+            for (std::vector<int>::iterator it = chns.begin(); it != chns.end();) {
+                if (*it == iter->n_chn) {
+                    it = chns.erase(it);    //鍒犻櫎鍏冪礌锛岃繑鍥炲�兼寚鍚戝凡鍒犻櫎鍏冪礌鐨勪笅涓�涓綅缃�
+                } else {
+                    ++it;    //鎸囧悜涓嬩竴涓綅缃�
+                }
+            }
+
+            cout << elem.toStyledString() << endl;
+            value.append(elem);
+        }
+
+        for (std::vector<int>::iterator it1 = chns.begin(); it1 != chns.end(); it1++) {
+            chn_unused["n_chn"] = *it1;
+            cout << "*it1" << *it1 << endl;
+            value.append(chn_unused);
+        }
+
+        cout << value.toStyledString() << endl;
+//        std::string out = value.toStyledString();
+        std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+        return out;
+    }
+
+    return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//缂栬緫纾佺洏闃靛垪閫氶亾
+std::string
+devHttpServer_c::devchn_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+    Record_Chn_Sdk rec_sdk_old;
+    Record_Chn_Sdk rec_sdk;
+
+    if (reader.parse(content, value)) {
+        Record_Cam_Chn rec;
+        rec.str_storage_dev_id = QString::fromStdString(value["str_storage_dev_id"].asString());
+        rec.n_chn = value["n_chn"].asInt();
+        rec.str_name = QString::fromStdString(value["str_name"].asString());
+        rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+        rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+        rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+
+        Record_Storage_Dev dev_rec = db_c.searchDeviceTableByDeviceId(rec.str_storage_dev_id);
+        rec.tim_do_time = dev_rec.tim_start_time;
+        rec.tim_update_time = QDateTime::currentDateTime();
+
+        rec_sdk_old = db_c.searchChnSdkTableByChannelId(rec.str_storage_dev_id, rec.n_chn);
+
+        rec_sdk.str_storage_dev_id = QString::fromStdString(value["str_storage_dev_id"].asString());
+        rec_sdk.n_chn = value["n_chn"].asInt();
+        rec_sdk.str_sdks = QString::fromStdString(value["str_sdks"].asString());
+        rec_sdk.str_det_thr = QString::fromStdString(value["str_det_thr"].asString());
+        rec_sdk.str_cmp_thr = QString::fromStdString(value["str_cmp_thr"].asString());
+
+        ret = db_c.updateDevChnAndSdk(rec, rec_sdk);
+        if (!ret) {
+            return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    //edit chn's sdks
+    if ((rec_sdk_old.str_sdks != rec_sdk.str_sdks) ||
+        (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) ||
+        (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) {
+        killVideoAnalysFromHCApp();
+        sleep(1);
+        runAllApp();
+    }
+
+    return "{\"ret_status\": \"ok_ack\"}";
+}
+
+void devHttpServer_c::killFaceSearchServerApp() const {
+    string local_passwd = appConfig.getStringProperty("localPasswd");
+    string cmd_kill = "sleep 1 && echo \"" + local_passwd + "\" | sudo -S pkill -9 FaceSearch";
+    system(cmd_kill.c_str());
+    DBG("system(\"sudo -S pkill -9 FaceSearchServer\");");
+}
+
+void devHttpServer_c::killVideoAnalysFromHCApp() const {
+    string local_passwd = appConfig.getStringProperty("localPasswd");
+    string cmd_kill = "echo \"" + local_passwd + "\" | sudo -S pkill -9 VideoAnalysFrom";
+    system(cmd_kill.c_str());
+    DBG("system(\"sudo -S pkill -9 VideoAnalysFromHC\");");
+}
+
+void devHttpServer_c::runAllApp() const {
+    string buildAddr = appConfig.getStringProperty("buildAddr");
+    string cmd = "cd " + buildAddr + " && sh runAll.sh &";
+    system(cmd.c_str());
+    DBG("system(\"cd ~/Apps/QiaoJiaSystem/build/ && sh runAll.sh\");");
+}
+
+//鏄剧ず鎽勫儚鏈哄垪琛�
+std::string devHttpServer_c::cam_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Value value;
+    Json::Value elem;
+
+    std::list<Record_Cam_Dev> rec_list = db_c.searchCamDevTableAll();
+    list<Record_Cam_Dev>::iterator iter;
+
+    for (iter = rec_list.begin(); iter != rec_list.end(); ++iter) {
+        //            elem["str_storage_dev_id"] = iter->str_storage_dev_id.toStdString();
+        elem["str_cam_dev_id"] = iter->str_cam_dev_id.toStdString();
+        elem["str_name"] = iter->str_name.toStdString();
+        elem["str_addr"] = iter->str_addr.toStdString();
+        elem["str_longitude"] = iter->str_longitude.toStdString();
+        elem["str_latitude"] = iter->str_latitude.toStdString();
+        elem["str_ip"] = iter->str_ip.toStdString();
+        elem["n_port"] = iter->n_port;
+        elem["str_username"] = iter->str_username.toStdString();
+        elem["str_password"] = iter->str_password.toStdString();
+        elem["str_brand"] = iter->str_brand.toStdString();
+        elem["str_reserved"] = iter->str_reserved.toStdString();
+
+        Record_Cam_Sdk rec_sdk = db_c.searchCamSdkTableByCamId(iter->str_cam_dev_id);
+        elem["str_sdks"] = rec_sdk.str_sdks.toStdString();
+        elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString();
+        elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString();
+
+        cout << elem.toStyledString() << endl;
+
+        value.append(elem);
+    }
+
+    cout << value.toStyledString() << endl;
+    std::string out = value.size() > 0 ? value.toStyledString() : "[]";
+    return out;
+}
+
+//缂栬緫鎽勫儚鏈�
+std::string devHttpServer_c::cam_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+    Record_Cam_Dev rec;
+    Record_Cam_Sdk rec_sdk_old;
+    Record_Cam_Sdk rec_sdk;
+
+    int dev_type = db_c.searchDevTypeFromConfigTable();
+    if (DEV_STORAGE == dev_type) {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (reader.parse(content, value)) {
+        unsigned char serialnumber[SERIALNO_LEN] = {0};
+        ret = getDevSerialNumber(value["str_ip"].asCString(), value["n_port"].asInt(),
+                                 value["str_username"].asCString(), \
+                                 value["str_password"].asCString(), value["str_brand"].asCString(), serialnumber);
+        if ((!ret) || (serialnumber[0] == 0)) {
+            return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+
+        rec.str_cam_dev_id = QString::fromLatin1((const char *) serialnumber);//鎽勫儚鏈篿d cam_mac
+        rec.str_name = QString::fromStdString(value["str_name"].asString());
+        rec.str_addr = QString::fromStdString(value["str_addr"].asString());
+        rec.str_longitude = QString::fromStdString(value["str_longitude"].asString());
+        rec.str_latitude = QString::fromStdString(value["str_latitude"].asString());
+        rec.str_ip = QString::fromStdString(value["str_ip"].asString());
+        rec.n_port = value["n_port"].asInt();
+        rec.str_username = QString::fromStdString(value["str_username"].asString());
+        rec.str_password = QString::fromStdString(value["str_password"].asString());
+        rec.str_brand = QString::fromStdString(value["str_brand"].asString());
+
+        rec_sdk_old = db_c.searchCamSdkTableByCamId(rec.str_cam_dev_id);
+
+        rec_sdk.str_cam_dev_id = rec.str_cam_dev_id;
+        rec_sdk.str_sdks = QString::fromStdString(value["str_sdks"].asString());
+        rec_sdk.str_det_thr = QString::fromStdString(value["str_det_thr"].asString());
+        rec_sdk.str_cmp_thr = QString::fromStdString(value["str_cmp_thr"].asString());
+
+        ret = db_c.updateCamAndSdkTable(rec, rec_sdk);
+        if (!ret) {
+            return "err_db_content";
+        }
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (DEV_NO_TYPE == dev_type) {//add new camera
+        db_c.updateConfigTableByDevType(DEV_CAMERA);
+        runAllApp();
+    }
+        //edit camera's sdks
+    else/* if ((rec_sdk_old.str_sdks != rec_sdk.str_sdks) ||
+             (rec_sdk_old.str_det_thr != rec_sdk.str_det_thr) ||
+             (rec_sdk_old.str_cmp_thr != rec_sdk.str_cmp_thr)) */{
+        killVideoAnalysFromHCApp();
+        sleep(1);
+        runAllApp();
+    }
+
+    Json::Value value_out;
+    value_out["str_cam_dev_id"] = rec.str_cam_dev_id.toStdString();
+    std::string out = value_out.toStyledString();
+
+    return out;
+}
+
+bool devHttpServer_c::cam_connect_video_start(std::string ip, int port, std::string username, std::string passwd, \
+                                        std::string brand) const {
+
+    if (brand == "haikang") {
+        bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
+        if (!ret) {
+            ERR("getHKDevSerialNumber ERR");
+            return false;
+        }
+        //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+        port = 554;//TODO
+//        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+//                               "/h264/ch1/main/av_stream";
+        std::string rtsp_url = rtspAddrBuild(ip.c_str(), port, username.c_str(), passwd.c_str(), brand.c_str());
+        if (rtsp_url.empty()) {
+            return false;
+        }
+
+        DBG("rtsp_url:" << rtsp_url);
+        Json::Value json;
+        json["rtsp"] = rtsp_url;
+
+        //鎷兼帴json
+        string str_uuid;
+        uuid_t t_uuid;
+        char str[36];
+        uuid_generate(t_uuid);
+        uuid_unparse(t_uuid, str);
+        str_uuid = str;
+
+        std::string rtmpAddr = appConfig.getStringProperty("srsAddr");
+        std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
+        DBG("publish_basepath:" << publish_basepath);
+        appPref.setStringData("publish.basepath", publish_basepath);
+        appPref.setIntData("pulish.width", 640);
+        appPref.setIntData("pulish.height", 360);
+
+        if (m_rtmp.find(ip) != m_rtmp.end()) {
+            if (m_rtmp[ip].appPC == nullptr) {
+                m_rtmp[ip].userCounter = 0;
+                m_rtmp[ip].appPC = new AppPipeController(0, json);
+                m_rtmp[ip].appPC->start();
+            }
+            m_rtmp[ip].userCounter++;
+
+        } else {
+            m_rtmp[ip].appPC = new AppPipeController(0, json);
+            m_rtmp[ip].appPC->start();
+            m_rtmp[ip].userCounter = 1;
+        }
+
+        DBG("m_rtmp[ip]->start(); ip:" << ip);
+
+    } else if (brand == "dahua") {
+        //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+        return false;//TODO
+    } else if (brand == "yushi") {
+//        rtsp://admin:admin@192.168.8.8:554/video1
+        bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
+        if (!ret) {
+            ERR("getUVDevSerialNumber ERR");
+            return false;
+        }
+
+        port = 554;
+//        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+//                               "/video1";
+        std::string rtsp_url = rtspAddrBuild(ip.c_str(), port, username.c_str(), passwd.c_str(), brand.c_str());
+        if (rtsp_url.empty()) {
+            return false;
+        }
+        DBG("rtsp_url:" << rtsp_url);
+        Json::Value json;
+        json["rtsp"] = rtsp_url;
+
+        //鎷兼帴json
+        string str_uuid;
+        uuid_t t_uuid;
+        char str[36];
+        uuid_generate(t_uuid);
+        uuid_unparse(t_uuid, str);
+        str_uuid = str;
+
+        std::string rtmpAddr = appConfig.getStringProperty("srsAddr");
+        std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
+        DBG("publish_basepath:" << publish_basepath);
+        appPref.setStringData("publish.basepath", publish_basepath);
+        appPref.setIntData("pulish.width", 640);
+        appPref.setIntData("pulish.height", 360);
+
+        if (m_rtmp.find(ip) != m_rtmp.end()) {
+            if (m_rtmp[ip].appPC == nullptr) {
+                m_rtmp[ip].userCounter = 0;
+                m_rtmp[ip].appPC = new AppPipeController(0, json);
+                m_rtmp[ip].appPC->start();
+            }
+            m_rtmp[ip].userCounter++;
+
+        } else {
+            m_rtmp[ip].appPC = new AppPipeController(0, json);
+            m_rtmp[ip].appPC->start();
+            m_rtmp[ip].userCounter = 1;
+        }
+
+        DBG("m_rtmp[ip]->start(); ip:" << ip);
+
+    } else {
+        DBG("other brand");
+        return false;//TODO
+    }
+
+    return true;
+}
+
+bool devHttpServer_c::cam_connect_video_stop(std::string ip) const {
+
+    DBG("cam_connect_video_stop begin");
+//    if (m_rtmp.size() > 0) {
+//        auto it = m_rtmp.begin();
+//        while (it != m_rtmp.end()) {
+//            m_rtmp[it->first]->stop();
+//            m_rtmp[it->first]->wait();
+//            it++;
+//        }
+//    }
+    if (m_rtmp.find(ip) != m_rtmp.end()) {
+        if (m_rtmp[ip].appPC == nullptr) {
+            m_rtmp.erase(ip);
+        } else {
+            m_rtmp[ip].userCounter--;
+
+            if (m_rtmp[ip].userCounter == 0) {
+                m_rtmp[ip].appPC->stop();
+                m_rtmp[ip].appPC->wait();
+                m_rtmp.erase(ip);
+            }
+        }
+    }
+    DBG("cam_connect_video_stop end");
+
+
+    return true;
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�
+std::string
+devHttpServer_c::chk_cam_connet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    if (!reader.parse(content, value_reader)) {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    //TODO
+    //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+//    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
+    bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
+                            value_reader["str_username"].asString(), value_reader["str_password"].asString(), \
+                            value_reader["str_brand"].asString());
+    if (!ret) {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+
+    std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
+    Json::Value value;
+    value["connect_status"] = "True";
+    value["video_url"] = rtmp_url;
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�
+std::string
+devHttpServer_c::chk_cam_disconnet(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    if (!reader.parse(content, value_reader)) {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    //TODO
+    //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+//    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
+    DBG("cam_connect_video_stop begin");
+    bool ret = cam_connect_video_stop(value_reader["str_ip"].asString());
+    if (!ret) {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+    DBG("cam_connect_video_stop end");
+
+    Json::Value value;
+    value["ret_status"] = "ok_ack";
+
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+//鍒犻櫎纾佺洏闃靛垪鍙婂搴旈�氶亾鍒楄〃
+std::string devHttpServer_c::dev_del(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    int dev_type = db_c.searchDevTypeFromConfigTable();
+    if (DEV_CAMERA == dev_type) {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (reader.parse(content, value_reader)) {
+        QString dev_id = QString::fromStdString(value_reader["str_storage_dev_id"].asString());
+        int ret = db_c.deleteDeviceTableAndChnAndSdk(dev_id);
+        if (ret) {
+            killVideoAnalysFromHCApp();
+            db_c.deleteLoadFileTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+            db_c.deleteCutVideoTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+            db_c.deleteSdkHdlTablebyDevID(QString::fromStdString(value_reader["str_storage_dev_id"].asString()));
+            int dev_record = db_c.searchDeviceNumber();
+            if (dev_record == 0) {
+                db_c.updateConfigTableByDevType(DEV_NO_TYPE);
+            } else {
+                runAllApp();
+            }
+            return "{\"ret_status\": \"ok_ack\"}";
+        } else {
+            return "err_db";
+        }
+    }
+
+    return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//鍒犻櫎鎽勫儚鏈�
+std::string devHttpServer_c::cam_del(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value_reader;
+
+    int dev_type = db_c.searchDevTypeFromConfigTable();
+    if (DEV_STORAGE == dev_type) {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+
+
+    if (reader.parse(content, value_reader)) {
+        QString cam_id = QString::fromStdString(value_reader["str_cam_dev_id"].asString());
+        int ret = db_c.deleteCamDevandSdkByCamID(cam_id);
+        if (ret) {
+            killVideoAnalysFromHCApp();
+            int dev_record = db_c.searchCamDevNumber();
+            if (dev_record == 0) {
+                db_c.updateConfigTableByDevType(DEV_NO_TYPE);
+            } else {
+                runAllApp();
+            }
+            return "{\"ret_status\": \"ok_ack\"}";
+        } else {
+            return "err_db";
+        }
+    }
+
+    return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+}
+
+//淇敼ip 绔彛绛夐厤缃俊鎭�
+std::string
+devHttpServer_c::server_info_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        Record_Config lRec;
+        lRec.str_alarm_ip = QString::fromStdString(value["alarm_ip"].asString());
+        lRec.n_alarm_port = value["alarm_port"].asInt();
+        lRec.str_web_pic_ip = QString::fromStdString(value["web_pic_ip"].asString());
+        lRec.n_web_pic_port = value["web_pic_port"].asInt();
+        lRec.str_es_pic_ip = QString::fromStdString(value["es_pic_ip"].asString());
+        lRec.n_es_pic_port = value["es_pic_port"].asInt();
+        if ((checkip(lRec.str_alarm_ip.toStdString())) &&
+            (checkip(lRec.str_web_pic_ip.toStdString())) &&
+            (checkip(lRec.str_es_pic_ip.toStdString()))) {
+            ret = db_c.updateConfigTableByServerInfo(lRec);
+
+            //#todo webserver
+            std::string cmd_web =
+                "sed -i '/tracker_server=/d' ./WebFDSClient.conf  && sed -i  '/\\\"host:port\\\"/atracker_server=" + \
+                              value["web_pic_ip"].asString() + ":" + std::to_string(value["web_pic_port"].asInt()) + \
+                              "' ./WebFDSClient.conf";//
+            std::cout << "cmd_web:" << cmd_web << std::endl;
+            system(cmd_web.c_str());
+
+            //#todo fastDfsClient
+            //system("sed -i '/tracker_server=/d' ./fastDfsClient.conf  && sed -i  '/\"host:port\"/atracker_server=192.168.1.188:22122' ./fastDfsClient.conf");
+            std::string cmd_es =
+                "sed -i '/tracker_server=/d' ./fastDfsClient.conf  && sed -i  '/\\\"host:port\\\"/atracker_server=" + \
+                              value["es_pic_ip"].asString() + ":" + std::to_string(value["es_pic_port"].asInt()) + \
+                              "' ./fastDfsClient.conf";
+            std::cout << "cmd_es:" << cmd_es << std::endl;
+            system(cmd_es.c_str());
+
+            //#todo config
+            {
+                fdfsClient.rwLock.wrlock();
+                if (fdfsClient.fastFds != nullptr) {
+                    delete fdfsClient.fastFds;
+                }
+                fdfsClient.fastFds = new FastFds("./WebFDSClient.conf");
+                fdfsClient.rwLock.unlock();
+            }
+
+            //# http client 127.0.0.1:9999/resetFdfs
+            std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
+            HttpRequestWithCrul httpRequestWithCrul;
+            std::string response_bak = "";
+            std::string postParams_bak = "";
+            httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
+        }
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (ret) {
+        return "{\"ret_status\": \"ok_ack\"}";
+    } else {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+//鏌ヨ ip 绔彛绛夐厤缃俊鎭�
+std::string
+devHttpServer_c::server_info_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Value value;
+
+    Record_Config rec = db_c.searchConfigTableWithinServerInfo();
+
+    value["alarm_ip"] = rec.str_alarm_ip.toStdString();
+    value["alarm_port"] = rec.n_alarm_port;
+    value["web_pic_ip"] = rec.str_web_pic_ip.toStdString();
+    value["web_pic_port"] = rec.n_web_pic_port;
+    value["es_pic_ip"] = rec.str_es_pic_ip.toStdString();
+    value["es_pic_port"] = rec.n_es_pic_port;
+
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+//缂栬緫 瑁佸壀瑙嗛鏃堕暱
+std::string
+devHttpServer_c::cut_dura_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        int cut_max_duration = value["cut_max_duration"].asInt();
+
+        ret = db_c.updateConfigTableByCutDuration(cut_max_duration);
+
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    if (ret) {
+        killVideoAnalysFromHCApp();
+        sleep(1);
+        runAllApp();
+        return "{\"ret_status\": \"ok_ack\"}";
+    } else {
+        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+//鏌ヨ 瑁佸壀瑙嗛鏃堕暱
+std::string
+devHttpServer_c::cut_dura_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Value value;
+
+    int cut_max_duration = db_c.searchConfigTableWithinCutDuration();
+
+    value["cut_max_duration"] = cut_max_duration;
+
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+//璁剧疆鏈満netconfig netconfig_edit
+std::string
+devHttpServer_c::netconfig_edit(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+    unsigned char ip_old[15] = {0};
+    unsigned char netmask_old[15] = {0};
+    unsigned char gateway_old[15] = {0};
+
+    if (reader.parse(content, value)) {
+        std::string ip_addr = value["ipaddr"].asString();
+        std::string netmask = value["netmask"].asString();
+        std::string gateway = value["gateway"].asString();
+
+        //ipaddr
+        std::string net_ifname = appConfig.getStringProperty("netIfName");
+        if (!((GetIpAddress(net_ifname.c_str(), ip_old)) && \
+            (GetMaskAddress(net_ifname.c_str(), netmask_old)) && \
+            (GetGateWay(net_ifname.c_str(), gateway_old)))) {
+//            return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+
+        std::string ip_old_temp((char *) ip_old);
+        std::string netmask_old_temp((char *) netmask_old);
+        std::string gateway_old_temp((char *) gateway_old);
+
+        if (!((ip_old_temp == ip_addr) && \
+             (netmask_old_temp == netmask) && \
+             (gateway_old_temp == gateway))) {
+            if (!((checkip(ip_addr)) && (checkMask(netmask)) && (checkip(gateway)))) {
+                return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
+
+            ret = SetIpAddress(net_ifname.c_str(), ip_addr.c_str());
+            if (!ret) {
+                return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
+            ret = SetMaskAddress(net_ifname.c_str(), netmask.c_str());
+            if (!ret) {
+                return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
+            ret = SetGateWay(net_ifname.c_str(), gateway_old_temp.c_str(), gateway.c_str());
+            if (!ret) {
+                //return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
+
+            //#todo /etc/network/interfaces
+            //system("sed -i '/tracker_server=/d' ./fastDfsClient.conf  && sed -i  '/\"host:port\"/atracker_server=192.168.1.188:22122' ./fastDfsClient.conf");
+//            system("sed -i 's/address .*$/address 192.168.1.111/g' test");
+            std::string cmd_ip =
+                "sed -i 's/address .*$/address " + ip_addr + "/g' /etc/network/interfaces";
+            std::cout << "cmd_ip:" << cmd_ip << std::endl;
+            system(cmd_ip.c_str());
+
+            //淇敼config.json
+            std::string strtmp = appConfig.getStringProperty("erlNode");
+            std::string::size_type pos = strtmp.find_last_of("@");
+            if (pos != std::string::npos) {
+                ++pos;//淇濈暀sep '@'
+                strtmp.replace(pos, strtmp.size() - pos, ip_addr);
+                appConfig.setStringProperty("erlNode", strtmp);
+            }
+
+            strtmp = appConfig.getStringProperty("erlFatherNode");
+            pos = strtmp.find_last_of("@");
+            if (pos != std::string::npos) {
+                ++pos;//淇濈暀sep '@'
+                strtmp.replace(pos, strtmp.size() - pos, ip_addr);
+                appConfig.setStringProperty("erlFatherNode", strtmp);
+            }
+            //ES_IP
+            appConfig.setStringProperty("ES_IP", ip_addr);
+
+            strtmp = appConfig.getStringProperty("srsAddr");
+            strtmp.replace(strtmp.begin() + 7, strtmp.begin() + strtmp.find(":1934/live/"), ip_addr);
+            appConfig.setStringProperty("srsAddr", strtmp);
+            appConfig.save();
+
+            sleep(10);
+            system("reboot");
+        }
+    } else {
+        return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+    return "{\"ret_status\": \"ok_ack\"}";
+}
+
+//鏌ヨ 鏈満netconfig netconfig_show
+std::string
+devHttpServer_c::netconfig_show(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    Json::Value value;
+    unsigned char netmask_old[15] = {0};
+    unsigned char gateway_old[15] = {0};
+    unsigned char ip_old[15] = {0};
+
+    std::string net_ifname = appConfig.getStringProperty("netIfName");
+//    if (!((GetIpAddress(net_ifname.c_str(), ip_old)) && \
+//        (GetMaskAddress(net_ifname.c_str(), netmask_old)) && \
+//        (GetGateWay(net_ifname.c_str(), gateway_old)))) {
+//        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+//    }
+    if (GetIpAddress(net_ifname.c_str(), ip_old)) {
+        std::string ip_old_temp((char *) ip_old);
+        value["ipaddr"] = ip_old_temp;
+    } else {
+        value["ipaddr"] = "";
+    }
+
+    if (GetMaskAddress(net_ifname.c_str(), netmask_old)) {
+        std::string netmask_old_temp((char *) netmask_old);
+        value["netmask"] = netmask_old_temp;
+    } else {
+        value["netmask"] = "";
+    }
+
+    if (GetGateWay(net_ifname.c_str(), gateway_old)) {
+        std::string gateway_old_temp((char *) gateway_old);
+        value["gateway"] = gateway_old_temp;
+    } else {
+        value["gateway"] = "";
+    }
+
+    std::string out = value.toStyledString();
+
+    return out;
+}
+
+std::string devHttpServer_c::addNode(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    Json::Reader reader;
+    Json::Value value;
+    bool ret = false;
+    if (reader.parse(content, value)) {
+
+        //#todo nodeName Automatic generated?
+        //#todo nodes have counter?
+        //#todo nodeName Automatic generated?
+        //#todo devId+num
+        std::string uuid = GetUUId::getUUID();
+
+        unsigned char ip_old[15] = {0};
+        std::string str_netIfName = appConfig.getStringProperty("netIfName");
+        GetIpAddress(str_netIfName.c_str(), ip_old);
+        std::string str_ip((char *) ip_old);
+        std::string nodeName = uuid.append("@" + str_ip);
+
+        std::string cookie = value["cookie"].asString();
+        std::string FatherNodeName = value["fatherNodeName"].asString();
+
+        //#todo ClusterID ClusterName
+        std::string clusterID = value["culID"].asString();
+        clusterID = clusterID.size() > 0 ? clusterID : GetUUId::getUUID();
+        std::string clusterName = value["culName"].asString();
+        std::string devID = value["devID"].asString();
+        std::string devName = value["devName"].asString();
+
+
+        std::string path = std::string("/opt/erlang/").append(nodeName.substr(0, nodeName.find("@")));
+        if (erlangDbTool != nullptr) {
+            //gaunbi node
+            //clear data
+//            erlangDbTool.stop();
+            delete erlangDbTool;
+            erlangDbTool = nullptr;
+        }
+
+        if (cookie.size() > 0 && (clusterID.size() > 0 || clusterName.size() > 0)) {
+//            erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie);
+            string str_tmp = "DataWebserver";
+            erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie, clusterID, clusterName, str_tmp);
+            bool ret = erlangDbTool->initErlang();
+            FatherNodeName = FatherNodeName.size() > 0 ? FatherNodeName : " ";
+//            FatherNodeName = clusterID.size() > 0 ? clusterID : " ";
+            ret = erlangDbTool->startNodeDb(FatherNodeName, devID);
+
+            if (ret) {
+                appConfig.setStringProperty("erlNode", nodeName);
+                appConfig.setStringProperty("erlCookie", cookie);
+                appConfig.setStringProperty("erlPath", path);
+                appConfig.setStringProperty("erlFatherNode", FatherNodeName);
+                appConfig.save();
+//                erlangDbTool->findAllNode();
+                //face search server reboot
+                killFaceSearchServerApp();
+                runAllApp();
+//                sleep(4);
+            } else {
+                appConfig.setStringProperty("erlNode", "");
+                appConfig.setStringProperty("erlCookie", "");
+                appConfig.setStringProperty("erlPath", "");
+                appConfig.setStringProperty("erlFatherNode", "");
+                appConfig.save();
+                delete erlangDbTool;
+                erlangDbTool = nullptr;
+            }
+
+            std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+            return str_result;
+        } else {
+            std::string str_result = std::string("{\"result\":").append("\"鏁版嵁鏈夎\"}");
+            return str_result;
+        }
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+        return "";
+    }
+}
+
+std::string devHttpServer_c::removeNode(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    bool ret = false;
+
+    if (erlangDbTool != nullptr) {
+
+        ret = erlangDbTool->removeNode();
+
+        appConfig.setStringProperty("erlNode", "");
+        appConfig.setStringProperty("erlCookie", "");
+        appConfig.setStringProperty("erlPath", "");
+        appConfig.setStringProperty("erlFatherNode", "");
+        appConfig.save();
+        delete erlangDbTool;
+        erlangDbTool = nullptr;
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        //#todo
+        system("pkill beam.*");
+        return str_result;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+    }
+}
+
+string devHttpServer_c::searchNode(std::string ip, unsigned int port, std::string content,
+                                   PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        ERR("{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+//    sleep(1);
+    auto resu = erlangDbTool->findAllNode();
+    string json = "";
+    if (resu.size() > 0) {
+        auto t_itor = resu.begin();
+        m_cluster_id = t_itor->second.cluster_id;
+        m_cluster_name = t_itor->second.cluster_name;
+        json.append("{ \"cluster_id\":\"" + t_itor->second.cluster_id
+                    + "\",\"cluster_name\":\"" + t_itor->second.cluster_name + "\",\"list\":[");
+        for (auto &item : resu) {
+            string subJson = "{ ";
+            subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+            subJson.append("\"create_time\":\"" + item.second.create_time + "\",");
+            subJson.append("\"dev_id\":\"" + item.second.device_id + "\",");
+            //#todo
+            auto rec = db_c.searchConfigTableWithinServerInfo();
+            subJson.append("\"dev_name\":\"" + rec.dev_name.toStdString() + "\",");
+
+            string t_nodeId = item.second.node_id;
+            subJson.append(
+                "\"node_ip\":\"" + t_nodeId.substr(t_nodeId.find("@") + 1, t_nodeId.size() - t_nodeId.find("@")) +
+                "\",");
+            subJson.append("\"node_id\":\"" + item.second.node_id + "\"");
+            subJson.append("},");
+            json.append(subJson);
+        }
+        auto str = json.substr(0, json.size() - 1);
+        str.append("]}");
+        DBG(str);
+        return str;
+    } else {
+        ERR("resu is null");
+//        response->write(SimpleWeb::StatusCode::err_erlNodeIsNull, "{\"error\":\"err_erlNodeIsNull \"}");
+        return "{}";
+    }
+}
+
+string devHttpServer_c::modifyCluName(std::string ip, unsigned int port, std::string content,
+                                      PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+//    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        std::string cluster_id = value["cluster_id"].asString();
+        std::string cluster_name = value["cluster_name"].asString();
+        bool ret = false;
+        if (cluster_id.size() <= 0 || cluster_name.size() <= 0) {
+            return "{\"error\":\"鍙傛暟閿欒锛岃妫�鏌ワ紒\"}";
+        }
+
+        ret = erlangDbTool->modifyCluName(cluster_id, cluster_name);
+
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        return str_result;
+
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+        return "";
+        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::createDatabase(std::string ip, unsigned int port, std::string content,
+                                            PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+//    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        std::string TableType = value["TableType"].asString();
+        std::string TableName = value["TableName"].asString();
+        int SyncType = atoi(value["SyncType"].asCString());
+        std::string BwType = value["BwType"].asString();
+        std::string StartTime = value["StartTime"].asString();
+        std::string EndTime = value["EndTime"].asString();
+        bool ret = false;
+        if (SyncType == 1) {
+            //鍚屾搴�
+            ret = erlangDbTool->createDatabase(TableType, TableName, SyncType, BwType, StartTime, EndTime);
+        } else if (SyncType == 0) {
+            TableName.insert(0, "lt_");
+            //鏈湴搴�
+            FieldValues fieldValues;
+            fieldValues.insert(std::make_pair("uuid", GetUUId::getUUID()));
+            fieldValues.insert(std::make_pair("tableName", TableName));
+            fieldValues.insert(std::make_pair("tableDesc", "ceshi"));
+            fieldValues.insert(std::make_pair("tableType", TableType));
+            fieldValues.insert(std::make_pair("bwType", BwType));
+            fieldValues.insert(std::make_pair("startTime", StartTime));
+            fieldValues.insert(std::make_pair("endTime", EndTime));
+            fieldValues.insert(std::make_pair("create_by", "who"));
+            ret = m_SqliteFaceEncap.createTable(TableName, fieldValues);
+        }
+
+        erlangDbTool->sendMessage();
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        return str_result;
+
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+        return "";
+        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::deleteDatabase(std::string ip, unsigned int port, std::string content,
+                                            PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+//    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        std::string uuid = value["uuid"].asString();
+        std::string TableType = value["TableType"].asString();
+        std::string TableName = value["TableName"].asString();
+        int SyncType = atoi(value["SyncType"].asCString());
+
+        bool ret = false;
+        if (SyncType == 1) {
+            //鍚屾搴�
+            ret = erlangDbTool->deleteDatabase(TableType, TableName, SyncType);
+        } else if (SyncType == 0) {
+            //鏈湴搴�
+            if (TableName.find("lt_") != 0) {
+                TableName.insert(0, "lt_");
+            }
+            ret = m_SqliteFaceEncap.deleteTable(TableName);
+        }
+        erlangDbTool->sendMessage();
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        return str_result;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒 \"}");
+        return "";
+        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::findAllDatabase(std::string ip, unsigned int port, std::string content,
+                                             PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+
+    auto resDB = erlangDbTool->findAllDatabase();
+    auto si = resDB.size();
+    if (resDB.size() > 0) {
+//        auto resType = erlangDbTool->findAllTypeInfo();
+        string json = "[";
+        for (auto &item : resDB) {
+            if (item.second.tableName.find("lt_") == 0) {
+                continue;
+            }
+            string subJson = "{ ";
+            subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+            subJson.append("\"tableName\":\"" + item.second.tableName + "\",");
+            subJson.append("\"tableType\":\"" + item.second.tableType + "\",");
+//            subJson.append("\"bwType\":\"" + resType[item.second.tableName].bwType + "\",");
+            subJson.append("\"bwType\":\"" + item.second.bwType + "\",");
+            //#todo modify
+            subJson.append("\"start_time\":\"" + item.second.startTime + "\",");
+            subJson.append("\"end_time\":\"" + item.second.endTime + "\"");
+            subJson.append("},");
+            json.append(subJson);
+        }
+
+        auto str = json.substr(0, json.size() - 1);
+        if (str.size() <= 1)
+            return "[]";
+        str.append("]");
+        return str;
+    } else {
+//        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0 \"}");
+//        return "";
+        return "[]";
+    }
+}
+
+std::string devHttpServer_c::findLocalDatabase(std::string ip, unsigned int port, std::string content,
+                                               PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+    string str_local = "lt_";
+//    auto resDB = erlangDbTool->findAllDatabase();
+//    auto si = resDB.size();
+
+    auto resDB = m_SqliteFaceEncap.getTableInfos();
+
+    if (resDB.size() > 0) {
+        string json = "[";
+        for (auto &item : resDB) {
+            string subJson = "{ ";
+            subJson.append("\"uuid\":\"" + item.uuid + "\",");
+            subJson.append("\"tableName\":\"" + item.tableName + "\",");
+            subJson.append("\"tableType\":\"" + item.tableType + "\",");
+            subJson.append("\"bwType\":\"" + item.bwType + "\",");
+            subJson.append("\"start_time\":\"" + item.startTime + "\",");
+            subJson.append("\"end_time\":\"" + item.endTime + "\"");
+            subJson.append("},");
+            json.append(subJson);
+        }
+        auto str = json.substr(0, json.size() - 1);
+        if (str.size() <= 1)
+            return "[]";
+        str.append("]");
+        return str;
+    } else {
+//        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0\"}");
+//        return "";
+        return "[]";
+    }
+}
+
+std::string devHttpServer_c::addPerson(std::string ip, unsigned int port, std::string content,
+                                       PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+//    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string TableName = value["TableName"].asString();
+        std::string img_url = value["img_url"].asString();
+        auto tests = value["img_base64"].size();
+        auto ret = value["img_base64"].isString();
+
+        std::string img_base64 = value["img_base64"].asString();
+        std::string idcard = value["idcard"].asString();
+        std::string strUUID = value["uuid"].asString();
+
+        cv::Mat image;
+        if (img_url.size() > 0) {
+            auto t_results = m_curlDownloadImg.download_jpeg(const_cast<char *>(img_url.c_str()));
+            cvutil.buffer2CvMat(t_results.buffer, image);
+        } else if (img_base64.size() > 0) {
+            img_url = "http://";
+            auto str_img = base64.Decode(img_base64.c_str(), img_base64.size());
+            std::vector<unsigned char> buffer(str_img.size());
+            memcpy(buffer.data(), str_img.data(), str_img.size());
+            cvutil.buffer2CvMat(buffer, image);
+
+
+            fdfsClient.rwLock.rdlock();
+            if (fdfsClient.fastFds != nullptr) {
+                img_url.append(fdfsClient.fastFds->getIp() + "/");
+                std::string t_strImg = "";
+                if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) {
+                    img_url = "upload image fail";
+                } else {
+                    img_url.append(t_strImg);
+                    img_url.clear();
+                    img_url = t_strImg;
+//                    img_url.append("/").append(t_strImg);
+                }
+            }
+            fdfsClient.rwLock.unlock();
+        } else {
+            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"not found img\"}");
+            return "";
+//            return "{\"error\":\"not found img\"}";
+        }
+
+        thread::id pid = std::this_thread::get_id();
+        if (m_handleMap[pid] == nullptr) {
+            DBG("pid is " << pid);
+            m_handleMap[pid] = new CasiaFaceWrapperN;
+        }
+        CasiaFaceWrapperN *t_CasiaFaceWapper = m_handleMap[pid];
+
+        std::string feature_base64;
+        FaceImageN faceImage{image.cols, image.rows, image.step, image.data};
+        auto faceResults = t_CasiaFaceWapper->extractFace(faceImage);
+
+        if (faceResults.size() <= 0) {
+            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"not found face\"}");
+//            string str_path = "./img/";
+//            str_path.append(AppUtil::getTimeString() + ".jpg");
+//            cv::imwrite(str_path, image);
+            return "";
+//            return "{\"error\":\"not found face\"}";
+        }
+
+        for (auto &item : faceResults) {
+            feature_base64 = base64.Encode(item.feature.data(), item.feature.size());
+        }
+        auto size = feature_base64.size();
+//        std::string uuid = "";
+        bool ret_addPerson = false;
+
+        if (TableName.find("lt_") == 0) {
+            FieldValues fieldValues;
+            AddFaceData addFaceData;
+            addFaceData.feature.resize(faceResults[0].feature.size());
+            memcpy(addFaceData.feature.data(), faceResults[0].feature.data(), faceResults[0].feature.size());
+
+            //#todo uuid have value is update
+            if (strUUID.size() <= 0) {
+                // get Person id
+
+                strUUID = AppUtil::getPersonId(m_batch, m_SerialNumber);
+                addFaceData.uuid = strUUID;
+                addFaceData.faceUrl = img_url;
+
+                fieldValues.insert(std::make_pair("uuid", strUUID));
+                fieldValues.insert(std::make_pair("idCard", idcard));
+                auto t_id = m_SqliteFaceEncap.addFace(TableName, addFaceData, fieldValues);
+                ret_addPerson = t_id.size() > 0 ? true : false;
+            } else {
+                //#todo update table
+                addFaceData.uuid = strUUID;
+                addFaceData.faceUrl = img_url;
+
+                fieldValues.insert(std::make_pair("uuid", strUUID));
+                fieldValues.insert(std::make_pair("idCard", idcard));
+                m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
+            }
+
+        } else {
+            //#todo update data
+            // get Person id
+            strUUID = strUUID.size() > 0 ? strUUID : AppUtil::getPersonId(m_batch, m_SerialNumber);
+            ret_addPerson = erlangDbTool->addPerson(strUUID, TableName, feature_base64, img_url, idcard);
+        }
+
+        if (ret_addPerson && strUUID.size() > 0) {
+            std::string str_result = std::string("{\"uuid\":").append(
+                "\"" + strUUID + "\",\"img_url\":\"" + img_url + "\"}");
+//            usleep(100);
+            erlangDbTool->sendMessage();
+            //todo send person to backServer
+            HttpRequestWithCrul m_requestWithCrul;
+
+            std::thread sendPerson([&](std::string parm_uuid, std::string parm_img_url, std::string parm_idcard,
+                                       std::string parm_fea) {
+                Json::Value perInfos;
+                Json::Value perInfo;
+//                #todo get string from config.json file
+//                 get
+                perInfo["id"] = parm_uuid;
+                perInfo["distributionIds"] = m_cluster_id;
+                perInfo["distributionNames"] = m_cluster_name;
+                auto rec = db_c.searchConfigTableWithinServerInfo();
+                perInfo["deviceId"] = rec.dev_id.toStdString();
+                perInfo["photos"] = parm_img_url;
+//                perInfo["featureBase"] = feature_base64;
+                perInfo["featureBase64"] = parm_fea;
+                perInfo["cardId"] = parm_idcard;
+                perInfos.append(perInfo);
+
+                std::string str_serIp = GET_STR_CONFIG("mainServerIp");
+                std::string str_serPort = GET_STR_CONFIG("mainServerPort");
+
+//                string sendUrl = "192.168.1.203:3697/addPerson/uploadToTemporary";
+                string sendUrl = str_serIp;
+                sendUrl.append(":").append(str_serPort).append("/addPerson/uploadToTemporary");
+                string postParams = perInfos.toStyledString();
+                string str_addRes;
+
+                m_requestWithCrul.curl_post_req(sendUrl, postParams, str_addRes);
+            }, strUUID, img_url, idcard, feature_base64);
+            sendPerson.detach();
+
+            return str_result;
+        } else {
+            std::string str_result = std::string("{\"error\":\"addPerson error\"}");
+            return str_result;
+        }
+
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::loadFaceFeaData(std::string ip, unsigned int port, std::string content,
+                                             PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string TableName = value["TableName"].asString();
+
+
+        if (TableName.find("lt_") == 0) {
+            auto t_resDB = m_SqliteFaceEncap.getFacesFromTable(TableName);
+            auto t_faceInfoCache = m_SqliteFaceEncap.getFaceInfoFromTable(TableName);
+
+            auto &resDB = *t_resDB;
+            if (resDB.size() > 0) {
+                string json = "[";
+                for (auto &item : resDB) {
+                    string subJson = "{ ";
+                    subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
+                    subJson.append("\"tableName\":\"" + TableName + "\",");
+                    subJson.append("\"idcard\":\"" + t_faceInfoCache[item.second.uuid].idCard + "\",");
+                    subJson.append("\"imgUrl\":\"" + item.second.faceurl + "\"");
+//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
+                    //#todo modifysvn upda  svn comm
+//                subJson.append("\"start_time\":\"" + item.second.create_time + "\",");
+//                subJson.append("\"end_time\":\"" + item.second.update_time + "\"");
+                    subJson.append("},");
+                    json.append(subJson);
+                }
+                auto str = json.substr(0, json.size() - 1);
+                str.append("]");
+                return str;
+            }
+        } else {
+            auto resDB = erlangDbTool->loadFaceFeaData2(TableName);
+            if (resDB.size() > 0) {
+                string json = "[";
+                for (auto &item : resDB) {
+                    string subJson = "{ ";
+                    subJson.append("\"uuid\":\"" + item.second.id + "\",");
+                    subJson.append("\"tableName\":\"" + TableName + "\",");
+                    subJson.append("\"idcard\":\"" + item.second.idcard + "\",");
+                    subJson.append("\"imgUrl\":\"" + item.second.img + "\"");
+//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
+                    //#todo modifysvn upda  svn comm
+//                subJson.append("\"start_time\":\"" + item.second.create_time + "\",");
+//                subJson.append("\"end_time\":\"" + item.second.update_time + "\"");
+                    subJson.append("},");
+                    json.append(subJson);
+                }
+                auto str = json.substr(0, json.size() - 1);
+                str.append("]");
+                return str;
+            }
+        }
+
+
+//        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"size is 0\"}");
+//        return "";
+        return "[]";
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::updateDatabase(std::string ip, unsigned int port, std::string content,
+                                            PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+//    bool ret = false;
+
+    if (reader.parse(content, value)) {
+        std::string Uuid = value["uuid"].asString();
+        std::string TableType = value["TableType"].asString();
+        std::string TableName = value["TableName"].asString();
+        int SyncType = atoi(value["SyncType"].asCString());
+        std::string BwType = value["BwType"].asString();
+        std::string StartTime = value["StartTime"].asString();
+        std::string EndTime = value["EndTime"].asString();
+
+        bool ret = false;
+        if (SyncType == 1) {
+            //鍚屾搴�
+            ret = erlangDbTool->updateDatabase(Uuid, TableType, TableName, SyncType, BwType, StartTime, EndTime);
+        } else if (SyncType == 0) {
+            //鏈湴搴�
+            //#鏇存柊搴曞簱绠$悊琛�
+            FieldValues fieldValues;
+            fieldValues.insert(std::make_pair("uuid", Uuid));
+            if (TableName.find("lt_") != 0) {
+                TableName.insert(0, "lt_");
+            }
+            fieldValues.insert(std::make_pair("tableName", TableName));
+//            fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
+            fieldValues.insert(std::make_pair("tableType", TableType));
+            fieldValues.insert(std::make_pair("bwType", BwType));
+            fieldValues.insert(std::make_pair("startTime", StartTime));
+            fieldValues.insert(std::make_pair("endTime", EndTime));
+//            fieldValues.insert(std::make_pair("create_by", "who"));
+            ret = m_SqliteFaceEncap.updateTable("sys_o_tables", fieldValues);
+        }
+
+        erlangDbTool->sendMessage();
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        return str_result;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::delPerson(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string TableName = value["TableName"].asString();
+        std::string strUUID = value["uuid"].asString();
+
+        bool ret = false;
+        if (TableName.find("lt_") == 0) {
+            ret = m_SqliteFaceEncap.deleteFace(TableName, strUUID);
+        } else {
+            ret = erlangDbTool->delPerson(strUUID, TableName);
+        }
+
+        erlangDbTool->sendMessage();
+        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
+        return str_result;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::getAlarmImageFromVideoFile(std::string ip, unsigned int port, std::string content,
+                                                        PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    Json::Reader reader;
+    Json::Value value;
+    try {
+        if (reader.parse(content, value)) {
+            std::string videoPath;
+            std::string devId = value["videoNum"].asString();
+            std::string picDate = value["picDate"].asString();
+
+            //std::string path_uuid = videoPath;//value["path_uuid"].asString();
+            qint64 sub ;
+            std::string  path = getVideoPathByTime(picDate,devId,sub);
+
+            if (path.empty()) {
+                ERR("{\"error\":\"not find path\"}");
+                return "{\"error\":\"鏈煡鍒拌棰戣矾寰刓"}";
+            }
+            DBG("path="<<path);
+            videoPath.clear();
+            videoPath = path;
+
+
+
+            // sub = (dt.toMSecsSinceEpoch() - dtFile.toMSecsSinceEpoch());
+            //#yanchi buchong
+           // sub = sub > 3000 ? sub - 3000 : 0000;
+            //shijian yuejie buchang
+           // sub = sub < 0 ? 0000 : sub;
+           int haomiao = sub % 1000;
+            sub /= 1000;
+            int m = sub;
+            int shi, fen, miao;
+            char ch_time[128];
+            if (m / 3600 < 24) {
+                shi = m / 3600;
+                fen = m / 60 % 60;
+                miao = m % 60;
+                sprintf(ch_time, "%02d:%02d:%02d.%03d", shi, fen, miao, haomiao);
+                cout << ch_time << endl;
+            } else printf("杈撳叆鏁板�煎お澶�");
+
+            std::string str_time(ch_time);
+            //#todo 鎸夌収鏃堕棿鍛藉悕
+            std::string str_imgName(AppUtil::getTimeString() + ".jpg");// = "test.jpg";
+
+            std::string cmd_getVideoFileTime(
+                " ffmpeg -i '" + videoPath + "' 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");
+
+            std::string str_tmpTime = AppUtil::getCmdResult(cmd_getVideoFileTime);
+
+            if (str_time > str_tmpTime) {
+                ERR("{\"error\":\"Time error\"}" << str_time << " str_tmpTime " << str_tmpTime);
+                str_time = str_tmpTime.size() > 0 ? str_tmpTime.substr(0, str_tmpTime.rfind(".")) : str_time;
+//            return "{\"error\":\"Time error\"}";
+            }
+
+            std::string cmd("ffmpeg -ss " + str_time + " -i '" + videoPath + "' -y '" + str_imgName + "'");
+            DBG(cmd);
+            system(cmd.c_str());
+
+            cv::Mat img = cv::imread(str_imgName);
+            if (img.empty()) {
+                ERR("{\"error\":\"Video File error\"}");
+                return "{\"error\":\"瑙嗛鏂囦欢閿欒\"}";
+            }
+            std::vector<unsigned char> buffer;
+            CvUtil::cvMat2Buffer(img, buffer);
+            std::string img_url = "http://";
+            fdfsClient.rwLock.rdlock();
+            if (fdfsClient.fastFds != nullptr) {
+                img_url.append(fdfsClient.fastFds->getIp() + "/");
+                std::string t_strImg = "";
+                if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) {
+                    img_url = "upload image fail";
+                } else {
+                    std::string str_tmp_cmd("rm -f '" + str_imgName + "'");
+                    system(str_tmp_cmd.c_str());
+                    img_url.append(t_strImg);
+                    img_url.clear();
+                    img_url = t_strImg;
+//                    img_url.append("/").append(t_strImg);
+                }
+            }
+            fdfsClient.rwLock.unlock();
+            std::string result("{\"img_url\":\"" + img_url + "\"}");
+//        cout << result << endl;
+            return result;
+        } else {
+            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+            return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+        }
+    }
+    catch (std::exception ex) {
+        std::string message = "{\"error\":\"寮傚父閿欒锛�";
+        message.append(const_cast<char *>(ex.what())).append("\"}");
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, message);
+        return "";
+    }
+}
+
+std::string
+devHttpServer_c::getRecordVideoPath(std::string ip, unsigned int port, std::string content, PResponse &response) {
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value))
+    {
+        std::string devId = value["videoNum"].asString();
+        std::string picDate = value["picDate"].asString();
+       qint64 sub;
+       std::string path=getVideoPathByTime(picDate,devId,sub);
+        if (path.empty())
+        {
+
+            return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+        else
+        {
+            std::string result = "{\"file_path\":\"" + path + "\"}";
+            return result;
+        }
+    }
+    else
+    {
+        return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string devHttpServer_c::findDevId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+
+    Record_Config rc = db_c.searchConfigTableWithinServerInfo();
+
+    Json::Value value;
+    value["dev_id"] = rc.dev_id.toStdString();
+    value["dev_name"] = rc.dev_name.toStdString();
+
+    return value.toStyledString();
+
+}
+
+std::string devHttpServer_c::editDevName(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string dev_name = value["dev_name"].asString();
+        if (dev_name.empty()) {
+            return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+
+        if (db_c.updateDevNameConfigTable(QString::fromStdString(dev_name))) {
+            return "{\"ret_status\": \"ok_ack\"}";
+        } else {
+            return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
+
+    } else {
+        return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+}
+
+
+std::string devHttpServer_c::editDevId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        //DSVAD010120181114
+        int dev_batch = value["dev_batch"].asInt();
+        int dev_sequence = value["dev_sequence"].asInt();
+        if (createDevId(dev_batch, dev_sequence)) {
+            return "{\"ret_status\": \"ok_ack\"}";
+        } else {
+            return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+        }
+
+    } else {
+        return "{\"ret_status\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+
+}
+
+bool devHttpServer_c::createDevId(const int &dev_batch, const int &dev_sequence) {
+    // std::string dev_id="DSVAD";
+    char buf[12] = {0};
+    char dev_id[17] = {0};
+
+    time_t cur = time(nullptr);
+
+    strftime(buf, 12, "%Y%m%d", localtime(&cur));
+    sprintf(dev_id, "%s%02d%02d%s", "DSVAD", dev_batch, dev_sequence, buf);
+
+
+    if (strlen(dev_id) != 17) {
+        return false;
+    }
+
+    appConfig.setStringProperty("DEV_ID", dev_id);
+    appConfig.save();
+    //std::cout<<dev_id<<std::endl;
+    return true;
+}
+
+ std::string devHttpServer_c::getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub)
+ {
+     std::string t_FilePath = appConfig.getStringProperty("cutPath");
+
+     bool find=false;;
+     if (t_FilePath.back() != '/') {
+         t_FilePath.push_back('/');
+     }
+
+     QDateTime dt = QDateTime::fromString(QString::fromStdString(time), "yyyy-MM-dd hh:mm:ss:zzz");
+
+      std::string t_strTime=dt.toString("yyyyMMddhh").toStdString();
+        //# ./camIndex/YYYYMM/DD/
+      t_FilePath.append(camId + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+      //YYYYMMDDHH
+       t_FilePath.append(t_strTime.substr(0,10) + "/");
+
+
+     qint64 t=dt.toMSecsSinceEpoch();
+     std::vector<std::string> vec=forEachFile(t_FilePath);
+     std::sort(vec.begin(),vec.end());
+     DBG("t_FilePath" << t_FilePath);
+     DBG("vec.size()" << vec.size());
+     int size=vec.size();
+     for(int i=0;i<size;++i)
+     {
+         qint64 t1=QDateTime::fromString(QString::fromStdString(vec[i]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();
+         if(i+1<size)
+         {
+             qint64 t2=QDateTime::fromString(QString::fromStdString(vec[i+1]), "yyyy-MM-dd hh:mm:ss:zzz").toMSecsSinceEpoch();
+             if(t>=t1 && t<t2)
+             {
+                 DBG("path="<<vec[i]);
+                 t_FilePath+=vec[i]+".mp4";
+                 sub=t-t1;
+                 find=true;
+                 break;
+             }
+
+         }
+         else
+         {
+             sub=t-t1;
+             if(t>=t1 && sub<=3000)
+             {
+                 DBG("path="<<vec[i]);
+                 t_FilePath+=vec[i]+".mp4";
+                 find=true;
+                 break;
+             }
+         }
+
+
+     }
+     DBG("sub="<<sub);
+     if(!find)
+     {
+         t_FilePath="";
+     }
+     return t_FilePath;
+
+ }
+ std::vector<std::string> devHttpServer_c::forEachFile(const std::string &dir_name)
+ {
+     std::vector<std::string> v;
+     auto dir = opendir(dir_name.data());
+     struct dirent *ent;
+     int len = 0;
+     if (dir) {
+         while ((ent = readdir(dir)) != NULL) {
+             std::string filename = std::string(ent->d_name);
+             std::string temp;
+             if(filename!="."&&filename!="..")
+             {
+
+                 temp = filename.substr(0, filename.rfind('.'));
+                 v.push_back(temp);
+             }
+
+         }
+         closedir(dir);
+     }
+     return v;
+ }
+
+std::string devHttpServer_c::addPersons(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+//    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        string strUUID = value["uuid"].asString();
+        auto perlists = value["personList"];
+
+        std::vector<SyncDB::AddPersonInfo> tmpPers;
+//        int lsize = perlists.size();
+        for (auto &item : perlists) {
+            SyncDB::AddPersonInfo addPersonInfo;
+            addPersonInfo.personid = item["personId"].asString();
+            addPersonInfo.idcard = item["idcard"].asString();
+            addPersonInfo.personPic = item["personPic"].asString();
+            addPersonInfo.feature = item["feature"].asString();
+            tmpPers.push_back(addPersonInfo);
+        }
+
+        auto ret_addPersons = erlangDbTool->addPersons(strUUID, tmpPers);
+
+        std::string str_result;
+        if (ret_addPersons.size() > 0) {
+            str_result = "[";
+            for (auto &item : ret_addPersons) {
+                string subJson = "{ ";
+                subJson.append("\"personId\":\"" + item.PersonId + "\",");
+                subJson.append("\"result\":\"" + item.Result + "\",");
+                subJson.append("\"msg\":\"" + item.msg + "\"");
+                subJson.append("},");
+                str_result.append(subJson);
+            }
+            auto str = str_result.substr(0, str_result.size() - 1);
+            str_result.swap(str.append("]"));
+            erlangDbTool->sendMessage();
+        } else {
+            str_result = "[]";
+        }
+        return str_result;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string
+devHttpServer_c::personIsExists(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string str_res;
+        try {
+            string strUUID = value["personId"].asString();
+            //#todo 杩炴帴澶辫触鐨勫垽鏂�.
+            auto ret_resPerEits = erlangDbTool->personIsExistOnClu(strUUID);
+            std::string str_result = "[";
+            if (ret_resPerEits.size() > 0) {
+                for (auto &item : ret_resPerEits) {
+                    // tableName ,uuid 鏃犳浜烘槸id涓簄ull
+                    if (item.uuid == "null") {
+                        continue;
+                    }
+                    string subJson = "{ ";
+                    subJson.append("\"tableName\":\"" + item.tableName + "\",");
+                    subJson.append("\"uuid\":\"" + item.tableUuid + "\"");
+                    subJson.append("},");
+                    str_result.append(subJson);
+                }
+                auto str = str_result.substr(0, str_result.size() - 1);
+                if (str.size() <= 1) {
+                    str_result = "[]";
+                } else {
+                    str_result.swap(str.append("]"));
+                }
+            } else {
+                str_result = "[]";
+            }
+            if (str_result == "[]") {
+                str_res = "{\"result\":\"0\",\"msg\":\"success\",\"existDataBase\":[]}";
+            } else {
+                str_res = "{\"result\":\"1\",\"msg\":\"success\",\"existDataBase\":";
+                str_res.append(str_result).append("}");
+            }
+        } catch (std::exception ex) {
+            str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+            ERR(ex.what());
+        }
+        return str_res;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
+
+std::string
+devHttpServer_c::updatePersonByOldId(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
+    if (erlangDbTool == nullptr) {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦╘"}");
+        return "";
+//        return "{\"error\":\"erlang is null\"}";
+    }
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(content, value)) {
+        std::string str_res;
+        try {
+            string newPerId = value["newPerId"].asString();
+            string idcard = value["idcard"].asString();
+            string perPicUrl = value["perPicUrl"].asString();
+            string oldId = value["oldId"].asString();
+            string perFea = value["feature"].asString();
+            //#todo 杩炴帴澶辫触鐨勫垽鏂�.
+            auto ret_resUpdPersRet = erlangDbTool->singlePersonUpdate(newPerId, oldId, idcard, perPicUrl, perFea);
+            std::string str_result = "[";
+            int notexist_conNum = 0;
+            if (ret_resUpdPersRet.size() > 0) {
+                for (auto &item : ret_resUpdPersRet) {
+                    // tableName ,uuid 鏃犳浜烘槸id涓簄ull
+                    if (item.result == "true") {
+                        continue;
+                    }
+                    if (item.result == "notexist") {
+                        notexist_conNum++;
+                        continue;
+                    }
+
+                    string subJson = "{ ";
+                    subJson.append("\"tableName\":\"" + item.tableName + "\",");
+                    subJson.append("\"uuid\":\"" + item.tableUuid + "\"");
+                    subJson.append("},");
+                    str_result.append(subJson);
+                }
+                auto str = str_result.substr(0, str_result.size() - 1);
+                if (str.size() <= 1) {
+                    str_result = "[]";
+                } else {
+                    str_result.swap(str.append("]"));
+                }
+            } else {
+                str_result = "error";
+            }
+            if (str_result == "[]") {
+                if (notexist_conNum == ret_resUpdPersRet.size()) {
+                    str_res = "{\"result\":\"0\",\"msg\":\"success\",\"existDataBase\":[]}";
+                } else {
+                    str_res = "{\"result\":\"1\",\"msg\":\"success\",\"existDataBase\":[]}";
+                }
+            } else if (str_result == "error") {
+                str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+            } else {
+                str_res = "{\"result\":\"-1\",\"msg\":\"success\",\"existDataBase\":";
+                str_res.append(str_result).append("}");
+            }
+        } catch (std::exception ex) {
+            str_res = "{\"result\":\"-1\",\"msg\":\"error\",\"existDataBase\":[]}";
+            ERR(ex.what());
+        }
+        return str_res;
+    } else {
+        response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}");
+        return "";
+//        return "{\"error\":\"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
+    }
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.h b/QiaoJiaSystem/DataManagerServer/http_configserver.h
new file mode 100644
index 0000000..09f8e27
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.h
@@ -0,0 +1,178 @@
+#ifndef HTTP_CONFIGSERVER_H
+#define HTTP_CONFIGSERVER_H
+
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+#include "opencv2/opencv.hpp"
+#include <string>
+#include "HttpSrvRetRecieve.hpp"
+#include "LDBTool.h"
+#include <ErlangDbTool.h>
+#include <basic/util/BASE64/Base64.h>
+#include <basic/util/opencv/CvUtil.h>
+#include <sys/sem.h>
+
+#include <LocalDBTool/SqliteFaceEncap.h>
+#include <CurlDownloadImg.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <atomic>
+#include "../FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h"
+#include "AppPipeController.h"
+
+typedef std::shared_ptr<HttpServer::Response> PResponse;
+
+
+struct srsPipeController_s {
+    AppPipeController *appPC;
+    std::atomic<int> userCounter;
+};
+
+class devHttpServer_c {
+public:
+    devHttpServer_c();
+
+    devHttpServer_c(std::string test);
+
+    devHttpServer_c(std::string ip, int port, int pthNum);
+
+    ~devHttpServer_c();
+
+//private:
+    std::string dev_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string dev_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string devchn_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string devchn_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string dev_search_chns(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string chk_chn_connet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string cam_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string cam_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string chk_cam_connet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string chk_cam_disconnet(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string dev_del(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string cam_del(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string server_info_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string server_info_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string cut_dura_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string cut_dura_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string netconfig_edit(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string netconfig_show(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+
+    std::string addNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string searchNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string modifyCluName(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string removeNode(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string createDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string deleteDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string updateDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string findAllDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string findLocalDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string addPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string addPersons(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string personIsExists(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string updatePersonByOldId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+
+    std::string delPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string loadFaceFeaData(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string getAlarmImageFromVideoFile(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string getRecordVideoPath(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string findDevId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string editDevName(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+    std::string editDevId(std::string ip, unsigned int port, std::string content, PResponse &response);
+
+private:
+    void init(void);
+
+private:
+
+    HttpSrvRetRecieve _HttpSrvRetRecieve;
+    LDBTool db_c;
+    std::string m_cluster_id;
+    std::string m_cluster_name;
+    std::map<std::string, srsPipeController_s> m_rtmp;
+
+
+    ErlangTool::ErlangDbTool *erlangDbTool;
+    SqliteFaceEncap m_SqliteFaceEncap;
+
+//    ErlangDbTool *erlangDbTool;
+    std::map<std::thread::id, CasiaFaceWrapperN *> m_handleMap;
+    CvUtil cvutil;
+    Base64 base64;
+    std::string m_batch;
+    std::string m_SerialNumber;
+
+    CurlDownloadImg m_curlDownloadImg;
+
+    FastFdsWithLock fdfsClient;
+
+    bool getDevSerialNumber(const char *ip, const int port, const char *username, \
+                            const char *passwd, const char *brand, unsigned char *serialNumber) const;
+
+    bool getDevChnList(const char *ip, const int port, const char *username, const char *passwd, \
+                                        const char *brand, std::vector<int> &lvecUsefulChans) const;
+
+    bool loadCurrentVideo(const char *ip, const int port, const char *username, const char *passwd, \
+                                        const char *brand, const int chn, std::string &videopath) const;
+
+    bool cam_connect_video_start(std::string ip, int port, std::string username, std::string passwd, \
+                                        std::string brand) const;
+
+    bool cam_connect_video_stop(std::string ip) const;
+
+    void runAllApp() const;
+
+    void killFaceSearchServerApp() const;
+
+    void killVideoAnalysFromHCApp() const;
+
+    bool getUVDevSerialNumber(const char *ip, const char *username, const char *passwd,
+                              unsigned char *serialNumber = NULL) const;
+
+    bool getHKDevSerialNumber(const char *ip, const int port, const char *username, const char *passwd,
+                              unsigned char *serialNumber = NULL) const;
+    bool createDevId(const  int& dev_batch, const  int& dev_sequence) ;
+
+    std::string getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub);
+
+    std::vector<std::string> forEachFile(const std::string &dir_name);
+};
+
+#endif
diff --git a/QiaoJiaSystem/DataManagerServer/http_examples.cpp b/QiaoJiaSystem/DataManagerServer/http_examples.cpp
new file mode 100644
index 0000000..58e3a82
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/http_examples.cpp
@@ -0,0 +1,264 @@
+#include "client_http.hpp"
+#include "server_http.hpp"
+
+// Added for the json-example
+#define BOOST_SPIRIT_THREADSAFE
+
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+// Added for the default_resource example
+#include <algorithm>
+#include <boost/filesystem.hpp>
+#include <fstream>
+#include <vector>
+
+#ifdef HAVE_OPENSSL
+
+#include "crypto.hpp"
+
+#endif
+
+using namespace std;
+// Added for the json-example:
+using namespace boost::property_tree;
+
+using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
+using HttpClient = SimpleWeb::Client<SimpleWeb::HTTP>;
+
+int main() {
+    // HTTP-server at port 8080 using 1 thread
+    // Unless you do more heavy non-threaded processing in the resources,
+    // 1 thread is usually faster than several threads
+    HttpServer server;
+    server.config.thread_pool_size
+    server.config.address = "192.168.188.128";
+    server.config.port = 8090;
+
+    // Add resources using path-regex and method-string, and an anonymous function
+    // POST-example for the path /string, responds the posted string
+    server.resource["^/string$"]["POST"] = [](shared_ptr<HttpServer::Response> response,
+                                              shared_ptr<HttpServer::Request> request) {
+        // Retrieve string:
+        auto content = request->content.string();
+        // request->content.string() is a convenience function for:
+        // stringstream ss;
+        // ss << request->content.rdbuf();
+        // auto content=ss.str();
+
+        *response << "HTTP/1.1 200 OK\r\nContent-Length: " << content.length() << "\r\n\r\n"
+                  << content;
+
+
+        // Alternatively, use one of the convenience functions, for instance:
+        // response->write(content);
+    };
+
+    // POST-example for the path /json, responds firstName+" "+lastName from the posted json
+    // Responds with an appropriate error message if the posted json is not valid, or if firstName or lastName is missing
+    // Example posted json:
+    // {
+    //   "firstName": "John",
+    //   "lastName": "Smith",
+    //   "age": 25
+    // }
+    server.resource["^/json$"]["POST"] = [](shared_ptr<HttpServer::Response> response,
+                                            shared_ptr<HttpServer::Request> request) {
+        try {
+            ptree pt;
+            read_json(request->content, pt);
+
+            auto name = pt.get<string>("firstName") + " " + pt.get<string>("lastName");
+
+//      write_json()
+//            write_json(*response,pt);
+
+//            *response << "HTTP/1.1 200 OK\r\n"
+//                      << "Content-Length: " << name.length() << "\r\n\r\n"
+//                      << name;
+            string res = "{\"aaaa\": \"cccc\",\"dasfd\": \"asdfasdf\",\"age\": 123212}";
+            *response << "HTTP/1.1 200 OK\r\n"
+                      << "Content-Length: " << res.size() << "\r\n\r\n"<<res;
+//            write_json(*response,pt);
+        }
+        catch (const exception &e) {
+            *response << "HTTP/1.1 400 Bad Request\r\nContent-Length: " << strlen(e.what()) << "\r\n\r\n"
+                      << e.what();
+        }
+
+
+        // Alternatively, using a convenience function:
+        // try {
+        //     ptree pt;
+        //     read_json(request->content, pt);
+
+        //     auto name=pt.get<string>("firstName")+" "+pt.get<string>("lastName");
+        //     response->write(name);
+        // }
+        // catch(const exception &e) {
+        //     response->write(SimpleWeb::StatusCode::client_error_bad_request, e.what());
+        // }
+    };
+
+    // GET-example for the path /info
+    // Responds with request-information
+    server.resource["^/info$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+                                           shared_ptr<HttpServer::Request> request) {
+        stringstream stream;
+        stream << "<h1>Request from " << request->remote_endpoint_address() << ":" << request->remote_endpoint_port()
+               << "</h1>";
+
+        stream << request->method << " " << request->path << " HTTP/" << request->http_version;
+
+        stream << "<h2>Query Fields</h2>";
+        auto query_fields = request->parse_query_string();
+        for (auto &field : query_fields)
+            stream << field.first << ": " << field.second << "<br>";
+
+        stream << "<h2>Header Fields</h2>";
+        for (auto &field : request->header)
+            stream << field.first << ": " << field.second << "<br>";
+
+        response->write(stream);
+    };
+
+    // GET-example for the path /match/[number], responds with the matched string in path (number)
+    // For instance a request GET /match/123 will receive: 123
+    server.resource["^/match/([0-9]+)$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+                                                     shared_ptr<HttpServer::Request> request) {
+        response->write(request->path_match[1]);
+    };
+
+    // GET-example simulating heavy work in a separate thread
+    server.resource["^/work$"]["GET"] = [](shared_ptr<HttpServer::Response> response,
+                                           shared_ptr<HttpServer::Request> /*request*/) {
+        thread work_thread([response] {
+            this_thread::sleep_for(chrono::seconds(5));
+            response->write("Work done");
+        });
+        work_thread.detach();
+    };
+
+    // Default GET-example. If no other matches, this anonymous function will be called.
+    // Will respond with content in the web/-directory, and its subdirectories.
+    // Default file: index.html
+    // Can for instance be used to retrieve an HTML 5 client that uses REST-resources on this server
+    server.default_resource["GET"] = [](shared_ptr<HttpServer::Response> response,
+                                        shared_ptr<HttpServer::Request> request) {
+        try {
+            auto web_root_path = boost::filesystem::canonical("web");
+            auto path = boost::filesystem::canonical(web_root_path / request->path);
+            // Check if path is within web_root_path
+            if (distance(web_root_path.begin(), web_root_path.end()) > distance(path.begin(), path.end()) ||
+                !equal(web_root_path.begin(), web_root_path.end(), path.begin()))
+                throw invalid_argument("path must be within root path");
+            if (boost::filesystem::is_directory(path))
+                path /= "index.html";
+
+            SimpleWeb::CaseInsensitiveMultimap header;
+
+            // Uncomment the following line to enable Cache-Control
+            // header.emplace("Cache-Control", "max-age=86400");
+
+#ifdef HAVE_OPENSSL
+//    Uncomment the following lines to enable ETag
+//    {
+//      ifstream ifs(path.string(), ifstream::in | ios::binary);
+//      if(ifs) {
+//        auto hash = SimpleWeb::Crypto::to_hex_string(SimpleWeb::Crypto::md5(ifs));
+//        header.emplace("ETag", "\"" + hash + "\"");
+//        auto it = request->header.find("If-None-Match");
+//        if(it != request->header.end()) {
+//          if(!it->second.empty() && it->second.compare(1, hash.size(), hash) == 0) {
+//            response->write(SimpleWeb::StatusCode::redirection_not_modified, header);
+//            return;
+//          }
+//        }
+//      }
+//      else
+//        throw invalid_argument("could not read file");
+//    }
+#endif
+
+            auto ifs = make_shared<ifstream>();
+            ifs->open(path.string(), ifstream::in | ios::binary | ios::ate);
+
+            if (*ifs) {
+                auto length = ifs->tellg();
+                ifs->seekg(0, ios::beg);
+
+                header.emplace("Content-Length", to_string(length));
+                response->write(header);
+
+                // Trick to define a recursive function within this scope (for example purposes)
+                class FileServer {
+                public:
+                    static void
+                    read_and_send(const shared_ptr<HttpServer::Response> &response, const shared_ptr<ifstream> &ifs) {
+                        // Read and send 128 KB at a time
+                        static vector<char> buffer(131072); // Safe when server is running on one thread
+                        streamsize read_length;
+                        if ((read_length = ifs->read(&buffer[0], static_cast<streamsize>(buffer.size())).gcount()) >
+                            0) {
+                            response->write(&buffer[0], read_length);
+                            if (read_length == static_cast<streamsize>(buffer.size())) {
+                                response->send([response, ifs](const SimpleWeb::error_code &ec) {
+                                    if (!ec)
+                                        read_and_send(response, ifs);
+                                    else
+                                        cerr << "Connection interrupted" << endl;
+                                });
+                            }
+                        }
+                    }
+                };
+                FileServer::read_and_send(response, ifs);
+            } else
+                throw invalid_argument("could not read file");
+        }
+        catch (const exception &e) {
+            response->write(SimpleWeb::StatusCode::client_error_bad_request,
+                            "Could not open path " + request->path + ": " + e.what());
+        }
+    };
+
+    server.on_error = [](shared_ptr<HttpServer::Request> /*request*/, const SimpleWeb::error_code & /*ec*/) {
+        // Handle errors here
+        // Note that connection timeouts will also call this handle with ec set to SimpleWeb::errc::operation_canceled
+    };
+
+    thread server_thread([&server]() {
+        // Start server
+        server.start();
+    });
+
+    // Wait for server to start so that the client can connect
+    this_thread::sleep_for(chrono::seconds(1));
+
+    // Client examples
+    HttpClient client("192.168.188.128:8090");
+
+    string json_string = "{\"firstName\": \"John\",\"lastName\": \"Smith\",\"age\": 25}";
+
+    // Synchronous request examples
+    try {
+        auto r1 = client.request("GET", "/match/123");
+        cout << r1->content.rdbuf() << endl; // Alternatively, use the convenience function r1->content.string()
+
+        auto r2 = client.request("POST", "/string", json_string);
+        cout << r2->content.rdbuf() << endl;
+    }
+    catch (const SimpleWeb::system_error &e) {
+        cerr << "Client request error: " << e.what() << endl;
+    }
+
+    // Asynchronous request example
+    client.request("POST", "/json", json_string,
+                   [](shared_ptr<HttpClient::Response> response, const SimpleWeb::error_code &ec) {
+                       if (!ec)
+                           cout << response->content.rdbuf() << endl;
+                   });
+    client.io_service->run();
+
+    server_thread.join();
+}
diff --git a/QiaoJiaSystem/DataManagerServer/main.cpp b/QiaoJiaSystem/DataManagerServer/main.cpp
new file mode 100644
index 0000000..62ffa51
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/main.cpp
@@ -0,0 +1,31 @@
+#include <iostream>
+
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+#include "http_configserver.h"
+#include "net_config/net_config.h"
+//#include "../segvCatch.h"
+using namespace std;
+using namespace cv;
+
+int main(int argc, char **argv) {
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+//    unsigned char gateway_addr[15] = {0};
+//    SetIpAddress("enp1s0", "192.168.1.181");
+//    SetMaskAddress("enp1s0", "255.255.255.0");
+//    GetGateWay("enp1s0", gateway_addr);
+//    SetGateWay("enp1s0", (char *)gateway_addr, "192.168.1.1");
+
+    appPref.setLongData("gpu.index", 0);//gpu
+    appPref.setLongData("thread.max", 20);//sdk
+    int port = appConfig.getIntProperty("webPort");
+    devHttpServer_c _devHttpServer("0.0.0.0", port, 20);//webserver thread
+
+    cout << "Hello World!" << endl;
+    return 0;
+}
+
+
+//erl -name sub1@192.168.1.164 -setcookie  abc -mnesia dir '"/opt/erlang/sub1"'
+//erl -name sub2@192.168.1.116 -setcookie  abc -mnesia dir '"/opt/erlang/sub2"' -detached -noshell
\ No newline at end of file
diff --git a/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp b/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp
new file mode 100644
index 0000000..ab336be
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/net_config/net_config.cpp
@@ -0,0 +1,969 @@
+/******************************************************************************
+*	
+*		
+*******************************************************************************
+*	File name:	 net.c
+*	Purpose:	     
+*	Author:		 Felix(HuangFei)
+*	Version:	  	 v01.00
+*	Compiler:	 arm-linux-gcc
+*	Created on:	 2014-11-28
+*******************************************************************************
+*	Note:
+*	Revision history:  
+*                       Created by HuangFei    2014-11-28
+******************************************************************************/
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <ctype.h>
+
+#include <linux/sockios.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <net/if_arp.h>
+#include <unistd.h>
+#include <net/if.h>
+#include <net/route.h>
+
+#include <string.h>
+#include <ifaddrs.h>
+
+#include "net_config.h"
+#include <errno.h>
+
+#define TRUE    1
+#define FALSE   0
+#define MAC_ADDRESS_LEN 6
+#define PATH_PROCNET_ROUTE		"/proc/net/route"
+#define IFACE_NAME_LENGTH        IF_NAMESIZE
+
+#include <string>
+#include <regex>
+bool checkip(std::string ip)
+{
+    std::regex rx2("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$");
+    if( !regex_match(ip.cbegin(), ip.cend(), rx2) ) {
+        return false;
+    }
+    return true;
+}
+
+bool checkMask(std::string mask)
+{
+    std::regex rx2("^(254|252|248|240|224|192|128|0)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)$");
+    if( !regex_match(mask.cbegin(), mask.cend(), rx2)) {
+        return false;
+    }
+    return true;
+}
+
+/**********************************************************************
+ * Function:      SetMacAddress
+ * Description:   璁剧疆mac鍦板潃
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宲MacAddress锛歮ac鍦板潃棣栧湴鍧�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetMacAddress(char *pInterface,char *pMacAddress)
+{
+    struct ifreq ifr;
+    struct sockaddr *hwaddr;
+    unsigned char *hwptr;
+    int sockfd;
+    int i;
+
+	/* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+    if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if(pMacAddress == NULL)
+    {
+        printf("input mac address error\n");
+        return FALSE;
+    }
+    
+	sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+    
+     /*璇诲嚭socket鐨勪俊鎭�*/
+	if (0 > ioctl(sockfd, SIOCGIFFLAGS, &ifr))
+	{
+		printf("close the ethx:unknown interface\r\n");
+	}
+	ifr.ifr_flags &= ~IFF_UP;
+    /*灏嗕俊鎭啓鍒皊ocket涓紝浠庤�屽叧闂璭th0*/
+	if (0 > ioctl(sockfd, SIOCSIFFLAGS, &ifr)) 
+	{
+		printf("Can't close the ethx \r\n");
+        return FALSE;
+	}
+
+	/*---------------------------------------------------------------------*/
+	/* set the interface eth0's  MAC address                               */
+	/*---------------------------------------------------------------------*/
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+	hwaddr=(struct sockaddr *)&ifr.ifr_hwaddr;
+    
+    /*ARPHRD_ETHER锛�1锛屾爣璇嗘帴鏀剁殑ARP涓轰互澶綉鏍煎紡*/
+	hwaddr->sa_family = ARPHRD_ETHER;
+    hwptr=(unsigned char*)hwaddr->sa_data;
+
+	for(i=0;i<6;i++)
+		*hwptr++ = (unsigned char)pMacAddress[i];
+		
+	if (0 > ioctl(sockfd, SIOCSIFHWADDR, &ifr))
+	{
+		printf("Can't set the MAC address\r\n");
+	}
+
+    /*---------------------------------------------------------------------*/
+    /* open the interface eth0                                             */
+    /*---------------------------------------------------------------------*/	
+    memset(&ifr, 0, sizeof(ifr));
+    strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+    if (0 > ioctl(sockfd,SIOCGIFFLAGS, &ifr)) 
+    {
+    	printf("open the ethx:unknown interface\r\n");
+    }
+    ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);
+    if (0 > ioctl(sockfd, SIOCSIFFLAGS, &ifr)) 
+    {
+    	printf("Can't open the ethx\r\n");
+    }
+    
+    close(sockfd);
+
+    return TRUE;
+}
+
+
+/**********************************************************************
+ * Function:      SetIpAddress
+ * Description:   璁剧疆ip鍦板潃
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pAddress锛歩p鍦板潃鐨�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetIpAddress(char *pInterface,const char* IpAddress)
+{
+
+    struct ifreq ifr;
+    struct sockaddr_in *sinaddr;
+    int sockfd;
+
+    
+    if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if(IpAddress == NULL)
+    {
+        printf("input ip address error\n");
+        return FALSE;
+    }
+ 
+    sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+	sinaddr = (struct sockaddr_in *)&ifr.ifr_addr;
+	sinaddr->sin_family = AF_INET;
+//    sinaddr->sin_addr.s_addr = inet_aton(IpAddress);
+    if(inet_aton(IpAddress, &(sinaddr->sin_addr)) < 0)
+    {
+        printf("input ip address error\n");
+        return FALSE;
+    }
+
+    if (ioctl(sockfd, SIOCSIFADDR, &ifr) < 0)
+	{
+		printf("Can't set ip address\r\n");
+		return FALSE;
+	}
+
+    close(sockfd);
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      SetMaskAddress
+ * Description:   璁剧疆瀛愮綉鎺╃爜
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pMask锛氬瓙缃戞帺鐮�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetMaskAddress(char *pInterface,const char* IpMask)
+{
+    struct ifreq ifr;
+    struct sockaddr_in *sinaddr;
+    int sockfd;
+
+	/* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+    if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if(IpMask == NULL)
+    {
+        printf("input mask address error\n");
+        return FALSE;
+    }
+
+    
+	sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+
+	memset(&ifr, 0, sizeof(ifr));
+	strncpy(ifr.ifr_name, pInterface, sizeof(ifr.ifr_name)-1);
+	sinaddr = (struct sockaddr_in *)&ifr.ifr_netmask;
+	sinaddr->sin_family = AF_INET;
+//	sinaddr->sin_addr.s_addr = IpMask;
+    if(inet_aton(IpMask, &(sinaddr->sin_addr)) < 0)
+    {
+        printf("input ip address error\n");
+        return FALSE;
+    }
+
+	if (0 > ioctl(sockfd, SIOCSIFNETMASK, &ifr)) 
+	{
+		printf("Can't set subnet netmask\r\n");
+	}
+
+    close(sockfd);
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      DelGateWay
+ * Description:   鍒犻櫎鎸囧畾鐨勭綉鍏�
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孌elGateWay锛氱綉鍏�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool DelGateWay(char *pInterface,unsigned int DelGateWay)
+{
+
+    struct sockaddr_in *sinaddr;
+    struct rtentry rt;
+    struct sockaddr rtsockaddr;
+    int sockfd;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+    if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if(DelGateWay == 0)
+    {
+        printf("input GateWay error!\n");
+        return FALSE;
+    }
+    
+	sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+
+
+	/* Clean out the RTREQ structure. */
+	memset((char *) &rt, 0, sizeof(struct rtentry));
+	memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+	sinaddr = (struct sockaddr_in *)&rtsockaddr;
+	sinaddr->sin_family = AF_INET;
+    
+    /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+	sinaddr->sin_addr.s_addr = INADDR_ANY;	
+    
+    /*set the destination address to '0.0.0.0'*/
+	rt.rt_dst = rtsockaddr;
+
+    /*set the netmask to '0.0.0.0'*/
+	rt.rt_genmask = rtsockaddr;			
+
+	/* Fill in the other fields. */
+	rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+	rt.rt_metric = 1;
+	rt.rt_dev = pInterface;
+
+	/*delete the current default gateway*/
+	sinaddr->sin_addr.s_addr = DelGateWay;
+	rt.rt_gateway = rtsockaddr;
+
+    
+	if (0 > ioctl(sockfd, SIOCDELRT, &rt)) 
+	{
+		printf("Can't delete the current gateway\r\n");
+	}
+
+    close(sockfd);
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      AddGateWay
+ * Description:   澧炲姞鎸囧畾鐨勭綉鍏�
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孨ewGateWay锛氱綉鍏�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool AddGateWay(char *pInterface,unsigned int NewGateWay)
+{
+    struct sockaddr_in *sinaddr;
+    struct rtentry rt;
+    struct sockaddr rtsockaddr;
+    int sockfd;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+    if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if(NewGateWay == 0)
+    {
+        printf("input GateWay error!\n");
+        return FALSE;
+    }
+    
+	sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+
+
+	/* Clean out the RTREQ structure. */
+	memset((char *) &rt, 0, sizeof(struct rtentry));
+	memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+	sinaddr = (struct sockaddr_in *)&rtsockaddr;
+	sinaddr->sin_family = AF_INET;
+    
+    /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+	sinaddr->sin_addr.s_addr = INADDR_ANY;	
+    
+    /*set the destination address to '0.0.0.0'*/
+	rt.rt_dst = rtsockaddr;
+
+    /*set the netmask to '0.0.0.0'*/
+	rt.rt_genmask = rtsockaddr;			
+
+	/* Fill in the other fields. */
+	rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+	rt.rt_metric = 1;
+	rt.rt_dev = pInterface;
+
+	/*set the new default gateway*/
+	sinaddr->sin_addr.s_addr = NewGateWay;
+	rt.rt_gateway =rtsockaddr;
+	    
+	if (0 > ioctl(sockfd, SIOCADDRT, &rt))
+	{
+		printf("Can't set the new default gateway\r\n");
+	}
+
+    close(sockfd);
+
+    return TRUE;
+
+}
+
+/**********************************************************************
+ * Function:      SetGateWay
+ * Description:   璁剧疆缃戝叧锛屽厛鍒犻櫎宸茬粡鏈夌殑锛屽啀娣诲姞鏂扮殑
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孌elGateWay锛氬垹闄ょ殑缃戝叧锛�
+				  NewGateWay锛� 鏂版坊鍔犵殑缃戝叧
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetGateWay(char *pInterface,const char* DelGateWay,const char* NewGateWay)
+{
+
+    struct sockaddr_in *sinaddr;
+    struct rtentry rt;
+    struct sockaddr rtsockaddr;
+    int sockfd;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+    if((pInterface == NULL)/*||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h')*/)
+    {
+        printf("input inteface error!\n");
+        return FALSE;
+    }
+    if((DelGateWay == NULL) && (NewGateWay == NULL))
+    {
+        printf("input GateWay error!\n");
+        return FALSE;
+    }
+    
+	sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+	}
+
+
+	/* Clean out the RTREQ structure. */
+	memset((char *) &rt, 0, sizeof(struct rtentry));
+	memset((char *)&rtsockaddr,0,sizeof(struct sockaddr));
+	sinaddr = (struct sockaddr_in *)&rtsockaddr;
+	sinaddr->sin_family = AF_INET;
+    
+    /*INADDR_ANY灏辨槸鎸囧畾鍦板潃涓�0.0.0.0鐨勫湴鍧�,杩欎釜鍦板潃浜嬪疄涓婅〃绀轰笉纭畾鍦板潃,鎴栤�滄墍鏈夊湴鍧�鈥濄�佲�滀换鎰忓湴鍧�鈥�*/
+	sinaddr->sin_addr.s_addr = INADDR_ANY;	
+    
+    /*set the destination address to '0.0.0.0'*/
+	rt.rt_dst = rtsockaddr;
+
+    /*set the netmask to '0.0.0.0'*/
+	rt.rt_genmask = rtsockaddr;			
+
+	/* Fill in the other fields. */
+	rt.rt_flags = (RTF_UP|RTF_GATEWAY);
+	rt.rt_metric = 1;
+	rt.rt_dev = pInterface;
+
+	/*delete the current default gateway*/
+//	sinaddr->sin_addr.s_addr = DelGateWay;
+    if(inet_aton(DelGateWay, &(sinaddr->sin_addr)) < 0)
+    {
+        printf("input ip address error\n");
+        return FALSE;
+    }
+	rt.rt_gateway = rtsockaddr;
+
+    
+	if (0 > ioctl(sockfd, SIOCDELRT, &rt)) 
+	{
+		printf("Can't delete the current default gateway\r\n");
+	}
+
+	/*set the new default gateway*/
+//	sinaddr->sin_addr.s_addr = NewGateWay;
+    if(inet_aton(NewGateWay, &(sinaddr->sin_addr)) < 0)
+    {
+        printf("input ip address error\n");
+        return FALSE;
+    }
+	rt.rt_gateway =rtsockaddr;
+	    
+	if (0 > ioctl(sockfd, SIOCADDRT, &rt))
+	{
+		printf("Can't set the new default gateway\r\n");
+	}
+
+    close(sockfd);
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      GetMacAddress
+ * Description:   鑾峰緱鎸囧畾缃戝彛鐨勭墿鐞哅AC鍦拌川
+ * Input:         ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宧wAddr锛氬緱鍒扮殑mac鍦板潃
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool GetMacAddress (char* ifaceName, unsigned char* hwAddr)
+{
+    int ret;
+    int sockfd;
+    struct ifreq ifr;
+    unsigned char temp_mac[6] = {0};
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+//    if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+//    {
+//        printf("input inteface error!\n");
+//        return FALSE;
+//    }
+        
+    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+    if(sockfd < 0)
+    {
+    	printf("Could not open test socket");
+    	return FALSE;
+    }
+
+    memset(&ifr, 0, sizeof(ifr));
+
+    strncpy(ifr.ifr_name, ifaceName, IFACE_NAME_LENGTH);
+
+    if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0)
+    {
+        printf("failed to request hardware address for %s", ifaceName);
+	    close(sockfd);
+        return FALSE;
+    }
+
+    int af = ifr.ifr_hwaddr.sa_family;
+    //int af = ifr.ifr_addr.sa_family;
+    
+    memcpy(temp_mac, ifr.ifr_hwaddr.sa_data, MAC_ADDRESS_LEN);
+    sprintf((char *)hwAddr,"%02x:%02x:%02x:%02x:%02x:%02x", \
+            temp_mac[0], temp_mac[1], temp_mac[2], temp_mac[3], temp_mac[4], temp_mac[5]);
+   //memcpy(hwAddr, ifr.ifr_addr.sa_data, hwAddrSize);
+
+	return TRUE;
+    
+}
+
+/**********************************************************************
+ * Function:      GetIpAddress
+ * Description:   鑾峰緱鎸囧畾绔彛鐨刬p鍦板潃
+ * Input:         ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孖pAddress锛氬緱鍒扮殑ip鍦板潃
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool GetIpAddress(char* ifaceName,unsigned char *IpAddress)
+{
+    struct ifaddrs *ifaddr, *ifa;
+    struct ifreq ifr;
+    struct sockaddr_in *sinaddr;
+    int sockfd;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+//    if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+//    {
+//        printf("input inteface error!\n");
+//        return FALSE;
+//    }
+
+    if(getifaddrs(&ifaddr) == -1)
+    {
+	    printf("Could not get interface list");
+        freeifaddrs(ifaddr);
+        return FALSE;
+    }
+    
+    sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+        return FALSE;
+	}
+
+    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+    {
+    	if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+        {
+    		memset(&ifr, 0, sizeof(ifr));
+            strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)-1);
+            if (0 > ioctl(sockfd, SIOCGIFADDR, &ifr)) 
+	        {
+		        printf("Can't get ip address\r\n");
+                return FALSE;
+	        }
+            sinaddr = (struct sockaddr_in *)&ifr.ifr_addr;
+            strcpy((char *)IpAddress,inet_ntoa(sinaddr->sin_addr));
+            freeifaddrs(ifaddr);
+            close(sockfd);
+            return TRUE;
+
+    	}
+
+    }
+
+    printf("input interface no found\n");
+
+    freeifaddrs(ifaddr);
+    
+    return FALSE;
+}
+
+/**********************************************************************
+ * Function:      GetMaskAddress
+ * Description:   鑾峰緱鎸囧畾绔彛鐨勫瓙缃戞帺鐮�
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛孧askAddress锛氬緱鍒扮殑瀛愮綉鎺╃爜
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool GetMaskAddress(char* ifaceName,unsigned char *MaskAddress)
+{
+    struct ifaddrs *ifaddr, *ifa;
+    struct ifreq ifr;
+    struct sockaddr_in *sinaddr;
+    int sockfd;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+//    if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+//    {
+//        printf("input inteface error!\n");
+//        return FALSE;
+//    }
+
+    if(getifaddrs(&ifaddr) == -1)
+    {
+	    printf("Could not get interface list");
+        freeifaddrs(ifaddr);
+        return FALSE;
+    }
+
+    sockfd= socket(AF_INET,SOCK_DGRAM,0);
+	if (sockfd<0)
+	{
+		printf("Can't creat socket  \r\n");
+        return FALSE;
+	}
+
+
+    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+    {
+    	if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+        {
+    		memset(&ifr, 0, sizeof(ifr));
+            strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name)-1);
+            if (0 > ioctl(sockfd, SIOCGIFNETMASK, &ifr)) 
+	        {
+		        printf("Can't get ip address\r\n");
+                return FALSE;
+	        }
+            sinaddr = (struct sockaddr_in *)&ifr.ifr_netmask;
+//            *MaskAddress = sinaddr->sin_addr.s_addr;
+            strcpy((char *)MaskAddress,inet_ntoa(sinaddr->sin_addr));
+            freeifaddrs(ifaddr);
+            close(sockfd);
+            return TRUE;
+    	}
+    }
+
+    printf("input interface no found\n");
+    freeifaddrs(ifaddr);
+    
+    return FALSE;
+}
+
+/**********************************************************************
+ * Function:      GetAddress
+ * Description:   鑾峰緱鎸囧畾缃戝彛鐨剆ockdaddr鍦板潃
+ * Input:         ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宎ddr锛氬湴鍧�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool GetAddress(char* ifaceName,struct sockaddr* addr)
+{
+    struct ifaddrs *ifaddr, *ifa;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+//    if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+//    {
+//        printf("input inteface error!\n");
+//        return FALSE;
+//    }
+
+    if(getifaddrs(&ifaddr) == -1)
+    {
+	    printf("Could not get interface list");
+        freeifaddrs(ifaddr);
+        return FALSE;
+    }
+
+    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+    {
+
+    	if(!strcmp(ifaceName, ifa->ifa_name) && (ifa->ifa_addr->sa_family == AF_INET))
+        {
+    		memcpy(addr, ifa->ifa_addr, sizeof(struct sockaddr));
+            freeifaddrs(ifaddr);
+            return TRUE;
+
+    	}
+
+    }
+
+    printf("input interface no found\n");
+    freeifaddrs(ifaddr);
+    return FALSE;
+}
+
+
+/**********************************************************************
+ * Function:      GetGateWay
+ * Description:   寰楀埌榛樿缃戝叧
+ * Input:         pInterface 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0锛宲GateWay锛氬緱鍒扮殑缃戝叧
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool GetGateWay(char *pInterface,unsigned char *pGateWay)
+{
+    short i = 0;
+ 	char buff[1024], iface[16];
+	char gate_addr[128], net_addr[128];
+	char mask_addr[128];
+	int num, iflags, metric, refcnt, use, mss, window, irtt;
+    
+ 	char *sp , *bp;    
+	unsigned int val=0;
+
+    /* 鍒ゆ柇鎺ュ彛杈撳叆鏄惁姝g‘ */
+//    if((pInterface == NULL)||(pInterface[0]!='e')||(pInterface[1]!='t')||(pInterface[2]!='h'))
+//    {
+//        printf("input inteface error!\n");
+//        return FALSE;
+//    }
+    if(pGateWay == NULL)
+    {
+        printf("input mac address error\n");
+        return FALSE;
+    }
+
+    FILE *fp = fopen(PATH_PROCNET_ROUTE, "r");
+
+    while (fgets(buff, 1023, fp))
+    {
+             num = sscanf(buff, "%16s %128s %128s %X %d %d %d %128s %d %d %d\n",
+             iface, net_addr, gate_addr,
+             &iflags, &refcnt, &use, &metric, mask_addr,
+             &mss, &window, &irtt);
+             if (num < 10 || !(iflags & RTF_UP))
+                 continue;
+             if(strncmp(iface,pInterface,4)!=0)
+                 continue;
+             if(strncmp(net_addr,"00000000",8)!=0)
+                 continue;
+             if(strncmp(mask_addr,"00000000",8)!=0)
+                 continue;
+             bp = (char *) &val;
+             
+             sp = gate_addr;
+             for (i = 0; i < 4; i++) 
+             {
+                 *sp = toupper(*sp);
+                 if ((*sp >= 'A') && (*sp <= 'F'))
+                     bp[i] |= (int) (*sp - 'A') + 10;
+                 else if ((*sp >= '0') && (*sp <= '9'))
+                     bp[i] |= (int) (*sp - '0');
+                 else
+                 {
+                     printf("Can't convert the gateway string to integer.\n\r");
+                     fclose(fp);
+                     return 0;
+                 }
+                 bp[i] <<= 4;
+                 sp++;
+                 *sp = toupper(*sp);
+     
+                 if ((*sp >= 'A') && (*sp <= 'F'))
+                         bp[i] |= (int) (*sp - 'A') + 10;
+                 else if ((*sp >= '0') && (*sp <= '9'))
+                         bp[i] |= (int) (*sp - '0');
+                 else
+                 {
+                     printf("Can't convert the gateway string to integer.\n");
+                     fclose(fp);
+                     return 0;
+                 }
+                 sp++;
+             }
+    }
+
+    if(val == 0)
+    {
+        printf("Don't find default gateway = %d\n",val);
+        fclose(fp);
+        return FALSE;
+    }
+    else
+    {
+//        *pGateWay = htonl(val);
+        sprintf((char *)pGateWay,"%d.%d.%d.%d", (val>>24)&0xFF, (val>>16)&0xFF, (val>>8)&0xFF,val&0xFF);
+    }
+
+
+    fclose(fp);
+    return TRUE;
+}
+
+
+/**********************************************************************
+ * Function:      SetSock_reUse
+ * Description:   璁剧疆缃戠粶濂楁帴瀛楅噸澶嶄娇鐢�
+ * Input:         sockfd锛氱綉缁滃鎺ュ瓧
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetSock_reUse(int sockfd)
+{
+    int reuse = 1;
+    if(-1 == setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(int)))
+    {
+		printf("setsockopt fail!\n");
+        return FALSE;
+	}
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      SetSock_NoCheck
+ * Description:   璁剧疆濂楁帴瀛楁暟鎹寘涓嶆娴�
+ * Input:         sockfd锛氱綉缁滃鎺ュ瓧
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetSock_NoCheck(int sockfd)
+{
+    int nocheck = 1;
+    if(0 != setsockopt(sockfd, SOL_SOCKET, SO_NO_CHECK, &nocheck, sizeof(int)))
+    {
+        printf("setsockopt NO_CHECK error!\n");
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      SetMutiCastLoop
+ * Description:   璁剧疆鍥炵幆澶氭挱
+ * Input:         sockfd锛歴ocket濂楁帴瀛楋紝val锛�0 鍏抽棴锛�1 鎵撳紑
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetMutiCastLoop(int sockfd,int val)
+{
+    if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &val, sizeof(int))< 0)
+    {
+        printf("failed to set multicast LOOP value \n");
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      SetMutiCastTTl
+ * Description:   璁剧疆澶氭挱鍦板潃缁勬暟鎹寘鐨勭敓瀛樻椂闂�
+ * Input:         sockfd锛歴ocket濂楁帴瀛楋紝ttl锛岀敓瀛樻椂闂�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool SetMutiCastTTl(int sockfd,int ttl)
+{
+    if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl))< 0)
+    {
+        printf("failed to set multicast TTL value \n");
+        return FALSE;
+    }
+    return TRUE;
+}
+
+bool BindSockDevice(unsigned char*ifaceNmae,int sockfd)
+{
+    struct ifreq ifreg;
+    strncpy(ifreg.ifr_name, (const char*)ifaceNmae,IFNAMSIZ);
+    if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,(char *)&ifreg, sizeof(ifreg)) < 0)
+    {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      AddIpAddr_ToMultiCast
+ * Description:   灏嗘寚瀹歩p鍦板潃娣诲姞鍏ュ鎾粍
+ * Input:         sockfd锛歴ocket濂楁帴瀛楋紝ip锛歩p鍦板潃锛宮ulti_ip锛氬鎾湴鍧�锛宼tl锛氱敓瀛樻椂闂�
+ * Return:        鎴愬姛 1锛屽け璐� 0
+ * Others:        
+**********************************************************************/
+bool AddIpAddr_ToMultiCast(int sockfd,unsigned int ip,unsigned int multi_ip,int ttl)
+{
+    struct ip_mreq imr;
+    
+    imr.imr_multiaddr.s_addr = multi_ip;
+    imr.imr_interface.s_addr = ip;
+
+    if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, &imr.imr_interface.s_addr, sizeof(struct in_addr)) < 0)
+    {
+        printf("failed to set  multicast send interface\n");
+        return FALSE;
+    }
+    
+    if(setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imr, sizeof(imr))< 0)
+    {
+        printf("failed to add  multicast member\n");
+        return FALSE;
+    }
+    if(SetMutiCastTTl(sockfd,ttl) == FALSE)
+    {
+        return FALSE;
+    }
+    
+    return TRUE;
+}
+
+/**********************************************************************
+ * Function:      DisplayInterfaceStatus
+ * Description:   鏄剧ず褰撳墠鎺ュ彛鐘舵�佷俊鎭�
+ * Input:         ifaceName 锛氱綉缁滄帴鍙e悕瀛� 濡傦細eth0
+ * Return:        void
+ * Others:        
+**********************************************************************/
+void DisplayInterfaceStatus(char* ifaceName)
+{
+    int sockfd;
+    struct ifreq ifr;
+    struct ifaddrs *ifaddr, *ifa;
+    unsigned int flags;
+
+    
+    if((ifaceName == NULL)||(ifaceName[0]!='e')||(ifaceName[1]!='t')||(ifaceName[2]!='h'))
+    {
+        printf("input inteface error!\n");
+        return;
+    }
+    
+    if(getifaddrs(&ifaddr) == -1)
+    {
+    	printf("Could not get interface list");
+        freeifaddrs(ifaddr);
+        return;
+    }
+
+    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
+    {
+
+    	if(!strcmp(ifaceName, ifa->ifa_name))
+        {
+    	    flags = ifa->ifa_flags;
+    	    freeifaddrs(ifaddr);
+    	}
+
+    }
+    if(flags & IFF_UP)
+    {
+        printf("Interface %s is up \n",ifaceName);
+    }
+    if(flags & IFF_RUNNING)
+    {
+        printf("Interface %s is running ",ifaceName);
+    }
+
+}
+
+
diff --git a/QiaoJiaSystem/DataManagerServer/net_config/net_config.h b/QiaoJiaSystem/DataManagerServer/net_config/net_config.h
new file mode 100644
index 0000000..8449997
--- /dev/null
+++ b/QiaoJiaSystem/DataManagerServer/net_config/net_config.h
@@ -0,0 +1,61 @@
+/******************************************************************************
+*	
+*				
+*******************************************************************************
+*	File name:	 net.h
+*	Purpose:	     
+*	Author:		 Felix(HuangFei)
+*	Version:	  	 v01.00
+*	Compiler:	 arm-linux-gcc
+*	Created on:	 2014-11-28
+*******************************************************************************
+*	Note:
+*	Revision history:  
+*                       Created by HuangFei    2014-11-28
+******************************************************************************/
+
+#ifndef __NET_CONFIG_H__
+#define __NET_CONFIG_H__
+#include <string>
+
+#define NET_IFNAME "eth0"
+
+bool checkip(std::string ip);
+
+bool checkMask(std::string mask);
+
+bool SetMacAddress(char *pInterface,char *pMacAddress);
+
+bool SetIpAddress(char *pInterface,const char* IpAddress);
+
+bool SetMaskAddress(char *pInterface,const char* IpMask);
+
+bool DelGateWay(char *pInterface,unsigned int DelGateWay);
+
+bool AddGateWay(char *pInterface,unsigned int NewGateWay);
+
+bool SetGateWay(char *pInterface,const char* DelGateWay,const char* NewGateWay);
+
+bool GetMacAddress (char* ifaceName, unsigned char* hwAddr);
+
+bool GetIpAddress(char* ifaceName,unsigned char *IpAddress);
+
+bool GetMaskAddress(char* ifaceName,unsigned char *MaskAddress);
+
+bool GetGateWay(char *pInterface,unsigned char *pGateWay);
+
+bool SetSock_reUse(int sockfd);
+
+bool SetSock_NoCheck(int sockfd);
+
+bool SetMutiCastLoop(int sockfd,int val);
+
+bool SetMutiCastTTl(int sockfd,int ttl);
+
+bool AddIpAddr_ToMultiCast(int sockfd,unsigned int ip,unsigned int multi_ip,int ttl);
+
+bool BindSockDevice(unsigned char*ifaceNmae,int sockfd);
+
+void DisplayInterfaceStatus(char* ifaceName);
+
+#endif/*__NET_CONFIG_H__*/
diff --git "a/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt" "b/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt"
new file mode 100644
index 0000000..99682e8
--- /dev/null
+++ "b/QiaoJiaSystem/DataManagerServer/web-server\346\216\245\345\217\243.txt"
@@ -0,0 +1,605 @@
+鏍囧噯杩斿洖鍊硷細
+{"ret_status": "鍐呭鏈夎锛岃妫�鏌ワ紒"}锛氬唴瀹归敊璇�
+{"ret_status": "浼犺緭閿欒锛岃妫�鏌ワ紒"}锛歫son鏍煎紡閿欒
+{"ret_status": "ok_ack"}锛氭搷浣滄垚鍔�
+
+
+
+
+璁惧缂栬緫 dev_edit
+涓嬪彂锛�
+{
+      "n_duration" : 2,
+      "n_port" : 8000,
+      "str_addr" : "鏈涗含sohoT3",
+      "str_brand" : "haikang",
+      "str_dev_name" : "鏈涗含soho娴峰悍纾佺洏闃靛垪1",
+      "str_ip" : "192.168.1.4",
+      "str_latitude" : "116.45755",
+      "str_longitude" : "39.994445",
+      "str_password" : "basic123",
+      "str_reserved" : "",
+      "str_storage_dev_id" : "DS-7808N-SN0820161208AARR691369356WCVU",
+      "str_username" : "admin",
+}
+杩斿洖锛�
+{
+   "str_storage_dev_id" : "DS-7808N-SN0820161208AARR691369356WCVU"
+}
+
+
+璁惧鏌ヨ dev_show
+涓嬪彂锛氭棤
+杩斿洖锛氬涓嬶細
+[
+   {
+      "n_duration" : 1,
+      "n_port" : 8080,
+      "str_addr" : "鏈涗含soho澶у帵",
+      "str_brand" : "haikang",
+      "str_dev_name" : "鏈涗含soho娴峰悍纾佺洏闃靛垪",
+      "str_ip" : "192.168.1.181",
+      "str_latitude" : "116.457092",
+      "str_longitude" : "39.994827",
+      "str_password" : "123456",
+      "str_reserved" : "",
+      "str_storage_dev_id" : "haikang:12:34:56:78:90:ab",
+      "str_username" : "admin",
+      "tim_start_time" : "2018-08-28 00:00:00"
+   },
+   {
+      "n_duration" : 2,
+      "n_port" : 8080,
+      "str_addr" : "鏈涗含soho澶у帵",
+      "str_brand" : "dahua",
+      "str_dev_name" : "鏈涗含soho澶ц瘽纾佺洏闃靛垪",
+      "str_ip" : "192.168.1.181",
+      "str_latitude" : "116.457092",
+      "str_longitude" : "39.994827",
+      "str_password" : "123456",
+      "str_reserved" : "",
+      "str_storage_dev_id" : "dahua:12:34:56:78:90:ab",
+      "str_username" : "admin",
+      "tim_start_time" : "2018-08-28 00:00:00"
+   },
+   {
+      "n_duration" : 3,
+      "n_port" : 8083,
+      "str_addr" : "鏈涗含soho澶у帵3",
+      "str_brand" : "dahua",
+      "str_dev_name" : "鏈涗含soho澶у崕纾佺洏闃靛垪",
+      "str_ip" : "192.168.1.183",
+      "str_latitude" : "116.457093",
+      "str_longitude" : "39.994823",
+      "str_password" : "123333",
+      "str_reserved" : "",
+      "str_storage_dev_id" : "dahua:11:22:33:44:55:ab",
+      "str_username" : "admin3",
+      "tim_start_time" : "2018-08-23 00:00:00"
+   }
+]
+
+//閫氶亾鎽勫儚鏈虹紪杈� devchn_edit
+涓嬪彂锛�
+{
+	"str_storage_dev_id": "dahua:11:22:33:44:55:ab",
+	"n_chn": 5,
+	"str_name": "澶у崕纾佺洏闃靛垪閫氶亾5",
+	"str_addr": "鏈涗含soho澶у帵濉�3琛╞搴�2005",
+	"str_latitude": "116.457095",
+	"str_longitude": "39.994825",
+	"str_sdks": "1,2,4",
+	"str_det_thr": "90,80,95",
+	"str_cmp_thr": "80,85,95",
+	"str_reserved": ""
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//閫氶亾鎽勫儚鏈烘煡璇� devchn_show
+涓嬪彂锛�
+{
+	"str_storage_dev_id": "DS-7808N-SN0820161208AARR691369356WCVU"
+}
+杩斿洖锛�
+[
+   {
+      "n_chn" : 5,
+      "str_addr" : "鏈涗含soho澶у帵濉�3琛╞搴�2005",
+      "str_cmp_thr" : "80,85,96",
+      "str_det_thr" : "90,80,94",
+      "str_latitude" : "116.457095",
+      "str_longitude" : "39.994825",
+      "str_name" : "澶у崕纾佺洏闃靛垪閫氶亾4",
+      "str_reserved" : "",
+      "str_sdks" : "1,2,4"
+   },
+   {
+      "n_chn" : 4,
+      "str_addr" : "鏈涗含soho澶у帵濉�3琛╞搴�2004",
+      "str_cmp_thr" : "80,85,94",
+      "str_det_thr" : "90,80,94",
+      "str_latitude" : "116.457094",
+      "str_longitude" : "39.994824",
+      "str_name" : "澶у崕纾佺洏闃靛垪閫氶亾4",
+      "str_reserved" : "",
+      "str_sdks" : "1,2,4"
+   }
+]
+
+
+//妫�绱㈢鐩橀樀鍒楃殑鎵�鏈夐�氶亾 dev_search_chns
+涓嬪彂锛�
+{
+	"str_storage_dev_id": "dahua:11:22:33:44:55:ab"
+}
+杩斿洖锛�
+{
+	"devchn_list" : "1,2,3,4"
+}
+
+
+//娴嬭瘯纾佺洏闃靛垪閫氶亾杩炴帴鎯呭喌 chk_chn_connet
+涓嬪彂锛�
+{
+	"str_storage_dev_id": "dahua:11:22:33:44:55:ab",
+	"n_chn" : 1
+}
+杩斿洖锛�
+{
+	"connect_status" : "True",
+	"video_url" : "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.mp4"
+}
+
+
+//鎽勫儚鏈虹紪杈� cam_edit
+涓嬪彂锛�
+{
+	"str_cam_dev_id": "dahua:ca:me:ra:11:22:33",
+	"str_name": "澶у崕鎽勫儚鏈�1",
+	"str_addr": "鏈涗含soho澶у帵濉�3 b搴�2005",
+	"str_latitude": "116.457092",
+	"str_longitude": "39.994827",
+	"str_ip" : "192.168.1.181",
+	"n_port" : 8080,
+	"str_username" : "admin",
+	"str_password" : "123456",
+	"str_brand" : "dahua",
+	"str_sdks": "1,2,4",
+	"str_det_thr": "90,80,95",
+	"str_cmp_thr": "80,85,90",
+	"str_reserved": ""
+}
+杩斿洖锛�
+{
+	"str_cam_dev_id" : "dahua:ca:me:ra:11:22:33"
+}
+
+
+//鎽勫儚鏈烘煡璇� cam_show
+涓嬪彂锛�
+杩斿洖锛�
+[
+   {
+      "str_addr" : "鏈涗含soho澶у帵濉�3 b搴�2005",
+      "str_brand" : "dahua",
+      "str_cam_dev_id" : "dahua:ca:me:ra:22:22:22",
+      "str_cmp_thr" : "80,92",
+      "str_det_thr" : "90,92",
+      "str_ip" : 8080,
+      "str_latitude" : "116.457092",
+      "str_longitude" : "39.994827",
+      "str_name" : "澶у崕鎽勫儚鏈�2",
+      "str_password" : "123456",
+      "str_reserved" : "",
+      "str_sdks" : "1,2",
+      "str_username" : "admin"
+   },
+   {
+      "str_addr" : "鏈涗含soho澶у帵濉�3 b搴�33",
+      "str_brand" : "dahua",
+      "str_cam_dev_id" : "dahua:ca:me:ra:33:33:33",
+      "str_cmp_thr" : "80,85,93",
+      "str_det_thr" : "90,80,93",
+      "str_ip" : 8080,
+      "str_latitude" : "116.457033",
+      "str_longitude" : "39.994833",
+      "str_name" : "澶у崕鎽勫儚鏈�3",
+      "str_password" : "123433",
+      "str_reserved" : "",
+      "str_sdks" : "1,2,3",
+      "str_username" : "admin"
+   }
+]
+
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�,寮�鍚繛鎺� chk_cam_connet
+涓嬪彂锛�
+{
+	"str_brand" : "haikang",
+	"str_ip" : "192.168.1.215",
+	"n_port" : 554,
+	"str_username" : "admin",
+	"str_password" : "a1234567"
+}
+杩斿洖锛�
+{
+   "connect_status" : "True",
+   "video_url" : "rtmp://localhost:1934/live/cam554"
+}
+
+//娴嬭瘯鎽勫儚鏈鸿繛鎺�,鏂紑杩炴帴 chk_cam_disconnet
+涓嬪彂锛�
+{
+	"str_ip" : "192.168.1.215"
+}
+杩斿洖锛�
+鏍囧噯杩斿洖鍊�
+
+//鍒犻櫎纾佺洏闃靛垪锛屽強瀵瑰簲鎵�鏈夐�氶亾锛屽強閫氶亾瀵瑰簲sdk dev_del
+涓嬪彂锛�
+{
+	"str_storage_dev_id": "dahua:11:22:33:44:55:ab"
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//鍒犻櫎鎽勫儚鏈哄強瀵瑰簲sdk cam_del
+涓嬪彂锛�
+{
+	"str_cam_dev_id": "dahua:ca:me:ra:11:22:33"
+}
+杩斿洖锛�
+
+
+//绯荤粺绠$悊淇℃伅鏌ヨ server_info_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+   "alarm_ip" : "192.168.1.321",
+   "alarm_port" : 111,
+   "es_pic_ip" : "192.168.1.223",
+   "es_pic_port" : 333,
+   "web_pic_ip" : "192.168.1.312",
+   "web_pic_port" : 222
+}
+
+//绯荤粺绠$悊淇℃伅璁剧疆 server_info_edit
+涓嬪彂锛�
+{
+	"alarm_ip": "192.168.1.111",
+	"alarm_port": 111,
+	"web_pic_ip": "192.168.1.222",
+	"web_pic_port": 222,
+	"es_pic_ip": "192.168.1.233",
+	"es_pic_port": 333
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+
+//瑙嗛鏃堕暱鏌ヨ cut_dura_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+   "cut_max_duration" : 4
+}
+
+//瑙嗛鏃堕暱璁剧疆 cut_dura_edit
+涓嬪彂锛�
+{
+	"cut_max_duration" : 3
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//璁剧疆鏈満缃戠粶閰嶇疆 netconfig_edit
+涓嬪彂锛�
+{
+	"ipaddr" : "192.168.1.113",
+	"netmask" : "255.255.255.0",
+	"gateway" : "192.168.1.1"
+}
+杩斿洖锛氭爣鍑嗚繑鍥炲��
+
+//鏌ョ湅鏈満缃戠粶閰嶇疆 netconfig_show
+涓嬪彂锛氭棤
+杩斿洖锛�
+{
+	"ipaddr" : "192.168.1.113",
+	"netmask" : "255.255.255.0",
+	"gateway" : "192.168.1.1"
+}
+
+鏌ヨ鑺傜偣 searchNode
+涓嬪彂锛� 鏃�
+杩斿洖锛�
+{
+	"cluster_id": "a",
+	"cluster_name": "b",
+	"list":[
+            {
+         		"uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+         		"node_id": "sub1@192.168.1.186",
+         		"create_time":"time",
+         		"dev_id":"",
+         		"dev_name":"",
+         		"node_ip":""
+         	},
+         	{
+         		"uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+         		"node_id": "sub1@192.168.1.186",
+         		"create":"time",
+         		"dev_id":"",
+         		"dev_name":"",
+         		"node_ip":""
+         	},
+         	{
+         		"uuid": "317026e2-6df8-5bac-aea4-166d2ee250fb",
+         		"node_id": "sub1@192.168.1.186",
+         		"create":"time",
+         		"dev_id":"",
+         		"dev_name":"",
+         		"node_ip":""
+         	}
+         ]
+}
+
+淇敼闆嗙兢鍚嶇О modifyCluName
+涓嬪彂锛�
+{
+    "cluster_id": "a",
+    "cluster_name": "b"
+}
+杩斿洖锛�
+{
+    "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+娣诲姞鑺傜偣 addNode
+涓嬪彂锛�
+{
+	"cookie": "abc",                        //闆嗙兢cookie
+	"fatherNodeName": "main@192.168.1.186", //寮曞鑺傜偣鍚嶇О,娣诲姞寮曞鑺傜偣鏃惰鍊间负" "(鍐呬负绌烘牸)
+	"culID" : "uuid",                       //闆嗙兢id
+	"culName" : "name",                     //闆嗙兢鍚嶇О
+	"devID" : "uuid"                        //璁惧id
+}
+杩斿洖锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+#TODO
+鍒犻櫎鑺傜偣 removeNode
+涓嬪彂锛�
+{
+}
+杩斿洖锛�
+{
+	"error": ["erlang is null"]
+}
+
+鍒涘缓搴曞簱 createDatabase
+涓嬪彂锛�
+{
+	"TableType": "person",              //琛ㄧ被鍨媝erson/car
+	"TableName": "test",                //琛ㄥ悕
+	"SyncType": "1",                    //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+	"BwType": "1",                      //榛戠櫧鍚嶅崟1榛戝悕鍗�/0鐧藉悕鍗�
+	"StartTime": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+	"EndTime": "2018-12-31 01:02:00"    //缁撴潫鏃堕棿
+}
+杩斿洖锛�
+{
+    "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+
+鏇存柊搴曞簱 updateDatabase
+涓嬪彂锛�
+{
+    "uuid":"",                          //琛╱uid
+	"TableType": "person",              //琛ㄧ被鍨媝erson/car
+	"TableName": "test",                //琛ㄥ悕
+	"SyncType": "1",                    //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+	"BwType": "1",                      //榛戠櫧鍚嶅崟1榛戝悕鍗�/0鐧藉悕鍗�
+	"StartTime": "2018-01-01 01:02:00", //寮�濮嬫椂闂�
+	"EndTime": "2018-12-31 01:02:00"    //缁撴潫鏃堕棿
+}
+杩斿洖锛�
+{
+    "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+鍒犻櫎搴曞簱 deleteDatabase
+涓嬪彂锛�
+{
+    "uuid":"",              //琛╱uid
+	"TableType": "car",     //琛ㄧ被鍨媝erson/car
+	"TableName": "test2",   //琛ㄥ悕
+	"SyncType": "1"         //鍚屾绫诲瀷1鍚屾/0鏈湴搴�
+}
+杩斿洖锛�
+{
+    "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+#鍒犻櫎淇敼琛ㄦ椂,琛ㄥ悕涓嶅姞 lt_;闇�瑕佷紶SyncType 瀛楁
+
+# 鍒犻櫎淇敼娣诲姞鏌ヨ搴曞簱浜哄憳鏁版嵁鏃�,闇�瑕佸簳搴撳悕绉板姞  lt_
+
+
+鏌ユ壘鍚屾搴曞簱 findAllDatabase
+涓嬪彂锛�
+杩斿洖锛�
+[{
+	"uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //琛╱uid
+	"tableName": "test",                            //琛ㄥ悕
+	"tableType": "person",                          //琛ㄧ被鍨�
+	"bwType": "1",                                  //榛戠櫧鍚嶅崟绫诲瀷
+	"start_time": "2018-01-01 01:02:00",            //寮�濮嬫椂闂�
+	"end_time": "2018-12-31 01:02:00"               //缁撴潫鏃堕棿
+}]
+閿欒锛�
+{
+	"error": "erlang is null"
+}
+
+鏌ユ壘鍚屾搴曞簱 findLocalDatabase
+涓嬪彂锛氭棤
+杩斿洖锛�
+[{
+	"uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //琛╱uid
+	"tableName": "test",                            //琛ㄥ悕
+	"tableType": "person",                          //琛ㄧ被鍨�
+	"bwType": "1",                                  //榛戠櫧鍚嶅崟绫诲瀷
+	"start_time": "2018-01-01 01:02:00",            //寮�濮嬫椂闂�
+	"end_time": "2018-12-31 01:02:00"               //缁撴潫鏃堕棿
+}]
+閿欒锛�
+{
+	"error": "erlang is null"
+}
+
+#d
+
+鍔犺浇搴曞簱鏁版嵁 loadFaceFeaData
+涓嬪彂锛�
+{
+    "TableName":"test"  //琛ㄥ悕
+}
+杩斿洖锛�
+[{
+		"uuid": "00b429d6-3746-57b9-8123-0dbf134731d2",         //UUID
+		"tableName": "test",                                    //琛ㄥ悕
+		"idcard": "123456789012345678",                         //韬唤璇佸彿
+		"imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCAbYeQAB86k1llhSw841.jpg"
+	},
+	{
+		"uuid": "0148cb5c-2232-5b02-9a00-f1f9a6b71de7",
+		"tableName": "test",
+		"idcard": "123456789012345678",
+		"imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.jpg"
+	},
+	{
+		"uuid": "01f20455-32bf-5c6e-b7b8-dea1395049a0",
+		"tableName": "test",
+		"idcard": "123456789012345678",
+		"imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOct-Aaz39ACP45aaRJUY002.jpg"
+	}
+]
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+
+娣诲姞鎴栬�呮洿鏂颁汉鍛� addPerson
+涓嬪彂锛�
+{
+	"uuid": "",             //娣诲姞浜哄憳鏃惰涓虹┖""
+	"TableName": "test",    //琛ㄥ悕
+	"img_url ": "http: //192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg",
+	"idcard : 123456789012345678",  //韬唤璇乮d
+	"img_base64 ": ""               //鍥剧墖base64
+}
+杩斿洖锛�
+{
+	"uuid": "82ee3b83-da2c-5d18-8cfa-f15e3ec4c9d4",
+	"img_url": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg"
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+
+娣诲姞鎴栬�呮洿鏂颁汉鍛� delPerson
+涓嬪彂锛�
+{
+	"uuid": "",
+	"TableName": "test"    //琛ㄥ悕
+}
+杩斿洖锛�
+{
+    "results": "1" //0澶辫触1鎴愬姛
+}
+閿欒锛�
+{
+	"error": ["erlang is null"||"err_json"]
+}
+
+鑾峰彇鎶ヨ澶у浘 getAlarmImageFromVideoFile
+涓嬪彂锛�
+{
+	"videoNum": "",                     //camId
+	"picDate": "2018-01-01 00:00:00"    //鏃堕棿
+}
+杩斿洖锛�
+{
+    "img_url": "http://192.168.1.185/group1/M00/00/7E/wKgBuVu8pAiALzfPAAPo1cKj6Hc363.jpg"
+}
+閿欒锛�
+{
+	"error": ["err_json"||""Not found Time"||"Time format error"||"Time error"||"Video File error"]
+}
+
+
+鑾峰彇瑙嗛璺緞 getRecordVideoPath
+涓嬪彂锛�
+{
+        "videoNum": "",                     //camId
+	"picDate": "2018-01-01 00:00:00"    //鏃堕棿
+}
+杩斿洖锛�
+{
+    "file_path": "/home/basic/work_src/test_Rec/1/20181109_11:04:46:509.mp4"
+}
+閿欒锛�
+鏍囧噯杩斿洖鍊�
+
+鑾峰彇璁惧id findDevId
+涓嬪彂锛氭棤
+杩斿洖
+{
+	"dev_id":"1",
+	"dev_name":"sss"
+}
+閿欒锛�
+鏍囧噯杩斿洖鍊�
+
+淇敼璁惧鍚� editDevName
+涓嬪彂锛歿"dev_name":"sss"}
+杩斿洖锛�
+{
+	"ret_status": "ok_ack"
+}
+閿欒:
+鏍囧噯杩斿洖鍊�
+
+淇敼璁惧id editDevId
+涓嬪彂锛�
+{
+ "dev_batch":6,  //鎵规
+ "dev_sequence":6//搴忓垪鍙�	
+}
+杩斿洖锛�
+{
+    "ret_status": "ok_ack"
+}
+閿欒:
+鏍囧噯杩斿洖鍊�
+
diff --git a/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt b/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt
new file mode 100644
index 0000000..1160b13
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/CMakeLists.txt
@@ -0,0 +1,75 @@
+cmake_minimum_required(VERSION 3.5)
+project(FaceDetectServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+    glog
+    jsoncpp
+    Ice
+    crypto
+    pthread
+    opencv_world
+    Qt5Core
+    THFaceImage
+    THFeature
+    THFaceProperty
+    )
+include_directories(
+    ./rpc
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/wrapper/casia/include
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+    /usr/include/x86_64-linux-gnu/qt5
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/openssl/lib/
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu
+)
+
+add_executable(${PROJECT_NAME}
+    main_detect.cpp
+    FaceDetectServerI.cpp
+    rpc/FaceServer.cpp
+    )
+add_executable(FaceDetectResourcesTest
+    FaceDetectResourcesTest.cpp
+    )
+
+add_executable(FaceExtractServer
+    main_extract.cpp
+    FaceExtractServerI.cpp
+    rpc/FaceServer.cpp
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+target_link_libraries(FaceExtractServer
+    ${LIBS}
+    )
+
+target_link_libraries(FaceDetectResourcesTest
+    glog
+    pthread
+    )
+
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp b/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp
new file mode 100644
index 0000000..76bf27b
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectResourcesTest.cpp
@@ -0,0 +1,38 @@
+#include "basic/util/resource/ResourcesManager.h"
+#include <string>
+#include <iostream>
+#include <unistd.h>
+#include <thread>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+    ENABLEGLOG("./log/");
+    ResourcesManager<int> resource(10000);
+    for (int i = 0; i < 10; i++) {
+        resource.pushResource(i);
+    }
+    std::thread thd1([&] {
+        int i = 6;
+        while (1) {
+            cout << i << ":" << resource.getAvilableChannel(to_string(i)) << endl;
+            usleep(2000000);
+            i++;
+            if (i > 13) i = 0;
+        }
+
+    });
+    std::thread thd2([&] {
+        int i = 0;
+        while (1) {
+            cout << i << ":" << resource.getAvilableChannel(to_string(i)) << endl;
+            usleep(100000);
+            i++;
+            if (i > 6)i = 0;
+        }
+
+    });
+    getchar();
+    return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp
new file mode 100644
index 0000000..7e2236d
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.cpp
@@ -0,0 +1,91 @@
+#include "FaceDetectServerI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+#include <THFaceImage_i.h>
+#include <THFaceProperty_i.h>
+
+FaceDetectServerI::FaceDetectServerI() {
+    long threadMax = appPref.getLongData("thread.max");
+    long gpuIndex = appPref.getLongData("gpu.index");
+    for (int i = 0; i < threadMax; i++) {
+        detectResourcesManager.pushResource(i);
+    }
+    for (int i = 0; i < threadMax; i++) {
+        propertyResourcesManager.pushResource(i);
+    }
+    if (gpuIndex < 0) {
+        THFI_Param *param = new THFI_Param[threadMax];
+        THFI_Create(threadMax, param);
+        delete[] param;
+    } else {
+        THFI_Param_Ex *param = new THFI_Param_Ex[threadMax];
+        THFI_Param detParam;
+        detParam.nMinFaceSize = 20;
+        detParam.nRollAngle = 60;
+        for (int i = 0; i < threadMax; i++) {
+            param[i].tp = detParam;
+            param[i].nDeviceID = gpuIndex;
+        }
+        THFI_Create_Ex(threadMax, param);
+        delete[] param;
+    }
+    THFP_Create(threadMax);
+}
+
+FaceDetectServerI::~FaceDetectServerI() {
+    THFI_Release();
+    THFP_Release();
+}
+
+FaceDetect::Faces FaceDetectServerI::faceDetect(Ice::Int width, Ice::Int height, const std::string &shareMemoryName,
+                                                const Ice::Current &) {
+    ClockTimer ct("FaceDetectServerI::faceDetect");
+    FaceDetect::Faces faces;
+    QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+    if (shareMemory.attach()) {
+        auto data = shareMemory.constData();
+        THFI_FacePos facesPos[30];
+        int channel = detectResourcesManager.getAvilableChannel(shareMemoryName);
+        int faceNum = THFI_DetectFace(channel, (BYTE *) data, 24, width, height, facesPos, 30);
+        if (faceNum > 0) {
+            for (int i = 0; i < faceNum; i++) {
+                FaceDetect::FacePos face;
+                auto &pos = facesPos[i];
+                memcpy(&face, &pos, sizeof(pos) - sizeof(pos.pFacialData));
+                face.pFacialData.resize(sizeof(pos.pFacialData));
+                memcpy(face.pFacialData.data(), pos.pFacialData, sizeof(pos.pFacialData));
+//                DBG(face.fAngle.confidence);
+                faces.push_back(face);
+            }
+        } else {
+            DBG("Face num is 0");
+        }
+    } else {
+        ERR("shareMemory error  " << shareMemoryName);
+    }
+    return faces;
+}
+
+FaceDetect::ThftResult FaceDetectServerI::faceProperty(Ice::Int width, Ice::Int height, const FaceDetect::FacePos &pos,
+                                                       const std::string &shareMemoryName, const Ice::Current &) {
+    QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+    if (shareMemory.attach()) {
+        FaceDetect::ThftResult thftResult;
+        THFP_Result_V2 propertys;
+        auto data = shareMemory.constData();
+        THFI_FacePos facesPos;
+        int channel = propertyResourcesManager.getAvilableChannel(shareMemoryName);
+        memcpy(&facesPos, &pos, sizeof(facesPos) - sizeof(facesPos.pFacialData));
+        memcpy(facesPos.pFacialData, pos.pFacialData.data(), sizeof(facesPos.pFacialData));
+        int ret = THFP_Execute_V2(channel, (BYTE *) data, width, height, &facesPos, &propertys);
+        if (ret == 0)memcpy(&thftResult, &propertys, sizeof(propertys));
+        else {
+            ERR("THFP_Execute_V2 faild, returns " << ret)
+        }
+        return thftResult;
+    } else {
+        throw std::runtime_error("shareMemory attach faild");
+    }
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h
new file mode 100644
index 0000000..dfb93d3
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h
@@ -0,0 +1,27 @@
+#ifndef FACEDETECTSERVERI_H
+#define FACEDETECTSERVERI_H
+#include <FaceServer.h>
+#include <basic/util/resource/ResourcesManager.h>
+#include <list>
+class FaceDetectServerI : public FaceDetect::FaceDetectServer
+{
+public:
+    FaceDetectServerI();
+    ~FaceDetectServerI();
+    // FaceDetectServer interface
+public:
+    virtual FaceDetect::Faces faceDetect(Ice::Int, Ice::Int, const std::string &, const Ice::Current &) override;
+
+private:
+    ResourcesManager<int> detectResourcesManager;
+    ResourcesManager<int> propertyResourcesManager;
+
+
+    // FaceDetectServer interface
+public:
+    virtual FaceDetect::ThftResult faceProperty(Ice::Int, Ice::Int, const FaceDetect::FacePos &, const std::string &, const Ice::Current &) override;
+};
+
+
+
+#endif // FACEDETECTSERVERI_H
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp
new file mode 100644
index 0000000..1b83824
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.cpp
@@ -0,0 +1,52 @@
+#include "FaceExtractServerI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+#include <THFeature_i.h>
+
+FaceExtractServerI::FaceExtractServerI() {
+    long threadMax = appPref.getLongData("thread.max");
+    long gpuIndex = appPref.getLongData("gpu.index");
+    for (int i = 0; i < threadMax; i++) {
+        extractResourcesManager.pushResource(i);
+    }
+    if (gpuIndex < 0) {
+        CHKERR(EF_Init(threadMax), threadMax, "EF_Init returns ");
+    } else {
+        EF_Param *param = new EF_Param[threadMax];
+        for (int i = 0; i < threadMax; i++) {
+            param[i].nDeviceID = gpuIndex;
+        }
+
+        CHKERR(EF_Init_Ex(threadMax, param), threadMax, "EF_Init returns ");
+        delete[] param;
+    }
+}
+
+FaceExtractServerI::~FaceExtractServerI() {
+    EF_Release();
+}
+
+FaceDetect::Data FaceExtractServerI::faceExtract(Ice::Int width, Ice::Int height, const FaceDetect::FacePos &pos,
+                                                 const std::string &shareMemoryName, const Ice::Current &) {
+    ClockTimer ct("FaceExtractServerI::faceExtract");
+    QSharedMemory shareMemory(QString(shareMemoryName.c_str()));
+    FaceDetect::Data feature;
+    if (shareMemory.attach()) {
+        auto data = shareMemory.constData();
+        THFI_FacePos facesPos;
+        int channel = extractResourcesManager.getAvilableChannel(shareMemoryName);
+        memcpy(&facesPos, &pos, sizeof(facesPos) - sizeof(facesPos.pFacialData));
+        memcpy(facesPos.pFacialData, pos.pFacialData.data(), sizeof(facesPos.pFacialData));
+        feature.resize(EF_Size());
+        int ret = EF_Extract(channel, (BYTE *) data, width, height, 3, &facesPos, feature.data());
+        if (ret != 1) {
+            ERR("THFP_Execute_V2 faild, returns " << ret)
+        }
+        return feature;
+    } else {
+        throw std::runtime_error("shareMemory attach faild");
+    }
+
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h
new file mode 100644
index 0000000..4b29294
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/FaceExtractServerI.h
@@ -0,0 +1,21 @@
+#ifndef FACEEXTRACTSERVERI_H
+#define FACEEXTRACTSERVERI_H
+
+#include <FaceServer.h>
+#include <basic/util/resource/ResourcesManager.h>
+class FaceExtractServerI : public FaceDetect::FaceExtractServer
+{
+public:
+    FaceExtractServerI();
+    ~FaceExtractServerI();
+
+    // FaceExtractServer interface
+public:
+    virtual FaceDetect::Data faceExtract(Ice::Int, Ice::Int, const FaceDetect::FacePos &, const std::string &, const Ice::Current &) override;
+
+    ResourcesManager<int> extractResourcesManager;
+};
+
+
+
+#endif // FACEEXTRACTSERVERI_H
diff --git a/QiaoJiaSystem/FaceDetectServer/main.cpp b/QiaoJiaSystem/FaceDetectServer/main.cpp
new file mode 100644
index 0000000..2529adc
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main.cpp
@@ -0,0 +1,40 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceDetectServerI.h"
+int main(int argc,char** argv) {
+#ifdef DEBUG
+    argc = 2;
+    const char* home = argv[0];
+    const char* iceCfg = "--Ice.Config=./node/servers/FaceDetectServer/config/config";
+    argv = new char*[2];
+    argv[0] = (char*)home;
+    argv[1] = (char*)iceCfg;
+#endif
+
+    SAVE_APP_ARGS;
+    auto ich = Ice::initialize(argc,argv);
+
+#ifdef DEBUG
+    std::string identity("FaceDetectServer");
+    std::string gpuIndex("0");
+    std::string adapterName("FaceDetectServerAdapter");
+    int threadMax = 10;
+#else
+    std::string identity =ich->getProperties()->getProperty("user.face.identity");
+    std::string gpuIndex =ich->getProperties()->getProperty("user.gpu.index");
+    std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+    int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+    ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax",to_string(threadMax));
+    appPref.setLongData("gpu.index",atol(gpuIndex.c_str()));
+    appPref.setLongData("thread.max", threadMax);
+
+    auto adapter =  ich->createObjectAdapter(adapterName);
+    adapter->add(new FaceDetectServerI(), Ice::stringToIdentity(identity));
+    adapter->activate();
+    ich->waitForShutdown();
+
+    return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/main_detect.cpp b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp
new file mode 100644
index 0000000..dabd089
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp
@@ -0,0 +1,59 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceDetectServerI.h"
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppConfig.h>
+
+int main1(int argc, char **argv) {
+#ifdef DEBUG
+    argc = 2;
+    const char* home = argv[0];
+    const char* iceCfg = "--Ice.Config=./node/servers/FaceDetectServer/config/config";
+    argv = new char*[2];
+    argv[0] = (char*)home;
+    argv[1] = (char*)iceCfg;
+#endif
+
+    SAVE_APP_ARGS;
+    auto ich = Ice::initialize(argc, argv);
+
+#ifdef DEBUG
+    std::string identity("FaceDetectServer");
+    std::string gpuIndex("0");
+    std::string adapterName("FaceDetectServerAdapter");
+    int threadMax = 10;
+#else
+    std::string identity = ich->getProperties()->getProperty("user.face.identity");
+    std::string gpuIndex = ich->getProperties()->getProperty("user.gpu.index");
+    std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+    int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+    ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax", std::to_string(threadMax));
+    appPref.setLongData("gpu.index", atol(gpuIndex.c_str()));
+    appPref.setLongData("thread.max", threadMax);
+
+    auto adapter = ich->createObjectAdapter(adapterName);
+    adapter->add(new FaceDetectServerI(), Ice::stringToIdentity(identity));
+    adapter->activate();
+    ich->waitForShutdown();
+
+    return 0;
+}
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+    auto ich = Ice::initialize(argc, argv);
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setLongData("thread.max", 32);
+
+    IceRpcServer<FaceDetectServerI> server("faceServer", 10002, "tcp");
+    server.setMessageSizeMax(1024 * 1024 * 50);
+    server.setPoolInitSize(10);
+    server.setPoolMaxSize(32);
+    server.runWaitShutDown();
+    return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/main_extract.cpp b/QiaoJiaSystem/FaceDetectServer/main_extract.cpp
new file mode 100644
index 0000000..a71d8f5
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/main_extract.cpp
@@ -0,0 +1,60 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+#include "FaceExtractServerI.h"
+#include <basic/debug/Debug.h>
+
+int main1(int argc, char **argv) {
+#ifdef DEBUG
+    argc = 2;
+    const char* home = argv[0];
+    const char* iceCfg = "--Ice.Config=./node/servers/FaceExtractServer/config/config";
+    argv = new char*[2];
+    argv[0] = (char*)home;
+    argv[1] = (char*)iceCfg;
+#endif
+
+    SAVE_APP_ARGS;
+    auto ich = Ice::initialize(argc, argv);
+
+#ifdef DEBUG
+    std::string identity("FaceExtractServer");
+    std::string gpuIndex("0");
+    std::string adapterName("FaceExtractServerAdapter");
+    int threadMax = 10;
+#else
+    std::string identity = ich->getProperties()->getProperty("user.face.identity");
+    std::string gpuIndex = ich->getProperties()->getProperty("user.gpu.index");
+    std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+    int threadMax = atol(ich->getProperties()->getProperty("user.thread.max").c_str());
+#endif
+    ich->getProperties()->setProperty("Ice.ThreadPool.Server.SizeMax", std::to_string(threadMax));
+    appPref.setLongData("gpu.index", atol(gpuIndex.c_str()));
+    appPref.setLongData("thread.max", threadMax);
+
+    auto adapter = ich->createObjectAdapter(adapterName);
+    adapter->add(new FaceExtractServerI(), Ice::stringToIdentity(identity));
+    adapter->activate();
+    ich->waitForShutdown();
+
+    return 0;
+}
+
+int main(int argc, char **argv) {
+
+    SAVE_APP_ARGS;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+    auto ich = Ice::initialize(argc, argv);
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setLongData("thread.max", 32);
+
+    IceRpcServer<FaceExtractServerI> server("faceExtractServer", 10008, "tcp");
+    server.setMessageSizeMax(1024 * 1024 * 50);
+    server.setPoolInitSize(10);
+    server.setPoolMaxSize(32);
+    server.runWaitShutDown();
+    return 0;
+}
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp
new file mode 100644
index 0000000..df47a6d
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.cpp
@@ -0,0 +1,861 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <FaceServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+#   pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+#   pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_ids[2] =
+{
+    "::FaceDetect::FaceDetectServer",
+    "::Ice::Object"
+};
+const ::std::string iceC_FaceDetect_FaceDetectServer_ops[] =
+{
+    "faceDetect",
+    "faceProperty",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceDetect_name = "faceDetect";
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceProperty_name = "faceProperty";
+
+const ::std::string iceC_FaceDetect_FaceExtractServer_ids[2] =
+{
+    "::FaceDetect::FaceExtractServer",
+    "::Ice::Object"
+};
+const ::std::string iceC_FaceDetect_FaceExtractServer_ops[] =
+{
+    "faceExtract",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+const ::std::string iceC_FaceDetect_FaceExtractServer_faceExtract_name = "faceExtract";
+
+}
+
+bool
+FaceDetect::FaceDetectServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceDetect_FaceDetectServer_ids, iceC_FaceDetect_FaceDetectServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceDetect::FaceDetectServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_FaceDetect_FaceDetectServer_ids[0], &iceC_FaceDetect_FaceDetectServer_ids[2]);
+}
+
+::std::string
+FaceDetect::FaceDetectServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_staticId()
+{
+    static const ::std::string typeId = "::FaceDetect::FaceDetectServer";
+    return typeId;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_width;
+    int iceP_height;
+    ::std::string iceP_shareMemory;
+    istr->readAll(iceP_width, iceP_height, iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::Faces ret = this->faceDetect(iceP_width, iceP_height, ::std::move(iceP_shareMemory), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceProperty(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_width;
+    int iceP_height;
+    ::FaceDetect::FacePos iceP_pos;
+    ::std::string iceP_shareMemory;
+    istr->readAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::ThftResult ret = this->faceProperty(iceP_width, iceP_height, ::std::move(iceP_pos), ::std::move(iceP_shareMemory), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceDetectServer_ops, iceC_FaceDetect_FaceDetectServer_ops + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceDetect_FaceDetectServer_ops)
+    {
+        case 0:
+        {
+            return _iceD_faceDetect(in, current);
+        }
+        case 1:
+        {
+            return _iceD_faceProperty(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+bool
+FaceDetect::FaceExtractServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceDetect_FaceExtractServer_ids, iceC_FaceDetect_FaceExtractServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceDetect::FaceExtractServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_FaceDetect_FaceExtractServer_ids[0], &iceC_FaceDetect_FaceExtractServer_ids[2]);
+}
+
+::std::string
+FaceDetect::FaceExtractServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_staticId()
+{
+    static const ::std::string typeId = "::FaceDetect::FaceExtractServer";
+    return typeId;
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceD_faceExtract(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_width;
+    int iceP_height;
+    ::FaceDetect::FacePos iceP_pos;
+    ::std::string iceP_shareMemory;
+    istr->readAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::Data ret = this->faceExtract(iceP_width, iceP_height, ::std::move(iceP_pos), ::std::move(iceP_shareMemory), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceExtractServer_ops, iceC_FaceDetect_FaceExtractServer_ops + 5, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceDetect_FaceExtractServer_ops)
+    {
+        case 0:
+        {
+            return _iceD_faceExtract(in, current);
+        }
+        case 1:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+FaceDetect::FaceDetectServerPrx::_iceI_faceDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Faces>>& outAsync, int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+    outAsync->invoke(iceC_FaceDetect_FaceDetectServer_faceDetect_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_width, iceP_height, iceP_shareMemory);
+        },
+        nullptr);
+}
+
+void
+FaceDetect::FaceDetectServerPrx::_iceI_faceProperty(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::ThftResult>>& outAsync, int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+    outAsync->invoke(iceC_FaceDetect_FaceDetectServer_faceProperty_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceDetect::FaceDetectServerPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<FaceDetectServerPrx>();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServerPrx::ice_staticId()
+{
+    return FaceDetect::FaceDetectServer::ice_staticId();
+}
+
+void
+FaceDetect::FaceExtractServerPrx::_iceI_faceExtract(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Data>>& outAsync, int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+    outAsync->invoke(iceC_FaceDetect_FaceExtractServer_faceExtract_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_width, iceP_height, iceP_pos, iceP_shareMemory);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceDetect::FaceExtractServerPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<FaceExtractServerPrx>();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServerPrx::ice_staticId()
+{
+    return FaceDetect::FaceExtractServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceDetect_name = "faceDetect";
+
+const ::std::string iceC_FaceDetect_FaceDetectServer_faceProperty_name = "faceProperty";
+
+const ::std::string iceC_FaceDetect_FaceExtractServer_faceExtract_name = "faceExtract";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceDetect::upCast(::IceProxy::FaceDetect::FaceDetectServer* p) { return p; }
+
+void
+::IceProxy::FaceDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::FaceDetect::FaceDetectServer;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceDetectServer::_iceI_begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceDetect_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceDetectServer_faceDetect_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_FaceDetect_FaceDetectServer_faceDetect_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_width);
+        ostr->write(iceP_height);
+        ostr->write(iceP_shareMemory);
+        result->endWriteParams();
+        result->invoke(iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::FaceDetect::Faces
+IceProxy::FaceDetect::FaceDetectServer::end_faceDetect(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceDetectServer_faceDetect_name);
+    ::FaceDetect::Faces ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceDetectServer::_iceI_begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceDetectServer_faceProperty_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceDetectServer_faceProperty_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_FaceDetect_FaceDetectServer_faceProperty_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_width);
+        ostr->write(iceP_height);
+        ostr->write(iceP_pos);
+        ostr->write(iceP_shareMemory);
+        result->endWriteParams();
+        result->invoke(iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::FaceDetect::ThftResult
+IceProxy::FaceDetect::FaceDetectServer::end_faceProperty(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceDetectServer_faceProperty_name);
+    ::FaceDetect::ThftResult ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceDetect::FaceDetectServer::_newInstance() const
+{
+    return new FaceDetectServer;
+}
+
+const ::std::string&
+IceProxy::FaceDetect::FaceDetectServer::ice_staticId()
+{
+    return ::FaceDetect::FaceDetectServer::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceDetect::upCast(::IceProxy::FaceDetect::FaceExtractServer* p) { return p; }
+
+void
+::IceProxy::FaceDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::FaceDetect::FaceExtractServer;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceDetect::FaceExtractServer::_iceI_begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_FaceDetect_FaceExtractServer_faceExtract_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceDetect_FaceExtractServer_faceExtract_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_FaceDetect_FaceExtractServer_faceExtract_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_width);
+        ostr->write(iceP_height);
+        ostr->write(iceP_pos);
+        ostr->write(iceP_shareMemory);
+        result->endWriteParams();
+        result->invoke(iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::FaceDetect::Data
+IceProxy::FaceDetect::FaceExtractServer::end_faceExtract(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_FaceDetect_FaceExtractServer_faceExtract_name);
+    ::FaceDetect::Data ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceDetect::FaceExtractServer::_newInstance() const
+{
+    return new FaceExtractServer;
+}
+
+const ::std::string&
+IceProxy::FaceDetect::FaceExtractServer::ice_staticId()
+{
+    return ::FaceDetect::FaceExtractServer::ice_staticId();
+}
+
+FaceDetect::FaceDetectServer::~FaceDetectServer()
+{
+}
+
+::Ice::Object* FaceDetect::upCast(::FaceDetect::FaceDetectServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceDetectServer_ids[2] =
+{
+    "::FaceDetect::FaceDetectServer",
+    "::Ice::Object"
+};
+
+}
+
+bool
+FaceDetect::FaceDetectServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceDetect_FaceDetectServer_ids, iceC_FaceDetect_FaceDetectServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceDetect::FaceDetectServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_FaceDetect_FaceDetectServer_ids[0], &iceC_FaceDetect_FaceDetectServer_ids[2]);
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceDetectServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::FaceDetect::FaceDetectServer";
+    return typeId;
+#else
+    return iceC_FaceDetect_FaceDetectServer_ids[0];
+#endif
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_width;
+    ::Ice::Int iceP_height;
+    ::std::string iceP_shareMemory;
+    istr->read(iceP_width);
+    istr->read(iceP_height);
+    istr->read(iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::Faces ret = this->faceDetect(iceP_width, iceP_height, iceP_shareMemory, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceD_faceProperty(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_width;
+    ::Ice::Int iceP_height;
+    ::FaceDetect::FacePos iceP_pos;
+    ::std::string iceP_shareMemory;
+    istr->read(iceP_width);
+    istr->read(iceP_height);
+    istr->read(iceP_pos);
+    istr->read(iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::ThftResult ret = this->faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceDetectServer_all[] =
+{
+    "faceDetect",
+    "faceProperty",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+
+}
+
+bool
+FaceDetect::FaceDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceDetectServer_all, iceC_FaceDetect_FaceDetectServer_all + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceDetect_FaceDetectServer_all)
+    {
+        case 0:
+        {
+            return _iceD_faceDetect(in, current);
+        }
+        case 1:
+        {
+            return _iceD_faceProperty(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+FaceDetect::FaceDetectServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::FaceDetect::FaceDetectServer, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+FaceDetect::FaceDetectServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::FaceDetect::FaceDetectServer, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+FaceDetect::_icePatchObjectPtr(FaceDetectServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::FaceDetect::FaceDetectServerPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::FaceDetect::FaceDetectServer::ice_staticId(), v);
+    }
+}
+
+FaceDetect::FaceExtractServer::~FaceExtractServer()
+{
+}
+
+::Ice::Object* FaceDetect::upCast(::FaceDetect::FaceExtractServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceExtractServer_ids[2] =
+{
+    "::FaceDetect::FaceExtractServer",
+    "::Ice::Object"
+};
+
+}
+
+bool
+FaceDetect::FaceExtractServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceDetect_FaceExtractServer_ids, iceC_FaceDetect_FaceExtractServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceDetect::FaceExtractServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_FaceDetect_FaceExtractServer_ids[0], &iceC_FaceDetect_FaceExtractServer_ids[2]);
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceDetect::FaceExtractServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::FaceDetect::FaceExtractServer";
+    return typeId;
+#else
+    return iceC_FaceDetect_FaceExtractServer_ids[0];
+#endif
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceD_faceExtract(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_width;
+    ::Ice::Int iceP_height;
+    ::FaceDetect::FacePos iceP_pos;
+    ::std::string iceP_shareMemory;
+    istr->read(iceP_width);
+    istr->read(iceP_height);
+    istr->read(iceP_pos);
+    istr->read(iceP_shareMemory);
+    inS.endReadParams();
+    ::FaceDetect::Data ret = this->faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceDetect_FaceExtractServer_all[] =
+{
+    "faceExtract",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+
+}
+
+bool
+FaceDetect::FaceExtractServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceDetect_FaceExtractServer_all, iceC_FaceDetect_FaceExtractServer_all + 5, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceDetect_FaceExtractServer_all)
+    {
+        case 0:
+        {
+            return _iceD_faceExtract(in, current);
+        }
+        case 1:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+FaceDetect::FaceExtractServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::FaceDetect::FaceExtractServer, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+FaceDetect::FaceExtractServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::FaceDetect::FaceExtractServer, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+FaceDetect::_icePatchObjectPtr(FaceExtractServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::FaceDetect::FaceExtractServerPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::FaceDetect::FaceExtractServer::ice_staticId(), v);
+    }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h
new file mode 100644
index 0000000..b0752ee
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.h
@@ -0,0 +1,1459 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __FaceServer_h__
+#define __FaceServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+class FaceDetectServerPrx;
+class FaceExtractServer;
+class FaceExtractServerPrx;
+
+}
+
+namespace FaceDetect
+{
+
+struct POINT
+{
+    int x;
+    int y;
+
+    std::tuple<const int&, const int&> ice_tuple() const
+    {
+        return std::tie(x, y);
+    }
+};
+
+struct RECT
+{
+    int left;
+    int top;
+    int right;
+    int bottom;
+
+    std::tuple<const int&, const int&, const int&, const int&> ice_tuple() const
+    {
+        return std::tie(left, top, right, bottom);
+    }
+};
+
+struct FaceAngle
+{
+    int yaw;
+    int pitch;
+    int roll;
+    float confidence;
+
+    std::tuple<const int&, const int&, const int&, const float&> ice_tuple() const
+    {
+        return std::tie(yaw, pitch, roll, confidence);
+    }
+};
+
+struct ThftResult
+{
+    int gender;
+    int age;
+    int race;
+    int beauty_level;
+    int smile_level;
+
+    std::tuple<const int&, const int&, const int&, const int&, const int&> ice_tuple() const
+    {
+        return std::tie(gender, age, race, beauty_level, smile_level);
+    }
+};
+
+using Data = ::std::vector<::Ice::Byte>;
+
+struct FacePos
+{
+    ::FaceDetect::RECT rcFace;
+    ::FaceDetect::POINT ptLeftEye;
+    ::FaceDetect::POINT ptRightEye;
+    ::FaceDetect::POINT ptMouth;
+    ::FaceDetect::POINT ptNose;
+    ::FaceDetect::FaceAngle fAngle;
+    int nQuality;
+    ::FaceDetect::Data pFacialData;
+
+    std::tuple<const ::FaceDetect::RECT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::POINT&, const ::FaceDetect::FaceAngle&, const int&, const ::FaceDetect::Data&> ice_tuple() const
+    {
+        return std::tie(rcFace, ptLeftEye, ptRightEye, ptMouth, ptNose, fAngle, nQuality, pFacialData);
+    }
+};
+
+using Faces = ::std::vector<::FaceDetect::FacePos>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = FaceDetectServerPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceDetect::Faces faceDetect(int, int, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_faceDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::FaceDetect::ThftResult faceProperty(int, int, ::FaceDetect::FacePos, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_faceProperty(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class FaceExtractServer : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = FaceExtractServerPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceDetect::Data faceExtract(int, int, ::FaceDetect::FacePos, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_faceExtract(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServerPrx : public virtual ::Ice::Proxy<FaceDetectServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::FaceDetect::Faces faceDetect(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::FaceDetect::Faces>(true, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto faceDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::FaceDetect::Faces>>().get_future())
+    {
+        return _makePromiseOutgoing<::FaceDetect::Faces, P>(false, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+    }
+
+    ::std::function<void()>
+    faceDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory,
+                    ::std::function<void(::FaceDetect::Faces)> response,
+                    ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                    ::std::function<void(bool)> sent = nullptr,
+                    const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::FaceDetect::Faces>(response, ex, sent, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+    }
+
+    void _iceI_faceDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Faces>>&, int, int, const ::std::string&, const ::Ice::Context&);
+
+    ::FaceDetect::ThftResult faceProperty(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::FaceDetect::ThftResult>(true, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto facePropertyAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::FaceDetect::ThftResult>>().get_future())
+    {
+        return _makePromiseOutgoing<::FaceDetect::ThftResult, P>(false, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+    }
+
+    ::std::function<void()>
+    facePropertyAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory,
+                      ::std::function<void(::FaceDetect::ThftResult)> response,
+                      ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                      ::std::function<void(bool)> sent = nullptr,
+                      const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::FaceDetect::ThftResult>(response, ex, sent, this, &FaceDetect::FaceDetectServerPrx::_iceI_faceProperty, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+    }
+
+    void _iceI_faceProperty(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::ThftResult>>&, int, int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    FaceDetectServerPrx() = default;
+    friend ::std::shared_ptr<FaceDetectServerPrx> IceInternal::createProxy<FaceDetectServerPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class FaceExtractServerPrx : public virtual ::Ice::Proxy<FaceExtractServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::FaceDetect::Data faceExtract(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::FaceDetect::Data>(true, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto faceExtractAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::FaceDetect::Data>>().get_future())
+    {
+        return _makePromiseOutgoing<::FaceDetect::Data, P>(false, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+    }
+
+    ::std::function<void()>
+    faceExtractAsync(int iceP_width, int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory,
+                     ::std::function<void(::FaceDetect::Data)> response,
+                     ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                     ::std::function<void(bool)> sent = nullptr,
+                     const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::FaceDetect::Data>(response, ex, sent, this, &FaceDetect::FaceExtractServerPrx::_iceI_faceExtract, iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context);
+    }
+
+    void _iceI_faceExtract(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceDetect::Data>>&, int, int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    FaceExtractServerPrx() = default;
+    friend ::std::shared_ptr<FaceExtractServerPrx> IceInternal::createProxy<FaceExtractServerPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::FaceDetect::POINT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 8;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::POINT, S>
+{
+    static void read(S* istr, ::FaceDetect::POINT& v)
+    {
+        istr->readAll(v.x, v.y);
+    }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::RECT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::RECT, S>
+{
+    static void read(S* istr, ::FaceDetect::RECT& v)
+    {
+        istr->readAll(v.left, v.top, v.right, v.bottom);
+    }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::FaceAngle>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::FaceAngle, S>
+{
+    static void read(S* istr, ::FaceDetect::FaceAngle& v)
+    {
+        istr->readAll(v.yaw, v.pitch, v.roll, v.confidence);
+    }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::ThftResult>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 20;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::ThftResult, S>
+{
+    static void read(S* istr, ::FaceDetect::ThftResult& v)
+    {
+        istr->readAll(v.gender, v.age, v.race, v.beauty_level, v.smile_level);
+    }
+};
+
+template<>
+struct StreamableTraits<::FaceDetect::FacePos>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 69;
+    static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamReader<::FaceDetect::FacePos, S>
+{
+    static void read(S* istr, ::FaceDetect::FacePos& v)
+    {
+        istr->readAll(v.rcFace, v.ptLeftEye, v.ptRightEye, v.ptMouth, v.ptNose, v.fAngle, v.nQuality, v.pFacialData);
+    }
+};
+
+}
+
+namespace FaceDetect
+{
+
+using FaceDetectServerPtr = ::std::shared_ptr<FaceDetectServer>;
+using FaceDetectServerPrxPtr = ::std::shared_ptr<FaceDetectServerPrx>;
+
+using FaceExtractServerPtr = ::std::shared_ptr<FaceExtractServer>;
+using FaceExtractServerPrxPtr = ::std::shared_ptr<FaceExtractServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceDetect::FaceDetectServer*);
+
+class FaceExtractServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceDetect::FaceExtractServer*);
+
+}
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer;
+::Ice::Object* upCast(::FaceDetect::FaceDetectServer*);
+typedef ::IceInternal::Handle< ::FaceDetect::FaceDetectServer> FaceDetectServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceDetectServer> FaceDetectServerPrx;
+typedef FaceDetectServerPrx FaceDetectServerPrxPtr;
+void _icePatchObjectPtr(FaceDetectServerPtr&, const ::Ice::ObjectPtr&);
+
+class FaceExtractServer;
+::Ice::Object* upCast(::FaceDetect::FaceExtractServer*);
+typedef ::IceInternal::Handle< ::FaceDetect::FaceExtractServer> FaceExtractServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceDetect::FaceExtractServer> FaceExtractServerPrx;
+typedef FaceExtractServerPrx FaceExtractServerPrxPtr;
+void _icePatchObjectPtr(FaceExtractServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace FaceDetect
+{
+
+struct POINT
+{
+    ::Ice::Int x;
+    ::Ice::Int y;
+
+    bool operator==(const POINT& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return true;
+        }
+        if(x != rhs_.x)
+        {
+            return false;
+        }
+        if(y != rhs_.y)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    bool operator<(const POINT& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return false;
+        }
+        if(x < rhs_.x)
+        {
+            return true;
+        }
+        else if(rhs_.x < x)
+        {
+            return false;
+        }
+        if(y < rhs_.y)
+        {
+            return true;
+        }
+        else if(rhs_.y < y)
+        {
+            return false;
+        }
+        return false;
+    }
+
+    bool operator!=(const POINT& rhs_) const
+    {
+        return !operator==(rhs_);
+    }
+    bool operator<=(const POINT& rhs_) const
+    {
+        return operator<(rhs_) || operator==(rhs_);
+    }
+    bool operator>(const POINT& rhs_) const
+    {
+        return !operator<(rhs_) && !operator==(rhs_);
+    }
+    bool operator>=(const POINT& rhs_) const
+    {
+        return !operator<(rhs_);
+    }
+};
+
+struct RECT
+{
+    ::Ice::Int left;
+    ::Ice::Int top;
+    ::Ice::Int right;
+    ::Ice::Int bottom;
+
+    bool operator==(const RECT& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return true;
+        }
+        if(left != rhs_.left)
+        {
+            return false;
+        }
+        if(top != rhs_.top)
+        {
+            return false;
+        }
+        if(right != rhs_.right)
+        {
+            return false;
+        }
+        if(bottom != rhs_.bottom)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    bool operator<(const RECT& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return false;
+        }
+        if(left < rhs_.left)
+        {
+            return true;
+        }
+        else if(rhs_.left < left)
+        {
+            return false;
+        }
+        if(top < rhs_.top)
+        {
+            return true;
+        }
+        else if(rhs_.top < top)
+        {
+            return false;
+        }
+        if(right < rhs_.right)
+        {
+            return true;
+        }
+        else if(rhs_.right < right)
+        {
+            return false;
+        }
+        if(bottom < rhs_.bottom)
+        {
+            return true;
+        }
+        else if(rhs_.bottom < bottom)
+        {
+            return false;
+        }
+        return false;
+    }
+
+    bool operator!=(const RECT& rhs_) const
+    {
+        return !operator==(rhs_);
+    }
+    bool operator<=(const RECT& rhs_) const
+    {
+        return operator<(rhs_) || operator==(rhs_);
+    }
+    bool operator>(const RECT& rhs_) const
+    {
+        return !operator<(rhs_) && !operator==(rhs_);
+    }
+    bool operator>=(const RECT& rhs_) const
+    {
+        return !operator<(rhs_);
+    }
+};
+
+struct FaceAngle
+{
+    ::Ice::Int yaw;
+    ::Ice::Int pitch;
+    ::Ice::Int roll;
+    ::Ice::Float confidence;
+};
+
+struct ThftResult
+{
+    ::Ice::Int gender;
+    ::Ice::Int age;
+    ::Ice::Int race;
+    ::Ice::Int beauty_level;
+    ::Ice::Int smile_level;
+
+    bool operator==(const ThftResult& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return true;
+        }
+        if(gender != rhs_.gender)
+        {
+            return false;
+        }
+        if(age != rhs_.age)
+        {
+            return false;
+        }
+        if(race != rhs_.race)
+        {
+            return false;
+        }
+        if(beauty_level != rhs_.beauty_level)
+        {
+            return false;
+        }
+        if(smile_level != rhs_.smile_level)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    bool operator<(const ThftResult& rhs_) const
+    {
+        if(this == &rhs_)
+        {
+            return false;
+        }
+        if(gender < rhs_.gender)
+        {
+            return true;
+        }
+        else if(rhs_.gender < gender)
+        {
+            return false;
+        }
+        if(age < rhs_.age)
+        {
+            return true;
+        }
+        else if(rhs_.age < age)
+        {
+            return false;
+        }
+        if(race < rhs_.race)
+        {
+            return true;
+        }
+        else if(rhs_.race < race)
+        {
+            return false;
+        }
+        if(beauty_level < rhs_.beauty_level)
+        {
+            return true;
+        }
+        else if(rhs_.beauty_level < beauty_level)
+        {
+            return false;
+        }
+        if(smile_level < rhs_.smile_level)
+        {
+            return true;
+        }
+        else if(rhs_.smile_level < smile_level)
+        {
+            return false;
+        }
+        return false;
+    }
+
+    bool operator!=(const ThftResult& rhs_) const
+    {
+        return !operator==(rhs_);
+    }
+    bool operator<=(const ThftResult& rhs_) const
+    {
+        return operator<(rhs_) || operator==(rhs_);
+    }
+    bool operator>(const ThftResult& rhs_) const
+    {
+        return !operator<(rhs_) && !operator==(rhs_);
+    }
+    bool operator>=(const ThftResult& rhs_) const
+    {
+        return !operator<(rhs_);
+    }
+};
+
+typedef ::std::vector< ::Ice::Byte> Data;
+
+struct FacePos
+{
+    ::FaceDetect::RECT rcFace;
+    ::FaceDetect::POINT ptLeftEye;
+    ::FaceDetect::POINT ptRightEye;
+    ::FaceDetect::POINT ptMouth;
+    ::FaceDetect::POINT ptNose;
+    ::FaceDetect::FaceAngle fAngle;
+    ::Ice::Int nQuality;
+    ::FaceDetect::Data pFacialData;
+};
+
+typedef ::std::vector< ::FaceDetect::FacePos> Faces;
+
+}
+
+namespace FaceDetect
+{
+
+class Callback_FaceDetectServer_faceDetect_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceDetectServer_faceDetect_Base> Callback_FaceDetectServer_faceDetectPtr;
+
+class Callback_FaceDetectServer_faceProperty_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceDetectServer_faceProperty_Base> Callback_FaceDetectServer_facePropertyPtr;
+
+class Callback_FaceExtractServer_faceExtract_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceExtractServer_faceExtract_Base> Callback_FaceExtractServer_faceExtractPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Proxy<FaceDetectServer, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::FaceDetect::Faces faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_faceDetect(_iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceDetectServer_faceDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceDetectServer_faceDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::FaceDetect::Faces end_faceDetect(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_faceDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::FaceDetect::ThftResult faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_faceProperty(_iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceDetectServer_facePropertyPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceProperty(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceDetectServer_facePropertyPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceProperty(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::FaceDetect::ThftResult end_faceProperty(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_faceProperty(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class FaceExtractServer : public virtual ::Ice::Proxy<FaceExtractServer, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::FaceDetect::Data faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_faceExtract(_iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::FaceDetect::Callback_FaceExtractServer_faceExtractPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceExtract(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::FaceDetect::FacePos& iceP_pos, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::FaceDetect::Callback_FaceExtractServer_faceExtractPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceExtract(iceP_width, iceP_height, iceP_pos, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::FaceDetect::Data end_faceExtract(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_faceExtract(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace FaceDetect
+{
+
+class FaceDetectServer : public virtual ::Ice::Object
+{
+public:
+
+    typedef FaceDetectServerPrx ProxyType;
+    typedef FaceDetectServerPtr PointerType;
+
+    virtual ~FaceDetectServer();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceDetect::Faces faceDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_faceDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::FaceDetect::ThftResult faceProperty(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_faceProperty(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceDetectServer& lhs, const FaceDetectServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceDetectServer& lhs, const FaceDetectServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class FaceExtractServer : public virtual ::Ice::Object
+{
+public:
+
+    typedef FaceExtractServerPrx ProxyType;
+    typedef FaceExtractServerPtr PointerType;
+
+    virtual ~FaceExtractServer();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceDetect::Data faceExtract(::Ice::Int, ::Ice::Int, const ::FaceDetect::FacePos&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_faceExtract(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceExtractServer& lhs, const FaceExtractServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceExtractServer& lhs, const FaceExtractServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::FaceDetect::POINT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 8;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::POINT, S>
+{
+    static void write(S* ostr, const ::FaceDetect::POINT& v)
+    {
+        ostr->write(v.x);
+        ostr->write(v.y);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::POINT, S>
+{
+    static void read(S* istr, ::FaceDetect::POINT& v)
+    {
+        istr->read(v.x);
+        istr->read(v.y);
+    }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::RECT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::RECT, S>
+{
+    static void write(S* ostr, const ::FaceDetect::RECT& v)
+    {
+        ostr->write(v.left);
+        ostr->write(v.top);
+        ostr->write(v.right);
+        ostr->write(v.bottom);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::RECT, S>
+{
+    static void read(S* istr, ::FaceDetect::RECT& v)
+    {
+        istr->read(v.left);
+        istr->read(v.top);
+        istr->read(v.right);
+        istr->read(v.bottom);
+    }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::FaceAngle>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::FaceAngle, S>
+{
+    static void write(S* ostr, const ::FaceDetect::FaceAngle& v)
+    {
+        ostr->write(v.yaw);
+        ostr->write(v.pitch);
+        ostr->write(v.roll);
+        ostr->write(v.confidence);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::FaceAngle, S>
+{
+    static void read(S* istr, ::FaceDetect::FaceAngle& v)
+    {
+        istr->read(v.yaw);
+        istr->read(v.pitch);
+        istr->read(v.roll);
+        istr->read(v.confidence);
+    }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::ThftResult>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 20;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::ThftResult, S>
+{
+    static void write(S* ostr, const ::FaceDetect::ThftResult& v)
+    {
+        ostr->write(v.gender);
+        ostr->write(v.age);
+        ostr->write(v.race);
+        ostr->write(v.beauty_level);
+        ostr->write(v.smile_level);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::ThftResult, S>
+{
+    static void read(S* istr, ::FaceDetect::ThftResult& v)
+    {
+        istr->read(v.gender);
+        istr->read(v.age);
+        istr->read(v.race);
+        istr->read(v.beauty_level);
+        istr->read(v.smile_level);
+    }
+};
+
+template<>
+struct StreamableTraits< ::FaceDetect::FacePos>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 69;
+    static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceDetect::FacePos, S>
+{
+    static void write(S* ostr, const ::FaceDetect::FacePos& v)
+    {
+        ostr->write(v.rcFace);
+        ostr->write(v.ptLeftEye);
+        ostr->write(v.ptRightEye);
+        ostr->write(v.ptMouth);
+        ostr->write(v.ptNose);
+        ostr->write(v.fAngle);
+        ostr->write(v.nQuality);
+        ostr->write(v.pFacialData);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceDetect::FacePos, S>
+{
+    static void read(S* istr, ::FaceDetect::FacePos& v)
+    {
+        istr->read(v.rcFace);
+        istr->read(v.ptLeftEye);
+        istr->read(v.ptRightEye);
+        istr->read(v.ptMouth);
+        istr->read(v.ptNose);
+        istr->read(v.fAngle);
+        istr->read(v.nQuality);
+        istr->read(v.pFacialData);
+    }
+};
+
+}
+
+namespace FaceDetect
+{
+
+template<class T>
+class CallbackNC_FaceDetectServer_faceDetect : public Callback_FaceDetectServer_faceDetect_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::FaceDetect::Faces&);
+
+    CallbackNC_FaceDetectServer_faceDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::Faces ret;
+        try
+        {
+            ret = proxy->end_faceDetect(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Faces&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceDetectServer_faceDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(T* instance, void (T::*cb)(const ::FaceDetect::Faces&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceDetectServer_faceDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceDetectServer_faceDetect : public Callback_FaceDetectServer_faceDetect_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::FaceDetect::Faces&, const CT&);
+
+    Callback_FaceDetectServer_faceDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::Faces ret;
+        try
+        {
+            ret = proxy->end_faceDetect(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Faces&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceDetectServer_faceDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceDetectServer_faceDetectPtr
+newCallback_FaceDetectServer_faceDetect(T* instance, void (T::*cb)(const ::FaceDetect::Faces&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceDetectServer_faceDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceDetectServer_faceProperty : public Callback_FaceDetectServer_faceProperty_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::FaceDetect::ThftResult&);
+
+    CallbackNC_FaceDetectServer_faceProperty(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::ThftResult ret;
+        try
+        {
+            ret = proxy->end_faceProperty(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::ThftResult&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceDetectServer_faceProperty<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(T* instance, void (T::*cb)(const ::FaceDetect::ThftResult&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceDetectServer_faceProperty<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceDetectServer_faceProperty : public Callback_FaceDetectServer_faceProperty_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::FaceDetect::ThftResult&, const CT&);
+
+    Callback_FaceDetectServer_faceProperty(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceDetectServerPrx proxy = ::FaceDetect::FaceDetectServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::ThftResult ret;
+        try
+        {
+            ret = proxy->end_faceProperty(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::ThftResult&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceDetectServer_faceProperty<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceDetectServer_facePropertyPtr
+newCallback_FaceDetectServer_faceProperty(T* instance, void (T::*cb)(const ::FaceDetect::ThftResult&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceDetectServer_faceProperty<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceExtractServer_faceExtract : public Callback_FaceExtractServer_faceExtract_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::FaceDetect::Data&);
+
+    CallbackNC_FaceExtractServer_faceExtract(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceExtractServerPrx proxy = ::FaceDetect::FaceExtractServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::Data ret;
+        try
+        {
+            ret = proxy->end_faceExtract(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Data&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceExtractServer_faceExtract<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(T* instance, void (T::*cb)(const ::FaceDetect::Data&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceExtractServer_faceExtract<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceExtractServer_faceExtract : public Callback_FaceExtractServer_faceExtract_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::FaceDetect::Data&, const CT&);
+
+    Callback_FaceExtractServer_faceExtract(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceDetect::FaceExtractServerPrx proxy = ::FaceDetect::FaceExtractServerPrx::uncheckedCast(result->getProxy());
+        ::FaceDetect::Data ret;
+        try
+        {
+            ret = proxy->end_faceExtract(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceDetect::Data&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceExtractServer_faceExtract<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceExtractServer_faceExtractPtr
+newCallback_FaceExtractServer_faceExtract(T* instance, void (T::*cb)(const ::FaceDetect::Data&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceExtractServer_faceExtract<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice
new file mode 100644
index 0000000..0147bcf
--- /dev/null
+++ b/QiaoJiaSystem/FaceDetectServer/rpc/FaceServer.ice
@@ -0,0 +1,61 @@
+module FaceDetect
+{
+	struct POINT
+	{
+		int x;
+		int y;
+	}
+	
+	struct RECT
+	{
+		int left;
+		int top;
+		int right;
+		int bottom;
+	}
+	
+	struct FaceAngle
+	{
+		int   yaw;
+		int   pitch;
+		int   roll;
+		float confidence;
+	}
+	
+	struct ThftResult
+	{
+		int gender;//1-male,0-female
+		int age;//range[0-100]
+		int race; //[1-white,2-yellow,3-black]
+		int beauty_level;//range[0-100]
+		int smile_level;//range[0-100]
+	}
+
+	sequence<byte> Data;
+	
+	struct FacePos
+	{
+		RECT		rcFace;
+		POINT		ptLeftEye;
+		POINT		ptRightEye;
+		POINT		ptMouth;
+		POINT		ptNose;						
+		FaceAngle	fAngle;
+		int			nQuality;
+		Data   		pFacialData;
+	}
+	
+	sequence<FacePos> Faces;
+	
+	interface FaceDetectServer
+	{
+		Faces faceDetect(int width, int height, string shareMemory);
+		ThftResult faceProperty(int width, int height, FacePos pos, string shareMemory);
+	}
+	
+	interface FaceExtractServer
+	{
+		Data faceExtract(int width, int height, FacePos pos, string shareMemory);
+		Data faceExtract(Data jpgImage);
+	}
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
new file mode 100644
index 0000000..1fe1b9c
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
@@ -0,0 +1,198 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#ifndef COMPARETEST_COMPARESERVER_H
+#define COMPARETEST_COMPARESERVER_H
+
+#include <thread>
+#include <set>
+
+#include <basic/debug/Debug.h>
+#include <basic/util/thread/RWLock.hpp>
+#include <basic/util/thread/MultiThread.h>
+#include <basic/util/BASE64/Base64.h>
+
+struct AlarmData {
+    int num;
+    std::string tableName;
+    std::vector<unsigned char> feature;
+    float threshold;
+};
+
+struct FeatureData {
+    long face_id;
+    std::string uuid;
+    //feature
+    std::vector<std::vector<unsigned char>> features;
+    std::string faceUrl;
+    std::string idcard;
+};
+
+static std::vector<std::string> AlarmServerPropertyAnalyseByComma(std::string str_list) {
+    std::vector<std::string> result;
+    char *property_list = const_cast<char *>(str_list.c_str());
+    const char *c_Analyse = ",";
+    char *t_property;
+
+#ifdef linux
+    char *t_save = NULL;
+    t_property = strtok_r(property_list, c_Analyse, &t_save);
+#else
+    t_property = strtok(property_list,c_Analyse);
+#endif
+
+    while (t_property) {
+        std::string str_pro(t_property);
+        result.push_back(str_pro);
+#ifdef linux
+        t_property = strtok_r(t_save, c_Analyse, &t_save);
+#else
+        t_property = strtok(NULL,c_Analyse);
+#endif
+
+    }
+    return result;
+}
+
+#define ParalleFunc std::function<void(std::string&,FeatureData&)>
+enum ParallelForThreardSize {
+    CPU_Number = 1
+};
+
+class AlarmServer {
+
+public:
+    AlarmServer() : m_dbSet(false), m_dbReady(false) {
+
+    }
+
+    ~AlarmServer() {
+        for (auto item : dataMap) {
+            delete &(item.second);
+//            item.second = NULL;
+        }
+        dataMap.clear();
+        dataAddBuffer.clear();
+        dataRemoveBuffer.clear();
+    }
+
+    void initDB(std::string str_config) {
+        std::thread thd(loadDBCahce, this, str_config);
+        thd.detach();
+    }
+
+    void removeData(std::string key) {
+        std::lock_guard<std::mutex> guard(dataRemoveBufferMtx);
+        dataRemoveBuffer.insert(key);
+        dataRemoveBufferUpdated = true;
+    }
+
+    void addData(std::string key, FeatureData &value) {
+        std::lock_guard<std::mutex> guard(dataAddBufferMtx);
+        dataAddBuffer[key] = value;
+        dataAddBufferUpdated = true;
+    }
+
+    bool getDBReady() {
+        return m_dbReady;
+    }
+
+    //m_dbReady is false return,true go on
+    //use parallelFor
+    virtual bool compare(std::thread::id key, AlarmData *, int topN) = 0;
+
+private:
+    //init data,this is thread body
+    static void loadDBCahce(AlarmServer *compareServer, std::string str_config) {
+        std::lock_guard<std::mutex> guard(compareServer->dataRemoveBufferMtx);
+        std::lock_guard<std::mutex> guard2(compareServer->dataAddBufferMtx);
+        std::lock_guard<std::mutex> dataGuard(compareServer->dataMtx);
+
+        compareServer->dataRemoveBuffer.clear();
+        compareServer->dataAddBuffer.clear();
+
+        compareServer->m_rwLock.wrlock();
+        compareServer->loadDBData(str_config);
+        compareServer->m_dbReady = true;
+        compareServer->m_rwLock.unlock();
+        INFO("m_dbReady is true");
+    }
+
+    virtual void loadDBData(std::string tableName) = 0;
+
+    bool m_dbSet;
+    bool m_dbReady;
+
+    bool dataAddBufferUpdated;
+    bool dataRemoveBufferUpdated;
+    bool dateResetUpdated;
+
+    RWLock m_rwLock;
+
+    void updateDataRemove() {
+        if (dataRemoveBufferUpdated) {
+            std::lock_guard<std::mutex> dataRemoveGuard(dataRemoveBufferMtx);
+            std::lock_guard<std::mutex> dataGuard(dataMtx);
+            if (!dataRemoveBufferUpdated)return;
+            for (auto key: dataRemoveBuffer) {
+                this->dataMap.erase(key);
+            }
+            dataRemoveBuffer.clear();
+            dataRemoveBufferUpdated = false;
+        }
+    }
+
+    void updateDataAdd() {
+        if (dataAddBufferUpdated) {
+            std::lock_guard<std::mutex> dataRemoveGuard(dataAddBufferMtx);
+            std::lock_guard<std::mutex> dataGuard(dataMtx);
+            if (!dataAddBufferUpdated)return;
+            for (auto addData: dataAddBuffer) {
+                this->dataMap.insert(addData);
+            }
+            dataAddBuffer.clear();
+            dataAddBufferUpdated = false;
+        }
+    }
+
+protected:
+    Base64 base64;
+    //#todo value is vector not is struct
+    std::map<std::string, FeatureData> dataMap;
+    std::map<std::string, FeatureData> dataAddBuffer;
+    std::set<std::string> dataRemoveBuffer;
+    std::mutex dataMtx;
+    std::mutex dataAddBufferMtx;
+    std::mutex dataRemoveBufferMtx;
+    std::mutex dataRestMtx;
+
+    void parallelFor(int threads, ParalleFunc func) {
+        updateDataRemove();
+        updateDataAdd();
+//        std::lock_guard<std::mutex> dataGuard(dataMtx);
+        m_rwLock.rdlock();
+        MultiThread mthd(threads, [&func, this](int idx, int num) {
+            int size = dataMap.size();
+            int step = size / num;
+            if (step < 1) {
+                step = 1;
+                if (idx >= size)return;
+            }
+            auto iter = dataMap.begin();
+            for (int i = idx * step; i > 0; i--) {
+                iter++;
+            }
+            for (int i = 0; i < step && iter != dataMap.end(); iter++, i++) {
+                auto &data = iter->second;
+                std::string key = iter->first;
+                func(key, data);
+            }
+        });
+        mthd.join();
+        m_rwLock.unlock();
+    }
+};
+
+
+#endif //COMPARETEST_COMPARESERVER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
new file mode 100644
index 0000000..0528f16
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
@@ -0,0 +1,151 @@
+cmake_minimum_required(VERSION 3.5)
+project(FaceSearchServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+    glog
+    Ice
+    opencv_world
+    Qt5Core
+    Qt5Sql
+    THFaceImage
+    THFeature
+    THFaceProperty
+    ei
+    erl_interface_st
+    ei_st
+    erl_interface
+    curl
+    jsoncpp
+    uuid
+    sqlite3
+    rt
+    pthread
+    )
+include_directories(
+    ./rpc
+    ./CasiaFaceWrapper
+
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+    ../LocalDBTool
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/include
+    #    ../../BasicPlatForm/libs/erlang/erl_interface/include
+
+
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/libs/libuuid/include/
+    ../../BasicPlatForm/basic/util/curl/
+    ../../BasicPlatForm/basic/util/ShareMemory/
+    ../../BasicPlatForm/basic/db/Elasticsearch/
+    ../../BasicPlatForm/wrapper/casia/include
+    ../../BasicPlatForm/libs/libboost/include
+
+
+    ../../../Erlang/syncDBTool/
+
+    ../../BasicPlatForm/basic/db/sqlite/
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+    /usr/include/boost/
+)
+
+link_directories(
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/openssl/lib/
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/cpu
+    ../../BasicPlatForm/libs/crul/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+    #    ../../BasicPlatForm/libs/erlang/erl_interface/libs
+
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+    ../../BasicPlatForm/libs/libuuid/lib
+
+    /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+)
+
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    rpc/FaceSearchServer.cpp
+    FaceSearchServerResources.cpp
+    FaceFeatureSearchServerI.cpp
+    FaceFeatureSearchServerI.h
+    CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+    CasiaFaceWrapper/CasiaFaceWrapperN.h
+    CasiaFaceWrapper/FaceData.hpp
+    AlarmServer.hpp
+    FaceDBCompareServer.cpp
+    FaceDBCompareServer.h
+    ../../BasicPlatForm/basic/util/thread/MultiThread.cpp
+    ../../BasicPlatForm/basic/util/thread/MultiThread.h
+    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+    ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+    ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+    ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.h
+
+
+    ../LocalDBTool/SqliteFaceEncap.cpp
+    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+
+    #    ../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+
+    ../../../Erlang/syncDBTool/ErlangDbTool.cpp
+    #    ../../../Erlang/syncDBTool/ShareMemoryTool.hpp
+    #    ../../../Erlang/syncDBTool/SyncDB.hpp
+    )
+
+#add_executable(FaceSearchServerResourcesTest
+#    FaceSearchServerResourcesTest.cpp
+#    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+#target_link_libraries(FaceSearchServerResourcesTest
+#    pthread
+#    )
+add_executable(SearchFaceTest
+    Cleint.cpp
+    ./rpc/FaceSearchServer.cpp
+    ./CasiaFaceWrapper/CasiaFaceWrapperN.cpp
+    )
+target_link_libraries(SearchFaceTest
+    opencv_world
+    glog
+    curl
+    IceStorm
+    Ice
+    jsoncpp
+    uuid
+    THFaceImage
+    THFacialPos
+    THFaceProperty
+    THFeature
+    pthread
+    )
+
+add_subdirectory(LoadFeaTool)
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
new file mode 100644
index 0000000..9b9fe3a
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.cpp
@@ -0,0 +1,145 @@
+//
+// Created by pans on 4/27/18.
+//
+#include <iostream>
+#include <string>
+#include <basic/util/app/AppPreference.hpp>
+#include <atomic>
+
+#include "CasiaFaceWrapperN.h"
+
+using namespace std;
+
+std::atomic_int CasiaFaceWrapperN::instanceCount(0);
+
+CasiaFaceWrapperN::CasiaFaceWrapperN() {
+    threadMax = appPref.getLongData("thread.max");
+//    long gpuIndex = appPref.getLongData("gpu.index");
+//    for(int i = 0;i<threadMax;i++){
+//        resourcesManager.pushResource(i);
+//    }
+//    if(gpuIndex < 0){
+//        THFI_Param* param = new THFI_Param[threadMax];
+////        THFI_Create(threadMax, param);
+//        CHKERR(THFI_Create(threadMax, param), threadMax, "THFI_Create return");//old version ,default GPU device ID is 0
+//        CHKERR(EF_Init(threadMax), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+//        delete[] param;
+//    }else{
+//        THFI_Param_Ex* param = new THFI_Param_Ex[threadMax];
+//        THFI_Param detParam;
+//        EF_Param pParam[threadMax];
+//        detParam.nMinFaceSize = 20;
+//        detParam.nRollAngle = 60;
+//        for(int i = 0;i<threadMax;i++){
+//            param[i].tp = detParam;
+//            param[i].nDeviceID = gpuIndex;
+//            pParam[i].nDeviceID = gpuIndex;//GPU device ID,eg:0,1,2....
+//        }
+//        THFI_Create_Ex(threadMax, param);
+//        CHKERR(EF_Init_Ex(threadMax,pParam), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+////        EF_Init_Ex(gpuIndexs.size(),pParam);
+//        delete[] param;
+//    }
+//    THFP_Create(threadMax);
+
+    channel = instanceCount;
+    THFI_Param detParam;
+    detParam.nMinFaceSize = 50;
+    detParam.nRollAngle = 60;
+    if(instanceCount++ == 0){
+//        if(gpuIndexs.empty()){
+            CHKERR(THFI_Create(threadMax, &detParam), threadMax, "THFI_Create return");//old version ,default GPU device ID is 0
+            CHKERR(EF_Init(threadMax), threadMax, "EF_Create return");//old version ,default GPU device ID is 0
+//        }
+//        else{
+//            THFI_Param_Ex pParamx[gpuIndexs.size()];
+//            EF_Param pParam[gpuIndexs.size()];
+//            for(int i = 0; i<gpuIndexs.size(); i++){
+//                pParamx[i].tp=detParam;
+//                pParamx[i].nDeviceID=gpuIndexs[i];//GPU device ID,eg:0,1,2....
+//                pParam[i].nDeviceID=gpuIndexs[i];//GPU device ID,eg:0,1,2....
+//            }
+//            int ret=THFI_Create_Ex(gpuIndexs.size(), pParamx);
+//            if(ret !=gpuIndexs.size()){
+//                printf("THFI_Create failed!(ret=%d)\n",ret);
+//            }
+//            ret=EF_Init_Ex(gpuIndexs.size(),pParam);
+//            if(ret !=gpuIndexs.size()){
+//                printf("EF_Init_Ex failed!(ret=%d)\n",ret);
+//            }
+//        }
+    }else if(instanceCount> threadMax){
+        channel = -1;
+        ERR("too many channels instanced, channel "<<channel<<" instance faild.");
+    }
+
+}
+
+CasiaFaceWrapperN::~CasiaFaceWrapperN() {
+    //#todo
+    THFI_Release();
+    THFP_Release();
+}
+
+float CasiaFaceWrapperN::compareFeature(std::vector<unsigned char> &feature1, std::vector<unsigned char> &feature2) {
+    if(feature1.size()!= EF_Size()){
+        ERR("feature1 size is not incorrect");
+        return 0;
+    }else if(feature2.size()!= EF_Size()){
+        ERR("feature2 size is not incorrect");
+        return 0;
+    }
+    return EF_Compare(feature1.data(), feature2.data());
+}
+#define COPY(NAME) memcpy(&face.NAME, &pos.NAME, sizeof (pos.NAME));s
+Features CasiaFaceWrapperN::extractFace(FaceImageN img) {
+    Features results;
+    if(channel ==-1){
+        ERR("invalid face channel, face detect faild");
+        return results;
+    }
+    vector<unsigned char> feature;
+    THFI_FacePos facesPos[30];
+//    int channel;
+//    for(int loop = 0;loop < threadMax;loop++){
+//        channel = resourcesManager.getAvilableChannel(to_string(loop));
+//        if(channel > 0){
+//            cout << channel << endl;
+//            break;
+//        }
+//    }
+    int faceNum = THFI_DetectFace(channel, img.data,24, img.width, img.height, facesPos ,30);
+    if(faceNum>0){
+        if(feature.size()!= EF_Size()*faceNum){
+            feature.resize(EF_Size()*faceNum);
+        }
+        CHKERR(EF_Extract_M(channel, img.data, img.width, img.height, 3, facesPos, feature.data(), faceNum), 1, " return");
+        for(int i = 0; i< faceNum; i++){
+            FaceFeaWithScore result;
+            THFI_FacePos& face = facesPos[i];
+            result.left = face.rcFace.left;
+            result.top = face.rcFace.top;
+            result.width = face.rcFace.right - face.rcFace.left;
+            result.height = face.rcFace.bottom - face.rcFace.top;
+            result.score = face.fAngle.confidence;
+//            if(face.fAngle.confidence >= 0.6){
+                if((face.fAngle.pitch >-30 || face.fAngle.pitch <30 ) &&
+                   (face.fAngle.roll >-30 || face.fAngle.roll <30 ) &&
+                   (face.fAngle.yaw >-30 || face.fAngle.yaw <30 )){
+                    result.feature.resize(EF_Size());
+                    memcpy(result.feature.data(),feature.data()+i*EF_Size(),EF_Size());
+                    results.push_back(result);
+                }
+//            }
+        }
+    } else{
+        DBG("faceNum is < 0");
+    }
+    return results;
+}
+
+
+//#todo
+//Features CasiaFaceWrapperN::extractFace(FaceImageN &img, THFI_FacePos& facePos,int faceNum) {
+//    return Features();
+//}
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
new file mode 100644
index 0000000..87ed35e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/CasiaFaceWrapperN.h
@@ -0,0 +1,48 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#ifndef VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
+#define VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
+
+#include <THFaceImage_i.h>
+#include <THFaceProperty_i.h>
+#include <THFeature_i.h>
+
+#include <basic/util/resource/ResourcesManager.h>
+#include <libs/opencv/include/opencv2/core/mat.hpp>
+#include <atomic>
+
+#include "FaceData.hpp"
+
+class CasiaFaceWrapperN {
+public:
+    CasiaFaceWrapperN();
+
+    virtual ~CasiaFaceWrapperN();
+
+    float compareFeature(Feature &feature1,Feature &feature2);
+
+    //todo extractFace
+    Features extractFace(FaceImageN img);
+//    Features extractFace(FaceImageN &img, THFI_FacePos& facePos,int faceNum);
+
+    //todo detectFace
+
+public:
+
+private:
+
+private:
+    ResourcesManager<int> resourcesManager;
+    long threadMax;
+    int nGPUDeviceID=0;
+    short channel;
+    static std::atomic_int instanceCount;
+//    static std::vector<int> gpuIndexs;
+//    static int channelMax;
+
+};
+
+
+#endif //VIDEOSTRUCTURE_CASIAFACEWRAPPER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
new file mode 100644
index 0000000..926dafa
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
@@ -0,0 +1,135 @@
+//
+// Created by pans on 5/2/18.
+//
+
+#ifndef VIDEOSTRUCTURE_FACEDATA_HPP
+#define VIDEOSTRUCTURE_FACEDATA_HPP
+
+#include <vector>
+
+struct FaceImageN {
+    int width;
+    int height;
+    int stride;
+    unsigned char *data;
+};
+struct FaceFeaWithScore {
+    int left;
+    int top;
+    int width;
+    int height;
+    std::vector<unsigned char> feature;
+    float score;
+};
+
+typedef std::vector<FaceFeaWithScore> Features;
+
+struct FaceResult {
+    long id;
+    std::string uuid;
+    std::string tableName;
+    float confidence;
+    std::string face_img_url;
+    std::string idCard;
+    std::string alarmRet;
+};
+
+struct DbAction {
+    long id;
+    std::string tableName;
+    std::string face_img_url;   //#todo 浠ュ浘鎼滃浘澶氬簳搴撴暟鎹悓姝�
+    long actionNo; // 1 add; 2, remove
+};
+
+//        sequence<DbAction> DbActions;
+
+typedef std::vector<FaceResult> FaceResults;
+typedef std::map<float, FaceResult, std::greater<float>> mapFaceResults;
+
+
+namespace {
+
+
+    typedef std::vector<unsigned char> Feature;
+    typedef std::vector<unsigned char> Data;
+
+    struct POINT {
+        int x;
+        int y;
+    };
+
+    struct RECT {
+        int left;
+        int top;
+        int right;
+        int bottom;
+    };
+
+    struct FaceAngle {
+        int yaw;
+        int pitch;
+        int roll;
+        float confidence;
+    };
+
+    struct ThftResult {
+        int gender;//1-male,0-female
+        int age;//range[0-100]
+        int race; //[1-white,2-yellow,3-black]
+        int beauty_level;//range[0-100]
+        int smile_level;//range[0-100]
+    };
+
+    struct FacePos {
+        RECT rcFace;
+        POINT ptLeftEye;
+        POINT ptRightEye;
+        POINT ptMouth;
+        POINT ptNose;
+        FaceAngle fAngle;
+        int nQuality;
+        ThftResult property;
+        Data pFacialData;
+    };
+
+    typedef std::vector<FacePos> Faces;
+
+    long getTimeLong() {
+        time_t tt;
+        time(&tt);
+        tt = tt + 8 * 3600;  // transform the time zone
+        return tt;
+    }
+}
+
+namespace FaceToolData {
+    enum RectSize {
+        horizontal = 10,
+        vertical = 10
+    };
+
+    class CompareData {
+    public:
+        virtual ~CompareData() {}
+    };
+
+
+    class FeatureData : public CompareData {
+    public:
+        FeatureData(int size) : feature(size) {}
+
+        Feature feature;
+        int num;
+        float threshold;
+        std::string tableNameList;
+    };
+
+    struct CompareResult {
+        std::string id;
+        std::string face_img_url;
+        std::string table_Name;
+        float score;
+    };
+}
+
+#endif //VIDEOSTRUCTURE_FACEDATA_HPP
diff --git a/QiaoJiaSystem/FaceSearchServer/Cleint.cpp b/QiaoJiaSystem/FaceSearchServer/Cleint.cpp
new file mode 100644
index 0000000..7c6a16e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/Cleint.cpp
@@ -0,0 +1,438 @@
+//
+// Created by pans on 5/4/18.
+//
+
+//
+// Created by ps on 3/1/18.
+//
+
+
+#include <thread>
+#include "opencv2/opencv.hpp"
+#include "basic/util/BASE64/Base64.h"
+#include <basic/util/opencv/CvUtil.h>
+#include <dirent.h>
+#include <THFeature_i.h>
+#include <zconf.h>
+#include <Ice/Ice.h>
+#include <basic/util/app/AppUtil.h>
+#include <FaceData.hpp>
+#include <FaceSearchServer.h>
+#include <CasiaFaceWrapperN.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/rpc/IceRpc.hpp>
+#include <CurlDownloadImg.hpp>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+using namespace cv;
+using namespace std;
+
+Base64 base64;
+//void* test(void* arg){
+//#ifdef TestCode
+//    IceRpcClient<AlarmServerInterface::AlarmCompareServerPrx> client("FaceDBCompare", "", 10028, "tcp");
+//    auto server = client.getServer();
+//#else
+//#endif
+//
+//    std::map<int,std::vector<unsigned char>> db_handle;
+//    {
+//        LoginDB g_dbLogin;
+//        g_dbLogin.ip = "192.168.1.81";
+//        g_dbLogin.port = 8066;
+//        g_dbLogin.dbName = "VIDEO_STRUCTURE";
+//        g_dbLogin.userName = "root";
+//        g_dbLogin.pwd = "root";
+//        MYSQL conn;
+//        mysql_init(&conn);
+//        bool connectStatus = mysql_real_connect(&conn,g_dbLogin.ip.c_str(),g_dbLogin.userName.c_str()
+//                ,g_dbLogin.pwd.c_str(),g_dbLogin.dbName.c_str(),g_dbLogin.port,NULL,CLIENT_FOUND_ROWS);
+//        if(connectStatus)
+//        {
+//            //#todo modify sql
+//            string sql = "select drug_id,feature FROM o_t_p_drug_feature where 1=1 and feature is not NULL limit 500";
+//            {
+//                ClockTimer ct2("mysql_query");
+//                int ret=mysql_query(&conn,sql.data());
+//                if(ret == 0){
+//                    printf("OK\n");
+//                }else{
+//                    printf("error::%s\n",mysql_error(&conn));
+//                }
+//            }
+//
+//            //灏嗘煡璇㈠埌鐨勭粨鏋滈泦瀛樻斁鍦ㄤ复鏃跺彉閲忎腑
+//            MYSQL_RES *result = NULL;
+//            result = mysql_store_result( &conn );
+//
+//            //寰楀埌鏌ヨ鍑烘潵鎵�鏈夋暟鎹殑鏉℃暟
+//            int row_count = mysql_num_rows(result);
+//            if (row_count <= 0) {
+//                INFO("not found data!!!")
+//                return NULL;
+//            }
+//            //鏄剧ず琛ㄤ腑鐨勬墍鏈夋暟鎹�
+//            {
+//                ClockTimer ct2("mysql_fetch_row");
+//                int loop = 0;
+//
+//                MYSQL_ROW row = NULL;
+//                row = mysql_fetch_row( result );
+//                while ( NULL != row )
+//                {
+//                    string ft = row[1];
+//                    string str2;
+//                    int a = ft.length();
+//                    str2 = base64.Decode(ft.data(),ft.length());
+//
+//                    FaceFeature tmp;
+//                    tmp.resize(str2.length());
+//                    memset(tmp.data(), 0,str2.length());
+//                    memcpy(tmp.data(),str2.data(),str2.length());
+//                    int b = tmp.size();
+//                    db_handle[atoi(row[0])] = tmp;
+//                    tmp.clear();
+//                    row = mysql_fetch_row( result );
+//                }
+//
+//                mysql_free_result(result);
+//            }
+//
+//        }else{
+//            printf("connectStatus error\n");
+//        }
+//
+//        {
+//            ClockTimer ct3("close");
+//            mysql_close(&conn);
+//        }
+//    }
+//
+//    ::AlarmServerInterface::AlarmInformation t_alarmData;
+//
+//    t_alarmData.carmera_id = "1";
+//    t_alarmData.create_time = "2018-03-25 18:07:53";
+//    t_alarmData.alarm_url = "vvvvvadsfasd";
+//    t_alarmData.resoure_id = "vvvvvadsfasd";
+//    t_alarmData.flag_eq_pf = "aaa";
+//    int loop = 0;
+//    while(true){
+//        for(auto item : db_handle){
+//            if(loop++ > 20 ){
+//                break;
+//            }
+//            t_alarmData.faceFeature = item.second;
+//            int c = t_alarmData.faceFeature.size();
+//            INFO("sumbitData"<<item.first);
+//            server->sumbitData(t_alarmData);
+//            sleep(1);
+//        }
+////        while(loop <= 20)
+////        {
+////            ::AlarmServerInterface::AlarmRule iceP_alarmRule;
+////            ::AlarmServerInterface::PersonAlarmRule m;
+////            iceP_alarmRule.fllow_id = to_string(loop++);
+////            iceP_alarmRule.tableName = "o_t_p_fllow22";
+////            iceP_alarmRule.rule_Type = "0";
+////            server->addRules(iceP_alarmRule);
+////        }
+//        loop=0;
+//    }
+//}
+//
+
+CvUtil cvutil;
+
+int main(int argc, char *argv[]) {
+    SAVE_APP_ARGS
+
+    ENABLEGLOG("./log/");
+    Ice::CommunicatorHolder ich(argc, argv);
+
+//    Ice::ObjectPrx base = ich->stringToProxy("FaceSearchServer");
+    IceRpcClient<FaceSearch::FaceFeatureSearchServerPrx> client("faceCmServer", "", 10004, "tcp");
+    auto server = client.getServer();
+//    auto server = FaceSearch::FaceFeatureSearchServerPrx::checkedCast(base);
+
+
+    string str_uuid;
+    uuid_t t_uuid;
+    char str[36];
+    uuid_generate(t_uuid);
+    uuid_unparse(t_uuid, str);
+    str_uuid = str;
+
+    Json::Value t_json;
+    t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+    t_json["FaceFeature"] = "base64";//纭瀵逛笉瀵� 浜鸿劯鐗瑰緛杞垚瀛楃涓诧紒锛侊紒//鏍煎紡杞寲
+
+    t_json["picName"] = "wait todo";
+
+    t_json["personId"] = "wait todo";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+    t_json["BaseName"] = "wait todo";//鍏宠仈搴曞簱琛ㄥ悕
+
+    t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+    t_json["likePer"] = "";//浜哄憳鐩镐技搴� Score
+    t_json["likeDate"] = "2018-01-01 01:01:01";//姣旇緝鏃堕棿
+    t_json["picAddress"] = "wait todo";//鎶撴媿鍦板潃
+    t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+    t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+    t_json["picSmUrl"] = "wait todo";//浜哄憳鎶撳皬鍥�
+    t_json["picDate"] = "2018-01-01 01:01:01";
+    t_json["content"] = "wait todo";
+    t_json["viType"] = "1";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+    t_json["personIsHub"] = "1";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
+
+
+    //faceExtractElement.setProperty("dev_id", str_device_id);
+    //faceExtractElement.setProperty("cg_id", str_ch_id);
+    t_json["videoNum"] = "";//Vide缂栧彿 澶栭敭
+    t_json["videoReqNum"] = "123456";//Video璁惧缂栧彿
+    t_json["ChannlId"] = "33";//閫氶亾id
+    t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+    //浜鸿劯灞炴��
+    t_json["Age"] = "18";//妫�娴嬬殑骞撮緞  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["Gender"] = "1";//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["BeautyLevel"] = "5";//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["SimleLevel"] = "25";//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["Race"] = "1";//妫�娴嬬殑绉嶆棌  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+
+
+    DBG(t_json.toStyledString());
+
+
+//    return 0;
+    appPref.setLongData("thread.max", 1);
+    CasiaFaceWrapperN t_CasiaFaceWapper;
+//    string test1 = "http://192.168.1.65:8888/group1/M00/04/52/wKgBQVr5J-WAJ4lQAAAObkm3j38169.jpg";
+//    string test2 = "http://192.168.1.65:8888/group1/M00/04/52/wKgBQVr5JGOAXmx9AAAK0Xp3QhA271.jpg";
+//    CurlDownloadImg curlDownloadImg;
+    {
+//        auto curlImg = curlDownloadImg.download_jpeg(const_cast<char *>(test2.c_str()));
+//        cout << " image is " << test1 << endl;
+        long t_id = 0;
+//        if (curlImg.all > 0) {
+        if (true) {
+            Mat image = imread("/home/bsk/work/development/c++/Qt-test/testFastDfs/build/fastdfs/18.jpg");
+//            cvutil.buffer2CvMat(curlImg.buffer, image);
+
+            FaceImageN faceImage2{image.cols, image.rows, image.step, image.data};
+//            auto res = t_CasiaFaceWapper.extractFace(faceImage2);
+            auto faceResults = t_CasiaFaceWapper.extractFace(faceImage2);
+
+            DBG("faceResults" << faceResults.size());
+            for (auto item : faceResults) {
+                ::FaceSearch::Data t_fea;
+                t_fea.resize(item.feature.size());
+                memcpy(t_fea.data(), item.feature.data(), item.feature.size());
+                try {
+                    std::vector<::std::string> tables{"aaa1", "TestFace2", "TestFace3", "TestFace4"};
+                    auto re = server->faceSearchTopN(t_fea, t_json.toStyledString(), 1, 0.8);
+                    INFO("faceSearchMax  " << re.size());
+                    for (auto item : re) {
+                        INFO("faceSearchMax id " << (item.uuid));
+                        INFO("faceSearchMax confidence " << (item.confidence));
+                        INFO("faceSearchMax tableName " << (item.tableName));
+                    }
+                    //                                sleep(3);
+//                    ::std::vector<::std::string> tables2{"aaa1", "TestFace2", "TestFace3", "TestFace4"};
+//                    auto re2 = server->faceSearchTopN(t_fea, 5, tables2);
+//                    INFO("faceSearchTopN  " << re2.size());
+//                    for (auto item : re2) {
+//                        INFO("faceSearchTopN id " << (item.uuid));
+//                        INFO("faceSearchTopN confidence " << (item.confidence));
+//                        INFO("faceSearchTopN tableName " << (item.tableName));
+//                    }
+                } catch (std::exception ex) {
+                    ERR(ex.what());
+                }
+                t_fea.clear();
+            }
+        }
+    }
+    return 0;
+}
+
+//void test22333() {
+//
+//    int loop = 0;
+////#todo
+//    while (1) {
+//        string t_path = "./img/";
+//        DIR *dp = opendir(t_path.c_str());
+//        if (dp != NULL) {
+//            struct dirent *ep;
+//            int loop = 0;
+//            while (
+//                ep = readdir(dp)
+//                ) {
+//                string path(ep->d_name);
+//                if (path.find(".jpg") == std::string::npos) {
+//                    ERR("Couldn't find jpg.");
+//                    continue;
+//                } else {
+//                    printf("jpg url: %s\n", path.
+//
+//                        c_str()
+//
+//                    );
+//                }
+//
+//                string tName(t_path);
+//                tName.
+//                    append(path);
+//                Mat img1 = imread(tName);           // ST_PIX_FMT_BGR888
+//                if (!img1.data) {
+//                    printf("read first image file failed. url: %s\n", tName.
+//
+//                        c_str()
+//
+//                    );
+//                    continue;
+//                } else {
+//                    INFO("read img ok!");
+//                }
+//                FaceImageN faceImage{img1.cols, img1.rows, img1.step, img1.data};
+////    m_casiaFaceWrapper.extractFace(faceImage);
+//                auto faceResults = t_CasiaFaceWapper.extractFace(faceImage);
+//
+//                DBG("faceResults" << faceResults.size());
+//                for (
+//                    auto item
+//                    : faceResults) {
+//                    ::FaceSearch::Data t_fea;
+//                    t_fea.
+//                        resize(item
+//                                   .feature.
+//
+//                        size()
+//
+//                    );
+//                    memcpy(t_fea
+//                               .
+//
+//                                   data(), item
+//
+//                               .feature.
+//
+//                        data(), item
+//
+//                               .feature.
+//
+//                        size()
+//
+//                    );
+//                    try {
+//                        ::std::vector<::std::string> tables{"o_t_p_escape", "TestFace2", "TestFace3", "TestFace4"};
+//                        auto re = server->faceSearchMax(t_fea, tables);
+//                        INFO("faceSearchMax  " << re.size());
+//                        for (
+//                            auto &item
+//                            : re) {
+//                            INFO("faceSearchMax id " << (item.id));
+//                            INFO("faceSearchMax confidence " << (item.confidence));
+//                            INFO("faceSearchMax tableName " << (item.tableName));
+//                        }
+////                                sleep(3);
+//                        ::std::vector<::std::string> tables2{"o_t_p_escape", "TestFace2", "TestFace3", "TestFace4"};
+//                        auto re2 = server->faceSearchTopN(t_fea, 5, tables2);
+//                        INFO("faceSearchTopN  " << re2.size());
+//                        for (
+//                            auto &item
+//                            : re2) {
+//                            INFO("faceSearchTopN id " << (item.id));
+//                            INFO("faceSearchTopN confidence " << (item.confidence));
+//                            INFO("faceSearchTopN tableName " << (item.tableName));
+//                        }
+//                    } catch (
+//                        std::exception ex
+//                    ) {
+//                        ERR(ex.what());
+//                    }
+//                    t_fea.
+//
+//                        clear();
+////#todo if sc add message
+////else nothing
+//                }
+////        extractFace(FaceImage image, vector<unsigned char>& feature, int& faceNum);
+////                        vector<unsigned char> feature;
+////                        vector<unsigned char> feature2;
+////                        cvutil.cvMat2Buffer(img1,feature);
+////                        auto test = feature.size();
+//////                        DBG(test)
+////                        ::FaceSearch::Data t_fea;
+////                        t_fea.resize(feature.size());
+////                        memcpy(t_fea.data(),feature.data(),feature.size());
+////                        try {
+//////                server->addFace(t_fea,"aaa");addFaceWithId
+//////                            server->addFaceWithId(t_fea,(++loop),"aaa");
+//////                            sleep(1);
+//////                            server->addFaceWithId(t_fea,(loop),"bbb");
+////                            ::std::vector< ::std::string> tables{"aaa","bbb"};
+////                            auto re = server->faceSearchMax(t_fea,tables);
+////
+////                            INFO("faceSearchMax  " << re.size() );
+////                            for (auto& item : re) {
+////                                INFO("faceSearchMax id " << ( item.id));
+////                                INFO("faceSearchMax confidence " << ( item.confidence));
+////                                INFO("faceSearchMax tableName " << ( item.tableName));
+////                            }
+////                            sleep(3);
+////                        }catch (std::exception ex){
+////                            ERR(ex.what());
+////                        }
+////                        feature.clear();
+////            break;
+////            int faceNum;
+////            FaceImageN faceImage {img1.cols, img1.rows, img1.step, img1.data};
+////            //#todo pthread
+////            auto res = t_CasiaFaceWapper.extractFace(faceImage);
+////            for (auto item : res) {
+//////                item.feature
+//////addFace(const ::FaceSearch::Data& iceP_jpgData, const ::std::string& iceP_tableName, const ::Ice::Context& context = ::Ice::noExplicitContext)
+////                ::FaceSearch::Data t_fea;
+////                t_fea.resize(item.feature.size());
+////                memcpy(t_fea.data(),item.feature.data(),item.feature.size());
+////
+////                try {
+////                    server->addFace(t_fea,"aaa");
+////                    INFO("add");
+////                }catch (std::exception ex){
+////                    ERR(ex.what());
+////                }
+////            }
+//
+//                printf("\n");
+//                printf("\n");
+//                printf("\n");
+//                printf("\n");
+//            }
+//            closedir(dp);
+//        } else {
+//            ERR("Couldn't open the directory.");
+//        }
+////                break;
+//        sleep(10);
+//    }
+//
+//
+//
+//
+////    try {
+////        long out;
+////        auto temp = server2->getDbActions(000,out);
+////        cout << temp.size() << endl;
+////        cout << out << endl;
+////        INFO("getDbActions");
+////    }catch (std::exception ex){
+////        ERR(ex.what());
+////    }
+////getchar();
+//    return 0;
+//
+//}
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
new file mode 100644
index 0000000..4cab786
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
@@ -0,0 +1,265 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#include <cstring>
+#include <THFeature_i.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/ShareMemory/ShareMemoryTool.hpp>
+#include "FaceDBCompareServer.h"
+
+using namespace std;
+
+FaceDBCompareServer::FaceDBCompareServer() : m_erlangDbTool(nullptr), m_sqliteFaceEncap(nullptr) {
+
+}
+
+FaceDBCompareServer::FaceDBCompareServer(ErlangTool::ErlangDbTool *erlangDbTool) : m_erlangDbTool(erlangDbTool),
+                                                                                   m_sqliteFaceEncap(nullptr) {
+
+}
+
+FaceDBCompareServer::FaceDBCompareServer(SqliteFaceEncap *sqliteFaceEncap) : m_erlangDbTool(nullptr),
+                                                                             m_sqliteFaceEncap(sqliteFaceEncap) {
+
+}
+
+//FaceDBCompareServer::FaceDBCompareServer(Ice::CommunicatorHolder& ich) : minThreshold(10)  {
+//#ifdef TestCode
+//
+//#else
+//    try {
+//        base_alarm = ich->stringToProxy("ServerAlarm");
+//    }catch(std::exception ex){
+//        ERR("ServerAlarm connceticon fail" << ex.what());
+//    };
+//#endif
+//}
+
+FaceDBCompareServer::~FaceDBCompareServer() {
+
+}
+
+FaceResults FaceDBCompareServer::getTopResult(std::thread::id key) {
+    if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+        m_dbRWLocks[key] = RWLock();
+    }
+    RWLock &t_rwl = m_dbRWLocks[key];
+    t_rwl.wrlock();
+    FaceResults t_result = topResult[key];
+    topResult.erase(key);
+    t_rwl.unlock();
+    return t_result;
+}
+
+//#todo map 1->2 modify 2->1
+bool FaceDBCompareServer::compare(thread::id key, AlarmData *alarmData, int topN) {
+    if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+        m_dbRWLocks[key] = RWLock();
+    }
+    RWLock &t_rwl = m_dbRWLocks[key];
+//    ClockTimer clockTimer("compare ");
+    RWLock t_rwLock;
+
+    m_rwLock.rdlock();
+    mapFaceResults t_compareResults;
+    if (topN > 1) {
+        //topN
+        parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+            //#todo
+            double sc = 0;
+            for (auto &t_fea : data.features) {
+                double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+                if (t_sc > sc)
+                    sc = t_sc;
+            }
+//            FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, false};
+            FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+            t_rwLock.wrlock();
+            //#todo
+            if (sc < t_compareResults.end()->second.confidence) {
+                t_rwLock.unlock();
+                return;
+            }
+            t_compareResults.insert(make_pair(tface.confidence, tface));
+            //#todo 10
+            if (t_compareResults.size() > topN) {
+                t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
+            }
+            t_rwLock.unlock();
+        });
+    } else {
+        //Max
+        float maxScore = 0;
+        parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+            //#todo
+            double sc = 0;
+            for (auto &t_fea : data.features) {
+                double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+                if (t_sc > sc) sc = t_sc;
+            }
+            FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+            t_rwLock.wrlock();
+            if (sc < maxScore) {
+                t_rwLock.unlock();
+                return;
+            } else {
+                t_compareResults.clear();
+                t_compareResults.insert(make_pair(tface.confidence, tface));
+                maxScore = t_compareResults.begin()->second.confidence;
+            }
+            t_rwLock.unlock();
+        });
+    }
+    m_rwLock.unlock();
+
+    int maxSearchFaces = alarmData->num;
+
+    t_rwl.wrlock();
+    auto &t_topResult = topResult[key];
+    t_topResult.clear();
+    for (auto &item : t_compareResults) {
+        auto &it = item.second;
+        //#todo
+//        if (it.confidence <= 0.6) {
+//            continue;
+//        }
+        FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
+        //cout << __FUNCTION__ << " -> " << __LINE__ << " ->  scroe" << it.confidence << endl;
+        t_topResult.push_back(t_CR);
+    }
+    while (topResult.size() > maxSearchFaces)
+        t_topResult.pop_back();
+    t_rwl.unlock();
+    return true;
+}
+
+bool FaceDBCompareServer::compare(std::thread::id key, AlarmData *alarmData) {
+    if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
+        m_dbRWLocks[key] = RWLock();
+    }
+    RWLock &t_rwl = m_dbRWLocks[key];
+//    ClockTimer clockTimer("compare ");
+    t_rwl.wrlock();
+    RWLock t_rwLock;
+    mapFaceResults t_compareResults;
+    m_rwLock.rdlock();
+    parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+        double sc = 0;
+        for (auto &t_fea : data.features) {
+            double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+            if (t_sc > sc)sc = t_sc;
+        }
+        FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
+//        FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl,false};
+        t_rwLock.wrlock();
+        if (sc < alarmData->threshold) {
+            t_rwLock.unlock();
+            DBG("return");
+            return;
+        }
+        if (t_compareResults.size() > alarmData->num) {
+            t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
+        }
+        t_compareResults.insert(make_pair(tface.confidence, tface));
+        t_rwLock.unlock();
+    });
+    m_rwLock.unlock();
+    int maxSearchFaces = alarmData->num;
+    auto &t_topResult = topResult[key];
+    t_topResult.clear();
+    for (auto &item : t_compareResults) {
+        auto &it = item.second;
+        FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
+//        FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, ""};
+        t_topResult.push_back(t_CR);
+    }
+//    while (t_topResult.size() > maxSearchFaces)
+//        t_topResult.pop_back();
+    return true;
+}
+
+void FaceDBCompareServer::loadDBData(std::string str_config) {
+    string log = "loadDBData  " + str_config;
+    ClockTimer clk(log);
+
+    Json::Value t_json;
+    Json::FastWriter writer;
+    Json::Reader reader;
+
+    if (reader.parse(str_config, t_json)) {
+
+        m_rwLock.wrlock();
+        if (t_json["\"syncTpye\""].type() == Json::nullValue) {
+            auto str_tab = t_json["\"tableName\""].asString();
+            m_tableName = str_tab.substr(1, str_tab.length() - 2);//.append("_fea");
+
+            string tet = "./syncDBClient ";
+            string str_json = writer.write(t_json);
+            tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
+            INFO(tet);
+            system(tet.c_str());
+            dataMap.clear();
+            try {
+                // init
+                BISTL::BiMapFeaData biMapFeaData(m_tableName);
+                auto mymap = biMapFeaData.getMap();
+                auto size = mymap->size();
+                //#todo
+                for (auto it = mymap->begin(); it != mymap->end(); it++) {
+                    string str_uuid(it->second.m_id.data());
+                    string ft(it->second.m_feature.data());
+                    string imgUrl(it->second.m_imgUrl.data());
+                    string strIdCard(it->second.m_idcard.data());
+                    string str2;
+                    str2 = base64.Decode(ft.data(), ft.length());
+                    std::vector<unsigned char> t_fea;
+                    t_fea.resize(str2.size());
+                    memcpy(t_fea.data(), str2.data(), str2.size());
+                    auto &test = dataMap[str_uuid];
+                    test.uuid = str_uuid;
+                    test.features.push_back(t_fea);
+                    test.faceUrl = imgUrl;
+                    test.idcard = strIdCard;
+                }
+            } catch (const std::exception &e) {
+                printf("Exception:%s\n", e.what());
+                BISTL::shared_memory_object::remove(m_tableName.c_str());
+            }
+            BISTL::shared_memory_object::remove(m_tableName.c_str());
+            appPref.setIntData(m_tableName, 1);
+            DBG(m_tableName << " size is " << dataMap.size());
+        } else {
+            //#todo get sqlite3 data
+            m_tableName = t_json["tableName"].asCString();
+            auto t_res = m_sqliteFaceEncap->getFacesFromTable(m_tableName);
+            auto t_faceInfoCache = m_sqliteFaceEncap->getFaceInfoFromTable(m_tableName);
+            auto &res = *t_res;
+            //#todo
+            DBG(m_tableName << "clear before size is " << dataMap.size());
+            dataMap.clear();
+            DBG(m_tableName << "clear after size is " << dataMap.size());
+            for (auto &item : res) {
+                auto &t_sen = item.second;
+                std::vector<unsigned char> t_fea;
+                t_fea.resize(t_sen.faceFeature.size());
+                memcpy(t_fea.data(), t_sen.faceFeature.data(), t_sen.faceFeature.size());
+                auto &test = dataMap[t_sen.uuid];
+                test.uuid = t_sen.uuid;
+                test.features.push_back(t_fea);
+                test.faceUrl = t_sen.faceurl;
+                test.idcard = t_faceInfoCache[t_sen.uuid].idCard;
+            }
+            appPref.setIntData(m_tableName, 1);
+            DBG(m_tableName << " size is " << dataMap.size());
+        }
+        m_rwLock.unlock();
+    } else {
+        ERR("json format error :: " << str_config);
+        appPref.setIntData(str_config, 1);
+    }
+
+}
+
+
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
new file mode 100644
index 0000000..7940970
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
@@ -0,0 +1,64 @@
+//
+// Created by ps on 2/26/18.
+//
+
+#ifndef COMPARETEST_FACEDBCOMPARESERVER_H
+#define COMPARETEST_FACEDBCOMPARESERVER_H
+
+#include <pthread.h>
+
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <FaceSearchServer.h>
+#include "AlarmServer.hpp"
+#include "CasiaFaceWrapper/CasiaFaceWrapperN.h"
+#include <basic/util/thread/RWLock.hpp>
+#include <ErlangDbTool.h>
+#include <SqliteFaceEncap.h>
+
+class FaceDBCompareServer : public AlarmServer {
+
+public:
+    FaceDBCompareServer();
+
+    FaceDBCompareServer(SqliteFaceEncap *);
+
+    FaceDBCompareServer(ErlangTool::ErlangDbTool *);
+
+    ~FaceDBCompareServer();
+
+    virtual bool compare(std::thread::id key, AlarmData *alarmData, int topN);
+
+    bool compare(std::thread::id key, AlarmData *alarmData);
+
+    FaceResults getTopResult(std::thread::id key);
+
+private:
+    virtual void loadDBData(std::string str_config);
+
+protected:
+    CasiaFaceWrapperN m_casiaFaceWapper;
+    std::string m_tableName;
+
+    int fea_size;
+    RWLock m_rwLock;
+    std::mutex topResultMtx;
+    std::map<std::thread::id, FaceResults> topResult;
+    std::map<std::thread::id, RWLock> m_dbRWLocks;
+
+    ErlangTool::ErlangDbTool *m_erlangDbTool;
+    SqliteFaceEncap *m_sqliteFaceEncap;
+
+};
+
+static bool getRet(std::string startTime, std::string endTime) {
+    auto crrentTime = AppUtil::getTimeSecString();
+
+    if (crrentTime.compare(startTime) > 0 && crrentTime.compare(endTime) < 0) {
+        return true;
+    }
+    return false;
+
+}
+
+#endif //COMPARETEST_FACEDBCOMPARESERVER_H
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
new file mode 100644
index 0000000..3047650
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
@@ -0,0 +1,463 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#include <iostream>
+
+#include "jsoncpp/json/json.h"
+
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceFeatureSearchServerI.h"
+
+using namespace std;
+
+static std::string t_cNodeName = "FaceSearch";
+
+void erlangCallBackFunc(std::string) {
+    DBG("erlangCallBackFunc");
+    pthread_cond_signal(&(func_cond));
+    pthread_mutex_unlock(&(func_cond_mutex));
+}
+
+FaceFeatureSearchServerI::FaceFeatureSearchServerI()
+    : m_erlangDbTool(appConfig.getStringProperty("erlPath"), appConfig.getStringProperty("erlNode"),
+                     appConfig.getStringProperty("erlCookie"), t_cNodeName), m_retUpdatePthread(true),
+      pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")), m_sqliteFaceEncap("LocalDataDB") {
+
+    auto erlFatherNode = appConfig.getStringProperty("erlFatherNode");
+    if (m_erlangDbTool.initErlang() == 1) {
+        m_erlangDbTool.startNodeDb(erlFatherNode);
+    }
+
+    m_erlangDbTool.test(&func_cond, &func_cond_mutex);
+
+    loadFeatureData(this);
+}
+
+FaceFeatureSearchServerI::FaceFeatureSearchServerI(Ice::CommunicatorPtr &ich, string nodeName, string cookie)
+    : m_erlangDbTool(nodeName, cookie, t_cNodeName), m_retUpdatePthread(true),
+      pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")),
+      m_sqliteFaceEncap("LocalDataDB") {
+
+//    try {
+//        std::string identity2 = ich->getProperties()->getProperty("user.FaceData");
+//        DBG(identity2);
+//        base_FaceMemoryData = ich->stringToProxy(appPref.getStringData("user.FaceData"));
+//    } catch (std::exception ex) {
+//        ERR("base_FaceMemoryData connceticon fail" << ex.what());
+//    };
+
+    loadFeatureData(this);
+}
+
+FaceFeatureSearchServerI::~FaceFeatureSearchServerI() {
+    t_live_ret = false;
+}
+
+//#todo 浼樺寲
+::FaceSearch::FaceResults
+FaceFeatureSearchServerI::faceSearchMax(const ::FaceSearch::Data &feature, const ::std::string &info_json,
+                                        const ::Ice::Current &) {
+    thread::id key = std::this_thread::get_id();
+    ClockTimer clockTimer("faceSearchMax");
+    ::FaceSearch::FaceResults results;
+    FaceResults t_TableCompareResult;
+    AlarmData featureData;
+    featureData.num = 1;
+    featureData.feature.resize(feature.size());
+    memcpy(featureData.feature.data(), feature.data(), feature.size());
+
+    for (auto &it : m_faceFCMAP) {
+        auto &t_FaceFC = it.second;
+        auto t_tableInfo = m_tableType[it.first];
+        bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
+        if (ret) {
+            bool alarmRet = atoi(t_tableInfo.bwType.c_str());
+            //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
+            t_FaceFC->compare(key, &featureData, 1);
+            auto t_results = t_FaceFC->getTopResult(key);
+            for (auto &t_item : t_results) {
+                t_item.tableName = it.first;
+                //#todo baojing zhuangtai ?
+                t_item.alarmRet = ret;
+                t_TableCompareResult.push_back(t_item);
+            }
+        }
+    }
+
+//    DBG("t_TableCompareResult size" << t_TableCompareResult.size());
+    for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
+        float new_confidence = itor->confidence;
+        auto rtTR = results.rbegin();
+        if (!results.empty()) {
+            auto temp = rtTR->confidence;
+            while (new_confidence > temp) {
+                ++rtTR;
+                if (rtTR == (results.rend() + 1)) {
+                    rtTR--;
+                    break;
+                } else {
+//                    DBG(" sc is "<< new_confidence << "  > " << temp);
+                }
+                temp = rtTR->confidence;
+            }
+        } else {
+//            INFO("topResult is null");
+        }
+        auto itTR(rtTR.base());
+        ::FaceSearch::FaceResult t_faceCR;
+        t_faceCR.id = itor->id;
+        t_faceCR.uuid = itor->uuid;
+        t_faceCR.tableName = itor->tableName;
+        t_faceCR.confidence = itor->confidence;
+        DBG("compare results tablename is " << t_faceCR.tableName << " id is " << t_faceCR.uuid << " sc is"
+                                            << t_faceCR.confidence);
+        results.insert(itTR, t_faceCR);
+    }
+
+
+    //#todo send message
+
+    return results;
+}
+
+//#todo 浼樺寲
+::FaceSearch::FaceResults
+FaceFeatureSearchServerI::faceSearchTopN(const ::FaceSearch::Data &feature, const ::std::string &info_json,
+                                         ::Ice::Int topN, ::Ice::Float score, const ::Ice::Current &) {
+    ClockTimer clockTimer("faceSearchTopN  " + to_string(score) + "  :");
+    INFO("faceSearchTopN start");
+    thread::id key = std::this_thread::get_id();
+    ::FaceSearch::FaceResults results;
+    FaceResults t_TableCompareResult;
+    AlarmData featureData;
+    featureData.num = topN;
+    featureData.feature.resize(feature.size());
+    memcpy(featureData.feature.data(), feature.data(), feature.size());
+
+    Json::Reader reader;
+    Json::Value value;
+
+    if (reader.parse(info_json, value)) {
+        //#todo
+
+        m_rwLock.rdlock();
+        std::string feature_base64;
+        feature_base64 = base64.Encode(feature.data(), feature.size());
+        value["FaceFeature"] = feature_base64;
+        DBG("auto &it : m_faceFCMAP start " << m_faceFCMAP.size());
+        //#todo lock
+        for (auto &it : m_faceFCMAP) {
+            auto &t_FaceFC = it.second;
+            auto t_tableInfo = m_tableType[it.first];
+            bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
+            if (ret) {
+                string t_alarmRet = t_tableInfo.bwType;
+//                bool alarmRet = atoi(t_tableInfo.bwType.c_str());
+                //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
+
+                DBG("m_faceFCMAP compare start " << it.first);
+                t_FaceFC->compare(key, &featureData, topN);
+                DBG("m_faceFCMAP compare end " << it.first);
+
+                auto t_results = t_FaceFC->getTopResult(key);
+                for (auto &t_item : t_results) {
+                    t_item.tableName = it.first;
+                    t_item.alarmRet = t_alarmRet;
+                    t_TableCompareResult.push_back(t_item);
+                }
+            } else {
+                INFO("m_faceFCMAP ret is false " << it.first);
+            }
+        }
+        m_rwLock.unlock();
+        DBG("auto &it : m_faceFCMAP end");
+
+//        DBG("t_TableCompareResult size" << t_TableCompareResult.size());
+        //sort_all_results
+        for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
+            float new_confidence = itor->confidence;
+            auto rtTR = results.rbegin();
+            if (!results.empty()) {
+                auto temp = rtTR->confidence;
+                while (new_confidence > temp) {
+                    ++rtTR;
+                    if (rtTR == (results.rend() + 1)) {
+                        rtTR--;
+                        break;
+                    } else {
+                    }
+                    temp = rtTR->confidence;
+                }
+            } else {
+                ERR("topResult is null");
+            }
+            auto itTR(rtTR.base());
+            ::FaceSearch::FaceResult t_faceCR;
+            t_faceCR.id = itor->id;
+            t_faceCR.uuid = itor->uuid;
+            t_faceCR.tableName = itor->tableName;
+            t_faceCR.confidence = itor->confidence;
+            //#todo url idcard
+            t_faceCR.imgUrl = itor->face_img_url;
+            t_faceCR.idcard = itor->idCard;
+            t_faceCR.alarmRet = itor->alarmRet;
+//            DBG("compare results tablename is " << t_faceCR.tableName << " id is " << t_faceCR.uuid << " sc is"
+//                                                << t_faceCR.confidence);
+            results.insert(itTR, t_faceCR);
+        }
+        bool retface = true;
+//        cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << results.size() << endl;
+        //#todo send message
+        if (results.size() > 0) {
+            for (auto &item : results) {
+                //#todo 寰楀垎姣旇緝锛屽簲璇ュ湪compare涓繘琛�
+                if (item.confidence < score) {
+                    //#todo test
+                    auto str_uuid = value["Id"].asString();
+                    value["personIsHub"] = "4";
+                    value["likePer"] = 0.0;
+//                    DBG(value.toStyledString());
+                    cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
+                         << value.toStyledString() << endl;
+                    retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+                                                      str_uuid);
+                    break;
+                }
+                value["personId"] = item.uuid.size() > 0 ? item.uuid : "";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+
+//                string tmp_tableName = item.tableName;
+//                if (tmp_tableName.find("lt_") == 0) {
+//                    tmp_tableName = tmp_tableName.insert(tmp_tableName.find("lt_") + 3, "::");
+//                    value["BaseName"] = tmp_tableName;//鍏宠仈搴曞簱琛ㄥ悕
+//                } else {
+//                    value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//鍏宠仈搴曞簱琛ㄥ悕
+//                }
+
+                value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//鍏宠仈搴曞簱琛ㄥ悕
+
+                value["likePer"] = item.confidence > 0 ? item.confidence : 0.0;
+                value["personPicUrl"] = item.imgUrl.size() > 0 ? item.imgUrl : "";//diku tupian
+                value["idcard"] = item.idcard.size() > 0 ? item.idcard : "";//diku tupian
+                //濡傛灉 alarmRet 涓嶄负绌烘妸 浠栫殑鍊� 鏀惧叆 personIsHub,鍚﹀垯涓�4
+                value["personIsHub"] = item.alarmRet.size() > 0 ? item.alarmRet : "4";
+
+                auto str_uuid = value["Id"].asString();
+//                DBG(value.toStyledString());
+
+                cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
+                     << value.toStyledString() << "\n score   " << score << endl;
+//                DBG("score  " << score);
+                retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+                                                  str_uuid);
+                break;
+            }
+        } else {
+            auto str_uuid = value["Id"].asString();
+            value["personIsHub"] = "4";
+            value["likePer"] = 0.0;
+            DBG(value.toStyledString());
+//            cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
+//                 << value.toStyledString() << endl;
+            retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
+                                              str_uuid);
+        }
+        if (!retface) {
+            ERR("insert error");
+        } else {
+            cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "retface  " << retface << endl;
+        };
+    } else {
+        ERR("json is error" << info_json);
+    }
+
+
+
+
+//    for (auto &item : t_tables) {
+//        DBG(item);
+//    }
+    return results;
+}
+
+bool FaceFeatureSearchServerI::loadFeatureData(FaceFeatureSearchServerI *faceFea) {
+    ErlangTool::map_TabDataCache dataBaseCache = faceFea->m_erlangDbTool.findAllDatabase();
+    if (dataBaseCache.size() < 0 && faceFea->m_retUpdatePthread) {
+        faceFea->m_retUpdatePthread = false;
+        std::thread thd(dataUpdate, faceFea);
+        thd.detach();
+    }
+    auto typeInfoCache = faceFea->m_erlangDbTool.findAllTypeInfo();
+    faceFea->m_tableType.clear();
+    string str_config = faceFea->m_erlangDbTool.getConfigJsonString();
+
+
+    Json::Value t_json;
+    Json::FastWriter writer;
+    Json::Reader reader;
+
+    faceFea->m_rwLock.wrlock();
+    if (reader.parse(str_config, t_json)) {
+        for (auto &item : dataBaseCache) {
+            TableInfo tabInfo;
+            tabInfo.tableName = item.first;
+            tabInfo.startTime = item.second.startTime;
+            tabInfo.endTime = item.second.endTime;
+//            tabInfo.bwType = item.second.bwType = typeInfoCache.find(item.first)->second.bwType;
+            tabInfo.bwType = item.second.bwType;//= typeInfoCache.find(item.first)->second.bwType;
+            tabInfo.createBy = item.second.create_by;
+
+            if ((tabInfo.tableName.find("lt_") == 0) && (tabInfo.createBy != appConfig.getStringProperty("erlNode"))) {
+                continue;
+            }
+            string &tableName = item.second.tableName;
+            faceFea->m_tableType[tableName] = tabInfo;
+            appPref.setIntData(tableName, 0);
+            if (faceFea->m_faceFCMAP.find(tableName) == faceFea->m_faceFCMAP.end()) {
+                faceFea->m_faceFCMAP[tableName] = new FaceDBCompareServer(&(faceFea->m_erlangDbTool));
+//                usleep(1000);
+            }
+            t_json["\"tableName\""] = "\"" + tableName + "\"";
+            std::string str_json = writer.write(t_json);
+
+            str_json.substr(0, str_json.length() - 1);
+//            sleep(1);
+            usleep(1500 * 1000);
+            faceFea->m_faceFCMAP[tableName]->initDB(str_json);
+            DBG("initDB tableName " << tableName);
+        }
+    } else {
+        ERR("json format error :: " << str_config);
+    }
+
+    //#todo get data from sqlite3
+    {
+        //#鏌ヨ浜鸿劯搴曞簱鍒楄〃
+        auto res = faceFea->m_sqliteFaceEncap.getTableInfos();
+        for (auto &item : res) {
+            if (item.tableType == "person") {
+                std::cout << "tableName is  " << item.tableName << std::endl;
+
+                {
+                    std::string tableName = item.tableName;
+                    faceFea->m_tableType[tableName] = item;
+                    appPref.setIntData(tableName, 0);
+                    if (faceFea->m_faceFCMAP.find(tableName) == faceFea->m_faceFCMAP.end()) {
+                        faceFea->m_faceFCMAP[tableName] = new FaceDBCompareServer(&(faceFea->m_sqliteFaceEncap));
+                    }
+
+                    Json::Value t_json2;
+                    t_json2.clear();
+
+                    t_json2["\"syncTpye\""] = "local";
+                    t_json2["tableName"] = tableName;
+                    std::string str_json = writer.write(t_json2);
+
+                    str_json.substr(0, str_json.length() - 1);
+                    faceFea->m_faceFCMAP[tableName]->initDB(str_json);
+                    DBG("initDB tableName " << tableName);
+                }
+
+            }
+        }
+    }
+    faceFea->m_rwLock.unlock();
+
+    INFO("get time");
+    faceFea->m_inTime = getTimeLong();
+    if (faceFea->m_retUpdatePthread) {
+        faceFea->m_retUpdatePthread = false;
+        std::thread thd(dataUpdate, faceFea);
+
+//        faceFea->m_erlangDbTool.test(faceFea, erlangCallBackFunc);
+        INFO("start thread");
+        thd.detach();
+    } else {
+        ERR("m_retUpdatePthread is false ");
+    }
+
+    return false;
+}
+
+void FaceFeatureSearchServerI::waitTables(FaceFeatureSearchServerI *faceFea, int loop) {
+    DBG("waitTales");
+    while (t_live_ret) {
+        faceFea->m_rwLock.rdlock();
+        if (faceFea->m_faceFCMAP.size() == 0) {
+            ERR("table size is 0");
+            faceFea->m_rwLock.unlock();
+            return;
+        }
+        bool tmp = true;
+        for (auto &t_face : faceFea->m_faceFCMAP) {
+            auto t_ret = appPref.getIntData(t_face.first);
+            tmp = t_ret & tmp;
+        }
+        if (tmp && faceFea->m_faceFCMAP.size() > 0) {
+            INFO("waitTables ok");
+            faceFea->m_rwLock.unlock();
+            return;
+        } else {
+            ERR("tmp is " << tmp << "  faceFea->m_faceFCMAP.size() is " << faceFea->m_faceFCMAP.size());
+            faceFea->m_rwLock.unlock();
+            usleep(1000);
+//            if (loop != -1 && loop-- < 1) {
+//                ERR("return " << loop);
+//                return;
+//            }
+        }
+    }
+    return;
+}
+
+
+//void FaceFeatureSearchServerI::erlangCallBackFunc(std::string) {
+//    DBG("erlangCallBackFunc");
+//    pthread_cond_signal(&(func_cond));
+//    pthread_mutex_unlock(&(func_cond_mutex));
+//}
+
+void FaceFeatureSearchServerI::dataUpdate(FaceFeatureSearchServerI *faceFea) {
+    long inTime = faceFea->m_inTime;
+    // modify all db ready start update, <10s
+    faceFea->waitTables(faceFea, 100);
+    int loop = 0;
+    long outTime;
+    //update
+    while (t_live_ret) {
+        DBG(" wait lock?");
+        pthread_mutex_lock(&(func_cond_mutex));
+        DBG(" get lock?");
+        pthread_cond_wait(&(func_cond), &(func_cond_mutex));
+        try {
+//            faceFea->m_rwLock.rdlock();
+//            if (faceFea->m_faceFCMAP.size() > 0) {
+//                faceFea->m_rwLock.unlock();
+//            } else {
+//                faceFea->m_rwLock.unlock();
+//            }
+            DBG("update data sleep before ");
+            int sleepTime = appConfig.getIntProperty("FaceSeachSleepTime");
+            sleepTime = sleepTime > 30 ? sleepTime : 30;
+            DBG("sleepTime is " << sleepTime);
+            sleep(30);
+            inTime = outTime;
+            outTime = 0;
+            cout << " loop is " << loop++ << endl;
+            faceFea->loadFeatureData(faceFea);
+            faceFea->waitTables(faceFea, 100000);
+            pthread_mutex_unlock(&func_cond_mutex);
+        } catch (std::exception ex) {
+            ERR(ex.what());
+        }
+    }
+}
+
+
+bool FaceFeatureSearchServerI::initErlang(std::string nodeName, std::string cookie) {
+    //#todo
+//    m_erlangDbTool = ErlangTool::ErlangDbTool(nodeName, cookie);
+    return false;
+}
+
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h
new file mode 100644
index 0000000..7a1c16b
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h
@@ -0,0 +1,85 @@
+//
+// Created by pans on 4/27/18.
+//
+
+#ifndef FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
+#define FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
+
+#include <FaceSearchServer.h>
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <basic/util/app/AppConfig.h>
+
+#include <ErlangDbTool.h>
+#include <SqliteFaceEncap.h>
+#include "FaceDBCompareServer.h"
+
+//struct TableInfo {
+//    std::string tab_name;
+//    std::string startTime;
+//    std::string endTime;
+//    std::string bwType;
+//    std::string create_by;
+//};
+
+static bool t_live_ret = true;
+static pthread_cond_t func_cond(PTHREAD_COND_INITIALIZER);
+static pthread_mutex_t func_cond_mutex(PTHREAD_MUTEX_INITIALIZER);
+
+
+void erlangCallBackFunc(std::string);
+
+class FaceFeatureSearchServerI : public FaceSearch::FaceFeatureSearchServer {
+public:
+    FaceFeatureSearchServerI();
+
+    FaceFeatureSearchServerI(Ice::CommunicatorPtr &ich, std::string nodeName, std::string cookie);
+
+    virtual ~FaceFeatureSearchServerI();
+
+public:
+    virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data &, const ::std::string &,
+                                                    const ::Ice::Current & = ::Ice::emptyCurrent);
+
+    virtual ::FaceSearch::FaceResults
+    faceSearchTopN(const ::FaceSearch::Data &, const ::std::string &, ::Ice::Int, ::Ice::Float,
+                   const ::Ice::Current & = ::Ice::emptyCurrent);
+
+private:
+    bool initErlang(std::string nodeName, std::string cookie);
+
+    //#todo delete cache
+
+    //#todo loadData
+    static bool loadFeatureData(FaceFeatureSearchServerI *faceFea);
+
+    static void dataUpdate(FaceFeatureSearchServerI *faceFea);
+
+    static void waitTables(FaceFeatureSearchServerI *faceFea, int loop = -1);
+
+//    void erlangCallBackFunc(std::string);
+
+private:
+    long m_inTime;
+    std::map<std::string, FaceDBCompareServer *> m_faceFCMAP;
+    std::map<std::string, TableInfo> m_tableType;
+
+    RWLock m_rwLock;
+    ErlangTool::ErlangDbTool m_erlangDbTool;
+    SqliteFaceEncap m_sqliteFaceEncap;
+    std::mutex m_mutex;
+    bool m_retUpdatePthread;
+
+    Base64 base64;
+//    Ice::ObjectPrx base_FaceMemoryData;
+//    IceRpcClient<::FaceSearch::FaceMemoryDataPrx> m_faceMemoryClient;
+//    ::FaceSearch::FaceMemoryDataPrx serverFaceMemoryData;
+
+//    func_cond_mutex(PTHREAD_MUTEX_INITIALIZER), func_cond(PTHREAD_COND_INITIALIZER)
+
+    EsDBTool pManagerEsDB;//(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+};
+
+
+#endif //FACESEARCHSERVER_FACEFEATURESEARCHSERVERI_H
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp b/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp
new file mode 100644
index 0000000..b82cdeb
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/FaceSearchServerResources.cpp
@@ -0,0 +1,4 @@
+//
+// Created by pans on 4/27/18.
+//
+
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt
new file mode 100644
index 0000000..a96a094
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt
@@ -0,0 +1,74 @@
+cmake_minimum_required(VERSION 3.5)
+project(LoadDBClient)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../../build)
+
+add_definitions(-DGLOG)
+set(CMAKE_CXX_STANDARD 11)
+
+include_directories(
+    /home/ps/boost_1_68_0
+    /usr/include/
+    ../../../BasicPlatForm/libs/glog/include
+    ../../../BasicPlatForm/libs/jsoncpp/include
+    ../../../BasicPlatForm/basic/util/ShareMemory/
+    ../../../../Erlang/syncDBTool
+)
+
+link_directories(
+    /usr/lib/erlang/lib/erl_interface-3.8.2/lib/
+    ../../../BasicPlatForm/libs/glog/lib
+    ../../../BasicPlatForm/libs/jsoncpp/lib
+)
+
+
+add_executable(syncDBClient
+    main.cpp
+
+    ../../../../Erlang/syncDBTool/ErlangDbTool.cpp
+    #    ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+    )
+
+target_link_libraries(
+    syncDBClient
+    glog
+    ei
+    erl_interface_st
+    ei_st
+    erl_interface
+    rt
+    jsoncpp
+    pthread
+)
+
+add_executable(TestCilent
+    Client.cpp
+    #    ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+
+    )
+
+target_link_libraries(TestCilent
+    pthread
+    jsoncpp
+    rt
+    )
+
+
+#include_directories(
+#    /usr/include/x86_64-linux-gnu/qt5
+#    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+#    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+#)
+#add_executable(demoTime
+#    demoTime.cpp
+#    #    ../../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
+#    )
+#
+#target_link_libraries(demoTime
+#    pthread
+#    Qt5Core
+#    Qt5Sql
+#    )
+
+
+#./syncDBClient "{"\"cookie\"":"\"12121\"","\"nodeName\"":"\"wp1@192.168.1.103\"","\"path\"":"\"/opt/erlang/wp1\"","\"tableName\"":"\"娴嬭瘯涓枃\""}" > tl1 &  \
+#./syncDBClient "{"\"cookie\"":"\"12121\"","\"nodeName\"":"\"wp1@192.168.1.103\"","\"path\"":"\"/opt/erlang/wp1\"","\"tableName\"":"\"娴嬭瘯涓枃2\""}" > tl2
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp
new file mode 100644
index 0000000..560e08e
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/Client.cpp
@@ -0,0 +1,112 @@
+//
+// Created by ps on 8/9/18.
+//
+
+
+#include "ShareMemoryTool.hpp"
+#include <jsoncpp/json/json.h>
+#include <SemTool.h>
+
+
+using namespace std;
+
+static std::string getTimeSecString() {
+    char buf[128] = {0};
+    time_t t = time(nullptr);
+    timeval time{0};
+    gettimeofday(&time, nullptr);
+    tm *local = localtime(&t); //杞负鏈湴鏃堕棿
+    strftime(buf, 64, "%Y-%m-%d %H:%M:%S", local);
+    return std::string(buf);
+}
+
+int main() {
+
+//    string str_json = "{\"path\":\"/opt/erlang/sub1/\",\"nodeName\":\"sub1@192.168.1.186\",\"cookie\":\"abc\",\"tableName\":\"test\"}";
+
+//    int key = 1234;
+//    SemTool semTool(key);
+//    semTool.set_semvalue();
+
+    auto str = getTimeSecString();
+
+    cout << str.substr(0, 10) << endl;
+
+
+    srand(time(0));
+
+    bool ret = true;
+    if (rand() % 2) {
+        for (int i = 0; i < 10; ++i) {
+            int loop = 3;
+            cout << loop << "   " << loop % 2 << endl;
+            ret &= loop % 2;
+        }
+    } else {
+        ret = false;
+    }
+
+    if (ret) {
+        cout << "true" << endl;
+    } else {
+        cout << "false" << endl;
+    }
+
+    return 0;
+
+    Json::Value t_json;
+    Json::FastWriter writer;
+
+    t_json["\"path\""] = "\"/opt/erlang/sub1/\"";
+    t_json["\"nodeName\""] = "\"sub1@192.168.1.186\"";
+    t_json["\"cookie\""] = "\"abc\"";
+    t_json["\"tableName\""] = "\"test\"";
+//    t_json["\"key\""] = "\""+to_string(key)+"\"";
+    string tet = "./syncDBClient ";
+    string str_json = writer.write(t_json);
+
+    tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
+    cout << tet << endl;
+    system(tet.c_str());
+//    return 0;
+//    sleep(2);
+
+//    semTool.semaphore_p();
+
+    try {
+//        BISTL::shared_memory_object
+        // init
+//        BISTL::managed_shared_memory segment(BISTL::open_only, "aaa8" );
+        BISTL::BiMapFeaData biMapFeaData("test");
+
+//        const BISTL::void_allocator alloc_inst (segment.get_segment_manager());
+
+//        BISTL::bi_map_Feature_Info * mymap =
+//            segment.construct<BISTL::bi_map_Feature_Info>("MyMap")(std::less<BISTL::char_string>(),alloc_inst);
+//        BISTL::bi_map_Feature_Info *mymap =
+//            segment.find_or_construct<BISTL::bi_map_Feature_Info>("aaa8")(std::less<BISTL::char_string>(), alloc_inst);
+
+        auto mymap = biMapFeaData.getMap();
+        auto size = mymap->size();
+        for (auto it = mymap->begin(); it != mymap->end(); it++) {
+//            printf("%s \n", it->second.id.c_str());
+//            printf("%d \n", it->second.id);
+            string a = string(it->second.m_id.data());
+            string b = string(it->second.m_feature.data());
+            std::cout << "id      " << a << std::endl;
+            std::cout << "feature " << b << std::endl;
+//            it->second.id;
+        }
+        printf("\n");
+
+//        BISTL::shared_memory_object::remove("SharedMemory");
+    }
+    catch (const std::exception &e) {
+        printf("Exception:%s\n", e.what());
+        BISTL::shared_memory_object::remove("test");
+    }
+    getchar();
+    BISTL::shared_memory_object::remove("test");
+
+    return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp
new file mode 100644
index 0000000..6efa814
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/demoTime.cpp
@@ -0,0 +1,118 @@
+//
+// Created by ps on 18-9-30.
+//
+
+#include<QDateTime>
+#include <iostream>
+
+using namespace std;
+
+typedef struct {
+    int Year;
+    int Month;
+    int Day;
+    int Hour;
+    int Minute;
+    int Second;
+} TimeSt, *pTimeSt;
+
+void DownLoad(QDateTime startTime, QDateTime endTime) {
+    cout << __FUNCTION__ << "  " << startTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+    cout << __FUNCTION__ << "  " << endTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+
+
+    cout << "\n\n\n" << endl;
+}
+
+void testFunc(QDateTime startTime, QDateTime endTime);
+
+void testFunc(QDateTime startTime, QDateTime endTime) {
+
+    int loop = 0;
+
+    QDateTime tmp_EndTime = startTime.addSecs(1 * 60 * 15);
+    if (tmp_EndTime < endTime) {
+        DownLoad(startTime, tmp_EndTime);
+        testFunc(tmp_EndTime, endTime);
+    } else {
+        DownLoad(startTime, endTime);
+        return;
+    }
+
+
+}
+
+
+int main() {
+
+
+    QDateTime startTime = QDateTime::fromString("2018-10-08 13:03:07", "yyyy-MM-dd hh:mm:ss");
+//    QDateTime startTime = QDateTime::currentDateTime();//鍗冲皢涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+    QDateTime endTime;//璁板綍鏇存柊鏃堕棿
+
+    int nDuration = 2;
+    endTime = startTime.addSecs(nDuration * 60 * 59);
+
+    cout << __LINE__ << "  " << startTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+    cout << __LINE__ << "  " << endTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+
+
+    //task_time Start
+    TimeSt stTimeSt;
+    stTimeSt.Year = startTime.date().year();
+    stTimeSt.Month = startTime.date().month();
+    stTimeSt.Day = startTime.date().day();
+    stTimeSt.Hour = startTime.time().hour();
+    stTimeSt.Minute = startTime.time().minute();
+    stTimeSt.Second = startTime.time().second();
+
+
+    char ch_StringStartTime[128];
+    sprintf(ch_StringStartTime, "%04d-%02d-%02d %02d:%02d:%02d", stTimeSt.Year, stTimeSt.Month, stTimeSt.Day,
+            stTimeSt.Hour,
+            stTimeSt.Minute, stTimeSt.Second);
+    string str_StringStartTime(ch_StringStartTime);
+//    string str_StringStartTime(
+//        to_string(stTimeSt.Year) + "-" + to_string(stTimeSt.Month) + "-" + to_string(stTimeSt.Day) + " "
+//        + to_string(stTimeSt.Hour) + ":" + to_string(stTimeSt.Minute) + ":" +
+//        to_string(stTimeSt.Second));
+
+    cout << "str_____" << str_StringStartTime << endl;
+    QDateTime
+        taskStartTime = QDateTime::fromString(QString::fromStdString(str_StringStartTime), "yyyy-MM-dd hh:mm:ss");
+    cout << taskStartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+    //task_time Start -------------------------------------------------
+
+    //task_time end
+    TimeSt endTimeSt;
+    endTimeSt.Year = endTime.date().year();
+    endTimeSt.Month = endTime.date().month();
+    endTimeSt.Day = endTime.date().day();
+    endTimeSt.Hour = endTime.time().hour();
+    endTimeSt.Minute = endTime.time().minute();
+    endTimeSt.Second = endTime.time().second();
+
+    char ch_StringEndTime[128];
+    sprintf(ch_StringEndTime, "%04d-%02d-%02d %02d:%02d:%02d", endTimeSt.Year, endTimeSt.Month, endTimeSt.Day,
+            endTimeSt.Hour, endTimeSt.Minute, endTimeSt.Second);
+    string str_StringEndTime(ch_StringEndTime);
+
+//    string str_StringEndTime(
+//        to_string(endTimeSt.Year) + "-" + to_string(endTimeSt.Month) + "-" + to_string(endTimeSt.Day) + " "
+//        + to_string(endTimeSt.Hour) + ":" + to_string(endTimeSt.Minute) + ":" +
+//        to_string(endTimeSt.Second));
+
+    cout << "str_____" << str_StringEndTime << endl;
+    QDateTime
+        taskEndTime = QDateTime::fromString(QString::fromStdString(str_StringEndTime), "yyyy-MM-dd hh:mm:ss");
+    cout << taskEndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString() << endl;
+    //task_time end -------------------------------------------------
+
+
+    cout << "\n\n\n" << endl;
+
+    testFunc(taskStartTime, taskEndTime);
+
+    return 0;
+
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp
new file mode 100644
index 0000000..621a55f
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/main.cpp
@@ -0,0 +1,100 @@
+#include <iostream>
+#include <unistd.h>
+#include <sys/time.h>
+#include <vector>
+#include <boost/interprocess/shared_memory_object.hpp>
+#include <boost/interprocess/mapped_region.hpp>
+
+#include <jsoncpp/json/json.h>
+#include <SemTool.h>
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+#include "ErlangDbTool.h"
+#include "ShareMemoryTool.hpp"
+
+using namespace std;
+
+//#erl -name b@192.168.1.164 -setcookie abc -mnesia dir '"/home/firefly/erlang"' -detached -noshell
+int main(int argc, char **argv) {
+    std::cout << "Hello, World!" << std::endl;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+    if (argc <= 1) {
+        ERR("argc size is err");
+        exit(-1);
+    }
+
+    string str_json(argv[1]);
+//    cout << str_json << endl;
+//    string str_json = "{\"path\":\"/opt/erlang/sub1/\",\"nodeName\":\"sub1@192.168.1.186\",\"cookie\":\"abc\",\"tableName\":\"test\"}";
+
+    Json::Value t_json;
+    Json::Reader reader;
+
+    if (!reader.parse(str_json, t_json)) {
+        ERR("json format error :: " << str_json);
+        return -1;
+    }
+
+    int loop = 0;
+
+    std::string path = t_json["path"].asString();//"/opt/erlang/za/";
+    std::string nodeName = t_json["nodeName"].asString();//"za@192.168.188.128";
+    std::string cookie = t_json["cookie"].asString();//"abc";
+    std::string tableName = t_json["tableName"].asString();
+
+//    SemTool semTool(t_json["key"].asInt());
+//
+//    semTool.semaphore_p();
+
+
+    /***
+     * jiazai renlian
+     */
+//    struct timeval t1, t2;
+//    gettimeofday(&t1, NULL);
+
+
+    std::string str_node("testNode");
+    str_node.append(to_string((int) getpid()));
+    ErlangTool::ErlangDbTool erlangDbTool(nodeName, cookie, str_node);
+    while (1) {
+        /***
+     * load fea
+     */
+
+        auto cache = erlangDbTool.loadFaceFeaData(tableName);
+
+//        gettimeofday(&t2, NULL);
+        //閭d箞鍑芥暟f杩愯鎵�鑺辩殑鏃堕棿涓�
+//        auto deltaT = (t2.tv_sec - t1.tv_sec) * 1000000 + t2.tv_usec - t1.tv_usec;
+//        DBG(" loadData " << deltaT << "us")
+//        DBG(tableName << "size is " << cache.size() << " " << loop);
+        if (cache.size() <= 0 && loop++ <= 10) {
+            usleep(100);
+            continue;
+        }
+        auto size = sizeof(cache[0]) * cache.size();
+        try {
+            BISTL::shared_memory_object::remove(tableName.c_str());
+            BISTL::BiMapFeaData biMapFeaData(tableName, size);
+            for (auto &item :cache) {
+                biMapFeaData.saveKeyOrValue(item.second.id, item.second.feature, item.second.img, item.second.idcard,
+                                            item.second.create_by, item.second.create_time, item.second.update_time);
+            }
+            auto mymap = biMapFeaData.getMap();
+//        for (auto it = mymap->begin(); it != mymap->end(); it++) {
+//            std::cout << "feature " << it->second.m_feature << std::endl;
+//        }
+            DBG("load ok " << tableName << "mymap size is " << mymap->size());
+        }
+        catch (const std::exception &e) {
+            printf("Exception:%s\n", e.what());
+            BISTL::shared_memory_object::remove(tableName.c_str());
+        }
+        break;
+    }
+
+    return 0;
+}
diff --git a/QiaoJiaSystem/FaceSearchServer/main.cpp b/QiaoJiaSystem/FaceSearchServer/main.cpp
new file mode 100644
index 0000000..90f7577
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/main.cpp
@@ -0,0 +1,37 @@
+//
+// Created by pans on 4/27/18.
+//
+#include <iostream>
+#include <Ice/Ice.h>
+#include <thread>
+
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppPreference.hpp>
+#include "FaceFeatureSearchServerI.h"
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+    SAVE_APP_ARGS;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+    auto ich = Ice::initialize(argc, argv);
+
+    DBG("\n\n\nstart\n\n");
+
+    appPref.setLongData("thread.max", 32);
+    //#todo
+
+//    appPref.setStringData("ipAdd", "192.168.1.185");
+//    appPref.setIntData("ipPort", 9200);
+    appPref.setStringData("ipAdd", appConfig.getStringProperty("ES_IP"));
+    appPref.setIntData("ipPort", appConfig.getIntProperty("ES_PORT"));
+
+    IceRpcServer<FaceFeatureSearchServerI> server("faceCmServer", 10004, "tcp");
+    server.setMessageSizeMax(1024 * 1024 * 50);
+    server.setPoolInitSize(10);
+    server.setPoolMaxSize(32);
+    server.runWaitShutDown();
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp
new file mode 100644
index 0000000..19fec76
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.cpp
@@ -0,0 +1,515 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceSearchServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <FaceSearchServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+#   pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+#   pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ids[2] =
+{
+    "::FaceSearch::FaceFeatureSearchServer",
+    "::Ice::Object"
+};
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ops[] =
+{
+    "faceSearchMax",
+    "faceSearchTopN",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name = "faceSearchMax";
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name = "faceSearchTopN";
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceSearch_FaceFeatureSearchServer_ids, iceC_FaceSearch_FaceFeatureSearchServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+FaceSearch::FaceFeatureSearchServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_FaceSearch_FaceFeatureSearchServer_ids[0], &iceC_FaceSearch_FaceFeatureSearchServer_ids[2]);
+}
+
+::std::string
+FaceSearch::FaceFeatureSearchServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+    static const ::std::string typeId = "::FaceSearch::FaceFeatureSearchServer";
+    return typeId;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchMax(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::FaceSearch::Data iceP_feature;
+    ::std::string iceP_info;
+    istr->readAll(iceP_feature, iceP_info);
+    inS.endReadParams();
+    ::FaceSearch::FaceResults ret = this->faceSearchMax(::std::move(iceP_feature), ::std::move(iceP_info), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchTopN(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::FaceSearch::Data iceP_feature;
+    ::std::string iceP_info;
+    int iceP_topN;
+    float iceP_score;
+    istr->readAll(iceP_feature, iceP_info, iceP_topN, iceP_score);
+    inS.endReadParams();
+    ::FaceSearch::FaceResults ret = this->faceSearchTopN(::std::move(iceP_feature), ::std::move(iceP_info), iceP_topN, iceP_score, current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceSearch_FaceFeatureSearchServer_ops, iceC_FaceSearch_FaceFeatureSearchServer_ops + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceSearch_FaceFeatureSearchServer_ops)
+    {
+        case 0:
+        {
+            return _iceD_faceSearchMax(in, current);
+        }
+        case 1:
+        {
+            return _iceD_faceSearchTopN(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>& outAsync, const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+    outAsync->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_feature, iceP_info);
+        },
+        nullptr);
+}
+
+void
+FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>& outAsync, const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+    outAsync->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_feature, iceP_info, iceP_topN, iceP_score);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+FaceSearch::FaceFeatureSearchServerPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<FaceFeatureSearchServerPrx>();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServerPrx::ice_staticId()
+{
+    return FaceSearch::FaceFeatureSearchServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name = "faceSearchMax";
+
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name = "faceSearchTopN";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::FaceSearch::upCast(::IceProxy::FaceSearch::FaceFeatureSearchServer* p) { return p; }
+
+void
+::IceProxy::FaceSearch::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::FaceSearch::FaceFeatureSearchServer;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceSearch::FaceFeatureSearchServer::_iceI_begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_feature);
+        ostr->write(iceP_info);
+        result->endWriteParams();
+        result->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::FaceSearch::FaceResults
+IceProxy::FaceSearch::FaceFeatureSearchServer::end_faceSearchMax(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchMax_name);
+    ::FaceSearch::FaceResults ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::FaceSearch::FaceFeatureSearchServer::_iceI_begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_feature);
+        ostr->write(iceP_info);
+        ostr->write(iceP_topN);
+        ostr->write(iceP_score);
+        result->endWriteParams();
+        result->invoke(iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::FaceSearch::FaceResults
+IceProxy::FaceSearch::FaceFeatureSearchServer::end_faceSearchTopN(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_FaceSearch_FaceFeatureSearchServer_faceSearchTopN_name);
+    ::FaceSearch::FaceResults ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::FaceSearch::FaceFeatureSearchServer::_newInstance() const
+{
+    return new FaceFeatureSearchServer;
+}
+
+const ::std::string&
+IceProxy::FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+    return ::FaceSearch::FaceFeatureSearchServer::ice_staticId();
+}
+
+FaceSearch::FaceFeatureSearchServer::~FaceFeatureSearchServer()
+{
+}
+
+::Ice::Object* FaceSearch::upCast(::FaceSearch::FaceFeatureSearchServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_ids[2] =
+{
+    "::FaceSearch::FaceFeatureSearchServer",
+    "::Ice::Object"
+};
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_FaceSearch_FaceFeatureSearchServer_ids, iceC_FaceSearch_FaceFeatureSearchServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+FaceSearch::FaceFeatureSearchServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_FaceSearch_FaceFeatureSearchServer_ids[0], &iceC_FaceSearch_FaceFeatureSearchServer_ids[2]);
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+FaceSearch::FaceFeatureSearchServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::FaceSearch::FaceFeatureSearchServer";
+    return typeId;
+#else
+    return iceC_FaceSearch_FaceFeatureSearchServer_ids[0];
+#endif
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchMax(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::FaceSearch::Data iceP_feature;
+    ::std::string iceP_info;
+    istr->read(iceP_feature);
+    istr->read(iceP_info);
+    inS.endReadParams();
+    ::FaceSearch::FaceResults ret = this->faceSearchMax(iceP_feature, iceP_info, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceD_faceSearchTopN(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::FaceSearch::Data iceP_feature;
+    ::std::string iceP_info;
+    ::Ice::Int iceP_topN;
+    ::Ice::Float iceP_score;
+    istr->read(iceP_feature);
+    istr->read(iceP_info);
+    istr->read(iceP_topN);
+    istr->read(iceP_score);
+    inS.endReadParams();
+    ::FaceSearch::FaceResults ret = this->faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_FaceSearch_FaceFeatureSearchServer_all[] =
+{
+    "faceSearchMax",
+    "faceSearchTopN",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+
+}
+
+bool
+FaceSearch::FaceFeatureSearchServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_FaceSearch_FaceFeatureSearchServer_all, iceC_FaceSearch_FaceFeatureSearchServer_all + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_FaceSearch_FaceFeatureSearchServer_all)
+    {
+        case 0:
+        {
+            return _iceD_faceSearchMax(in, current);
+        }
+        case 1:
+        {
+            return _iceD_faceSearchTopN(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+FaceSearch::FaceFeatureSearchServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::FaceSearch::FaceFeatureSearchServer, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+FaceSearch::FaceFeatureSearchServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::FaceSearch::FaceFeatureSearchServer, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+FaceSearch::_icePatchObjectPtr(FaceFeatureSearchServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::FaceSearch::FaceFeatureSearchServerPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::FaceSearch::FaceFeatureSearchServer::ice_staticId(), v);
+    }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h
new file mode 100644
index 0000000..8233434
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.h
@@ -0,0 +1,678 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `FaceSearchServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __FaceSearchServer_h__
+#define __FaceSearchServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+class FaceFeatureSearchServerPrx;
+
+}
+
+namespace FaceSearch
+{
+
+using Data = ::std::vector<::Ice::Byte>;
+
+struct FaceResult
+{
+    long long int id;
+    ::std::string uuid;
+    ::std::string tableName;
+    float confidence;
+    ::std::string imgUrl;
+    ::std::string idcard;
+    ::std::string alarmRet;
+
+    std::tuple<const long long int&, const ::std::string&, const ::std::string&, const float&, const ::std::string&, const ::std::string&, const ::std::string&> ice_tuple() const
+    {
+        return std::tie(id, uuid, tableName, confidence, imgUrl, idcard, alarmRet);
+    }
+};
+
+using FaceResults = ::std::vector<::FaceSearch::FaceResult>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = FaceFeatureSearchServerPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceSearch::FaceResults faceSearchMax(::FaceSearch::Data, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_faceSearchMax(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::FaceSearch::FaceResults faceSearchTopN(::FaceSearch::Data, ::std::string, int, float, const ::Ice::Current&) = 0;
+    bool _iceD_faceSearchTopN(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServerPrx : public virtual ::Ice::Proxy<FaceFeatureSearchServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::FaceSearch::FaceResults>(true, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto faceSearchMaxAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::FaceSearch::FaceResults>>().get_future())
+    {
+        return _makePromiseOutgoing<::FaceSearch::FaceResults, P>(false, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context);
+    }
+
+    ::std::function<void()>
+    faceSearchMaxAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info,
+                       ::std::function<void(::FaceSearch::FaceResults)> response,
+                       ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                       ::std::function<void(bool)> sent = nullptr,
+                       const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::FaceSearch::FaceResults>(response, ex, sent, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchMax, iceP_feature, iceP_info, context);
+    }
+
+    void _iceI_faceSearchMax(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>&, const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Context&);
+
+    ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::FaceSearch::FaceResults>(true, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto faceSearchTopNAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::FaceSearch::FaceResults>>().get_future())
+    {
+        return _makePromiseOutgoing<::FaceSearch::FaceResults, P>(false, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context);
+    }
+
+    ::std::function<void()>
+    faceSearchTopNAsync(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, int iceP_topN, float iceP_score,
+                        ::std::function<void(::FaceSearch::FaceResults)> response,
+                        ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                        ::std::function<void(bool)> sent = nullptr,
+                        const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::FaceSearch::FaceResults>(response, ex, sent, this, &FaceSearch::FaceFeatureSearchServerPrx::_iceI_faceSearchTopN, iceP_feature, iceP_info, iceP_topN, iceP_score, context);
+    }
+
+    void _iceI_faceSearchTopN(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::FaceSearch::FaceResults>>&, const ::FaceSearch::Data&, const ::std::string&, int, float, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    FaceFeatureSearchServerPrx() = default;
+    friend ::std::shared_ptr<FaceFeatureSearchServerPrx> IceInternal::createProxy<FaceFeatureSearchServerPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::FaceSearch::FaceResult>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 17;
+    static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamReader<::FaceSearch::FaceResult, S>
+{
+    static void read(S* istr, ::FaceSearch::FaceResult& v)
+    {
+        istr->readAll(v.id, v.uuid, v.tableName, v.confidence, v.imgUrl, v.idcard, v.alarmRet);
+    }
+};
+
+}
+
+namespace FaceSearch
+{
+
+using FaceFeatureSearchServerPtr = ::std::shared_ptr<FaceFeatureSearchServer>;
+using FaceFeatureSearchServerPrxPtr = ::std::shared_ptr<FaceFeatureSearchServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::FaceSearch::FaceFeatureSearchServer*);
+
+}
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer;
+::Ice::Object* upCast(::FaceSearch::FaceFeatureSearchServer*);
+typedef ::IceInternal::Handle< ::FaceSearch::FaceFeatureSearchServer> FaceFeatureSearchServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::FaceSearch::FaceFeatureSearchServer> FaceFeatureSearchServerPrx;
+typedef FaceFeatureSearchServerPrx FaceFeatureSearchServerPrxPtr;
+void _icePatchObjectPtr(FaceFeatureSearchServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace FaceSearch
+{
+
+typedef ::std::vector< ::Ice::Byte> Data;
+
+struct FaceResult
+{
+    ::Ice::Long id;
+    ::std::string uuid;
+    ::std::string tableName;
+    ::Ice::Float confidence;
+    ::std::string imgUrl;
+    ::std::string idcard;
+    ::std::string alarmRet;
+};
+
+typedef ::std::vector< ::FaceSearch::FaceResult> FaceResults;
+
+}
+
+namespace FaceSearch
+{
+
+class Callback_FaceFeatureSearchServer_faceSearchMax_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceFeatureSearchServer_faceSearchMax_Base> Callback_FaceFeatureSearchServer_faceSearchMaxPtr;
+
+class Callback_FaceFeatureSearchServer_faceSearchTopN_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_FaceFeatureSearchServer_faceSearchTopN_Base> Callback_FaceFeatureSearchServer_faceSearchTopNPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Proxy<FaceFeatureSearchServer, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_faceSearchMax(_iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchMaxPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchMax(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, const ::Ice::Context& context, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchMaxPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchMax(iceP_feature, iceP_info, context, del, cookie);
+    }
+
+    ::FaceSearch::FaceResults end_faceSearchMax(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_faceSearchMax(const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_faceSearchTopN(_iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchTopNPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_faceSearchTopN(const ::FaceSearch::Data& iceP_feature, const ::std::string& iceP_info, ::Ice::Int iceP_topN, ::Ice::Float iceP_score, const ::Ice::Context& context, const ::FaceSearch::Callback_FaceFeatureSearchServer_faceSearchTopNPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_faceSearchTopN(iceP_feature, iceP_info, iceP_topN, iceP_score, context, del, cookie);
+    }
+
+    ::FaceSearch::FaceResults end_faceSearchTopN(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_faceSearchTopN(const ::FaceSearch::Data&, const ::std::string&, ::Ice::Int, ::Ice::Float, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace FaceSearch
+{
+
+class FaceFeatureSearchServer : public virtual ::Ice::Object
+{
+public:
+
+    typedef FaceFeatureSearchServerPrx ProxyType;
+    typedef FaceFeatureSearchServerPtr PointerType;
+
+    virtual ~FaceFeatureSearchServer();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_faceSearchMax(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::FaceSearch::FaceResults faceSearchTopN(const ::FaceSearch::Data&, const ::std::string&, ::Ice::Int, ::Ice::Float, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_faceSearchTopN(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const FaceFeatureSearchServer& lhs, const FaceFeatureSearchServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const FaceFeatureSearchServer& lhs, const FaceFeatureSearchServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::FaceSearch::FaceResult>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 17;
+    static const bool fixedLength = false;
+};
+
+template<typename S>
+struct StreamWriter< ::FaceSearch::FaceResult, S>
+{
+    static void write(S* ostr, const ::FaceSearch::FaceResult& v)
+    {
+        ostr->write(v.id);
+        ostr->write(v.uuid);
+        ostr->write(v.tableName);
+        ostr->write(v.confidence);
+        ostr->write(v.imgUrl);
+        ostr->write(v.idcard);
+        ostr->write(v.alarmRet);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::FaceSearch::FaceResult, S>
+{
+    static void read(S* istr, ::FaceSearch::FaceResult& v)
+    {
+        istr->read(v.id);
+        istr->read(v.uuid);
+        istr->read(v.tableName);
+        istr->read(v.confidence);
+        istr->read(v.imgUrl);
+        istr->read(v.idcard);
+        istr->read(v.alarmRet);
+    }
+};
+
+}
+
+namespace FaceSearch
+{
+
+template<class T>
+class CallbackNC_FaceFeatureSearchServer_faceSearchMax : public Callback_FaceFeatureSearchServer_faceSearchMax_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::FaceSearch::FaceResults&);
+
+    CallbackNC_FaceFeatureSearchServer_faceSearchMax(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+        ::FaceSearch::FaceResults ret;
+        try
+        {
+            ret = proxy->end_faceSearchMax(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceFeatureSearchServer_faceSearchMax<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceFeatureSearchServer_faceSearchMax<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceFeatureSearchServer_faceSearchMax : public Callback_FaceFeatureSearchServer_faceSearchMax_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::FaceSearch::FaceResults&, const CT&);
+
+    Callback_FaceFeatureSearchServer_faceSearchMax(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+        ::FaceSearch::FaceResults ret;
+        try
+        {
+            ret = proxy->end_faceSearchMax(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceFeatureSearchServer_faceSearchMax<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchMaxPtr
+newCallback_FaceFeatureSearchServer_faceSearchMax(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceFeatureSearchServer_faceSearchMax<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_FaceFeatureSearchServer_faceSearchTopN : public Callback_FaceFeatureSearchServer_faceSearchTopN_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::FaceSearch::FaceResults&);
+
+    CallbackNC_FaceFeatureSearchServer_faceSearchTopN(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+        ::FaceSearch::FaceResults ret;
+        try
+        {
+            ret = proxy->end_faceSearchTopN(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceFeatureSearchServer_faceSearchTopN<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_FaceFeatureSearchServer_faceSearchTopN<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_FaceFeatureSearchServer_faceSearchTopN : public Callback_FaceFeatureSearchServer_faceSearchTopN_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::FaceSearch::FaceResults&, const CT&);
+
+    Callback_FaceFeatureSearchServer_faceSearchTopN(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::FaceSearch::FaceFeatureSearchServerPrx proxy = ::FaceSearch::FaceFeatureSearchServerPrx::uncheckedCast(result->getProxy());
+        ::FaceSearch::FaceResults ret;
+        try
+        {
+            ret = proxy->end_faceSearchTopN(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceFeatureSearchServer_faceSearchTopN<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_FaceFeatureSearchServer_faceSearchTopNPtr
+newCallback_FaceFeatureSearchServer_faceSearchTopN(T* instance, void (T::*cb)(const ::FaceSearch::FaceResults&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_FaceFeatureSearchServer_faceSearchTopN<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice
new file mode 100644
index 0000000..13cc9c3
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/FaceSearchServer.ice
@@ -0,0 +1,24 @@
+module FaceSearch
+{
+	sequence<byte> Data;
+	
+	struct FaceResult
+	{
+		long id;
+		string uuid;
+		string tableName;
+		float confidence;
+		string imgUrl;
+		string idcard;
+		string alarmRet;
+	}
+
+	sequence<FaceResult> FaceResults;
+
+	interface FaceFeatureSearchServer
+	{
+		FaceResults faceSearchMax(Data feature,string info);
+		FaceResults faceSearchTopN(Data feature,string info, int topN,float score);
+	}
+
+}
diff --git a/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh b/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh
new file mode 100644
index 0000000..5e04a07
--- /dev/null
+++ b/QiaoJiaSystem/FaceSearchServer/rpc/gen.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bsk/development/c++/Qt/BasicPlatForm/libs/Ice-3.7.0/lib64/
+./../../../BasicPlatForm/libs/Ice-3.7.0/bin/slice2cpp FaceSearchServer.ice
diff --git a/QiaoJiaSystem/LocalDBTool/CMakeLists.txt b/QiaoJiaSystem/LocalDBTool/CMakeLists.txt
new file mode 100644
index 0000000..e2c9cef
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/CMakeLists.txt
@@ -0,0 +1,59 @@
+cmake_minimum_required(VERSION 3.5)
+project(LocalDBTool)
+
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+
+set(CMAKE_CXX_STANDARD 11)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+add_definitions(-DGLOG)
+
+set(CMAKE_BUILD_TYPE debug)
+
+include_directories(
+    ./
+
+    ../../BasicPlatForm
+
+    ../../BasicPlatForm/basic/util/app
+
+    ../../BasicPlatForm/basic/db/sqlite/
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+
+    ../../BasicPlatForm/libs/libuuid/include
+    ../../BasicPlatForm/libs/glog/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+)
+
+link_directories(
+    ../../BasicPlatForm/basic/db/sqlite/sqlite-v-3220000
+    ../../BasicPlatForm/libs/libuuid/lib
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+
+)
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    #    SqliteFaceEncap.cpp
+    #
+    #    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
+    #    ../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
+    #    GetUUId.cpp GetUUId.h
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    glog
+    pthread
+    Qt5Core
+    Qt5Sql
+    uuid
+    jsoncpp
+    sqlite3
+    dl
+    )
diff --git a/QiaoJiaSystem/LocalDBTool/GetUUId.cpp b/QiaoJiaSystem/LocalDBTool/GetUUId.cpp
new file mode 100644
index 0000000..c14a346
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/GetUUId.cpp
@@ -0,0 +1,6 @@
+//
+// Created by ps on 18-11-9.
+//
+
+#include "GetUUId.h"
+
diff --git a/QiaoJiaSystem/LocalDBTool/GetUUId.h b/QiaoJiaSystem/LocalDBTool/GetUUId.h
new file mode 100644
index 0000000..c840c59
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/GetUUId.h
@@ -0,0 +1,27 @@
+//
+// Created by ps on 18-11-9.
+//
+
+#ifndef DB_CON_GETUUID_H
+#define DB_CON_GETUUID_H
+
+
+#include <string>
+#include <uuid/uuid.h>
+
+class GetUUId {
+public:
+    static std::string getUUID() {
+        std::string str_uuid;
+        uuid_t t_uuid;
+        char str[36];
+        uuid_generate(t_uuid);
+        uuid_unparse(t_uuid, str);
+        str_uuid = str;
+        return str_uuid;
+    }
+
+};
+
+
+#endif //DB_CON_GETUUID_H
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
new file mode 100644
index 0000000..2ae3d1e
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
@@ -0,0 +1,406 @@
+//
+// Created by pans on 4/28/18.
+//
+#include <iostream>
+
+#include <QtSql/QSql>
+#include <QtSql/QSqlDatabase>
+#include <QtSql/QSqlError>
+#include <QtSql/QSqlQuery>
+#include <QtCore/QString>
+#include <QtCore/QDebug>
+#include <QtCore/QVariantList>
+#include <basic/debug/Debug.h>
+
+#include "SqliteFaceEncap.h"
+
+using namespace std;
+
+
+static QSqlDatabase g_db = QSqlDatabase::addDatabase("QSQLITE", "GBond");
+
+SqliteFaceEncap::SqliteFaceEncap(std::string t_string) : sqliteEncapsulation(t_string.c_str()) {
+    /* Open database */
+    int rc;
+    string sql;
+    bool initRet = false;
+    bool *test = &initRet;
+    //--------------init db-------------------
+    rc = sqlite3_open(t_string.c_str(), &db);
+    string initRetSql = "select count(*) from sqlite_master where type='table' and name = '" + g_tableName + "';";
+    rc = sqlite3_exec(db, initRetSql.c_str(), isExist, (void *) test, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg);
+        ERR(initRetSql);
+        sqlite3_free(zErrMsg);
+    } else {
+        if (!initRet) {
+            /* Create SQL statement */
+            sql = getInitDBSql();
+            /* Execute SQL statement */
+            rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+            if (rc != SQLITE_OK) {
+                SQLERR(zErrMsg);
+                ERR(sql);
+                sqlite3_free(zErrMsg);
+            } else {
+                fprintf(stdout, "sys_o_tables created successfully\n");
+            }
+            fprintf(stdout, "Operation done successfully\n");
+        }
+    }
+    //--------------init db-------------------
+    g_db.setDatabaseName(t_string.c_str());
+    g_db.open();
+
+}
+
+//#todo
+bool SqliteFaceEncap::createTable(std::string t_tableName, FieldValues &fieldValues) {
+    int rc;
+    //--------------create table-------------------
+    /* Create SQL statement */
+    string sql = getCreateFaceTableSql(t_tableName);
+
+    /* Execute SQL statement */
+//            cout << sql << endl;
+    rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg);
+        ERR(sql);
+        sqlite3_free(zErrMsg);
+        return false;
+    } else {
+        fprintf(stdout, "Table created successfully\n");
+//    INSERT INTO sys_o_tables(name,people_name,type,color,table_name,table_type,is_self,is_long_control)
+//    VALUES ('鍦ㄩ�冨簱','鍦ㄩ�冧汉鍛�','浜�','red','taseee',2,0,0);
+//        FieldValues fieldValues;
+//        fieldValues.insert(std::make_pair("name","鍦ㄩ�冨簱"));
+//        fieldValues.insert(std::make_pair("people_name","鍦ㄩ�冧汉鍛�"));
+//        fieldValues.insert(std::make_pair("type","浜�"));
+//        fieldValues.insert(std::make_pair("color","red"));
+//        fieldValues.insert(std::make_pair("table_name",t_tableName));
+//        fieldValues.insert(std::make_pair("table_type","2"));
+//        fieldValues.insert(std::make_pair("is_self","0"));
+//        fieldValues.insert(std::make_pair("is_long_control","0"));
+        string insertSql = getInsertSql("sys_o_tables", fieldValues);
+        /* Execute SQL statement */
+        rc = sqlite3_exec(db, insertSql.c_str(), NULL, 0, &zErrMsg);
+        if (rc != SQLITE_OK) {
+            SQLERR(zErrMsg);
+            ERR(insertSql);
+            sqlite3_free(zErrMsg);
+            //#todo throw exp
+//            throw exception("insert fail");
+        } else {
+            fprintf(stdout, " insert data successfully\n");
+        }
+    }
+    //--------------create table-------------------
+    return true;
+}
+
+
+bool SqliteFaceEncap::updateTable(std::string t_tableName, FieldValues &fieldValues) {
+    int rc;
+    //--------------create table-------------------
+    /* Create SQL statement */
+    //#todo
+    string sql = getUpdateFaceTableSql(t_tableName, fieldValues);
+
+    //#todo create facefea
+
+    /* Execute SQL statement */
+//            cout << sql << endl;
+    rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg);
+        ERR(sql);
+        sqlite3_free(zErrMsg);
+        return false;
+    } else {
+        fprintf(stdout, "updateTable successfully\n");
+    }
+    //--------------create table-------------------
+    return true;
+}
+
+//#todo backup data?
+bool SqliteFaceEncap::deleteTable(std::string t_tableName) {
+    string delTableSql = getDeleteFaceTableSql(t_tableName);
+    int rc = sqlite3_exec(db, delTableSql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg);
+        ERR(delTableSql);
+        sqlite3_free(zErrMsg);
+        return false;
+    } else {
+        fprintf(stdout, "Table deleted successfully\n");
+        FieldValues fieldValues;
+        fieldValues.insert(std::make_pair("tableName", t_tableName));
+        string deleteSql = getDeleteSql("sys_o_tables", fieldValues);
+//        cout << deleteSql << endl;
+        /* Execute SQL statement */
+        rc = sqlite3_exec(db, deleteSql.c_str(), NULL, 0, &zErrMsg);
+        if (rc != SQLITE_OK) {
+            SQLERR(zErrMsg);
+            ERR(deleteSql);
+            sqlite3_free(zErrMsg);
+            //#todo throw exp
+//            throw exception("insert fail");
+        } else {
+            fprintf(stdout, " delete data successfully\n");
+        }
+    }
+    return true;
+}
+
+
+bool SqliteFaceEncap::updateFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) {
+
+//    updateFaceData
+    bool ret = updateFaceData(t_tableName + "_fea", faceData);
+    updateFaceInfo(t_tableName, fieldValues);
+    return ret;
+}
+
+bool SqliteFaceEncap::updateFaceData(std::string t_tableName, AddFaceData &faceData) {
+
+    QByteArray qFea((char *) faceData.feature.data(), faceData.feature.size());
+    QSqlQuery query(g_db);
+    QString strSql = "update ";
+    strSql.append(t_tableName.c_str());
+    if (faceData.feature.size() > 0 || faceData.faceUrl.size() > 0) {
+        strSql.append(" set ");
+
+        if (faceData.feature.size() > 0) {
+            strSql.append(" feature =  :feature ,");
+        }
+        if (faceData.faceUrl.size() > 0) {
+            strSql.append(" faceUrl =  :faceUrl ,");
+        }
+
+        //#todo
+        strSql.append(" update_time = '2010-01-03 01:01:00' ");
+
+        strSql.append(" where del_flag = 0 and uuid = '" + QString::fromStdString(faceData.uuid) + "';");
+        query.prepare(strSql);
+//        query.addBindValue(QString::fromStdString(faceData.uuid));
+        if (faceData.feature.size() > 0) {
+            query.addBindValue(qFea);
+        }
+        if (faceData.faceUrl.size() > 0) {
+            query.addBindValue(QString::fromStdString(faceData.faceUrl));
+        }
+
+        if (!query.exec()) {
+            ERR("updateFaceData fail");
+            qDebug() << "updateFaceData" << __FILE__ << __LINE__ <<
+                     query.lastQuery() << "   " << query.lastError();
+        } else {
+            DBG("鏇存柊璁板綍鎴愬姛  " << faceData.uuid);
+            return true;
+        }
+    }
+
+    return false;
+}
+
+//#wait todo
+bool SqliteFaceEncap::updateFaceInfo(std::string t_tableName, FieldValues &fieldValues) {
+    std::string sql = getUpdateFaceTableSql(t_tableName, fieldValues);
+    int rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg)
+        sqlite3_free(zErrMsg);
+        return false;
+    } else {
+        fprintf(stdout, "addFaceInfo successfully\n");
+    }
+    return true;
+}//#todo
+
+std::string SqliteFaceEncap::addFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) {
+    std::string uuid = addFaceData(t_tableName + "_fea", faceData);
+    if (uuid.size() > 0) {
+        fieldValues["uuid"] = uuid;
+        addFaceInfo(t_tableName, fieldValues);
+    }
+    return uuid;
+}
+
+//INSERT INTO aaaFace (id, feature, del_flag ) VALUES (12,'sdfasdfasdfasdf',0);
+std::string SqliteFaceEncap::addFaceData(std::string t_tableName, AddFaceData &faceData) {
+
+    QByteArray qFea((char *) faceData.feature.data(), faceData.feature.size());
+    QSqlQuery query(g_db);
+    QString strSql = "INSERT INTO ";
+    strSql.append(t_tableName.c_str());
+
+    strSql.append("(uuid,feature,faceUrl) VALUES (:uuid,:feature,:faceUrl);");
+    query.prepare(strSql);
+    query.addBindValue(QString::fromStdString(faceData.uuid));
+    query.addBindValue(qFea);
+//    cout << faceData.faceUrl << endl;
+    query.addBindValue(QString::fromStdString(faceData.faceUrl));
+
+    if (!query.exec()) {
+        ERR("addFaceData fail");
+        qDebug() << "addFaceData" << __FILE__ << __LINE__ << query.lastError();
+        return "";
+    } else {
+        DBG("鎻掑叆璁板綍鎴愬姛  " << faceData.uuid);
+    }
+    return faceData.uuid;
+}
+
+bool SqliteFaceEncap::addFaceInfo(std::string t_tableName, FieldValues &fieldValues) {
+    std::string sql = getInsertSql(t_tableName, fieldValues);
+    int rc = sqlite3_exec(db, sql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg)
+        sqlite3_free(zErrMsg);
+        return false;
+    } else {
+        fprintf(stdout, "addFaceInfo successfully\n");
+    }
+    return true;
+}
+
+bool SqliteFaceEncap::deleteFace(std::string t_tableName, std::string uuid) {
+    deleteFaceData(t_tableName, uuid);
+    std::string t_tmp(t_tableName);
+    t_tmp.append("_fea");
+    bool ret = deleteFaceData(t_tmp.c_str(), uuid);
+
+    return ret;
+}
+
+//DELETE FROM aaaFace where 1=1  and id = 122
+//#todo update del_flag ?
+bool SqliteFaceEncap::deleteFaceData(std::string t_tableName, std::string uuid) {
+//    FieldValues fieldValues;
+//    fieldValues.insert(std::make_pair("uuid", uuid));
+//    string deleteSql = getDeleteSql(t_tableName, fieldValues);
+    string deleteSql = "update ";
+    deleteSql.append(t_tableName + " set del_flag = 1 ,update_time = '" + AppUtil::getTimeSecString() + "' ");
+    deleteSql.append(" where uuid = '" + uuid + "' ");
+//        cout << deleteSql << endl;
+    /* Execute SQL statement */
+    int rc = sqlite3_exec(db, deleteSql.c_str(), NULL, 0, &zErrMsg);
+    if (rc != SQLITE_OK) {
+        SQLERR(zErrMsg)
+        sqlite3_free(zErrMsg);
+        //#todo throw exp
+//            throw exception("insert fail");
+        return false;
+    } else {
+        fprintf(stdout, " delete data successfully\n");
+    }
+    return true;
+}
+
+std::vector<string> SqliteFaceEncap::getTableNameList(std::string type) {
+    std::vector<string> tables;
+    QString sql = QString::fromStdString(getTableListSqlWithType(type));
+    QSqlQuery query(g_db);
+//    qDebug() << strSql;
+    query.prepare(sql);
+    if (!query.exec()) {
+        qDebug() << "getTableNameList" << __FILE__ << __LINE__ << query.lastError();
+    } else {
+        while (query.next()) {
+            string tableName = query.value(0).toString().toStdString();
+            tables.push_back(tableName);
+        }
+    }
+    return tables;
+}
+
+FeatureDBWithUrlCache *SqliteFaceEncap::getFacesFromTable(std::string tableName) {
+    ClockTimer clk("loading " + tableName);
+    FeatureDBWithUrlCache &t_db = m_dbCache[tableName];
+    QString sql = QString::fromStdString(getFacesFromTableSql(tableName));
+    QSqlQuery query(g_db);
+    query.prepare(sql);
+    if (!query.exec()) {
+        qDebug() << "getFacesFromTable" << __FILE__ << __LINE__ << query.lastError();
+    } else {
+        while (query.next()) {
+            int del_flag = query.value(4).toInt();
+            std::string uuid = query.value(0).toString().toStdString();
+            if (del_flag) {
+                t_db.erase(uuid);
+            } else {
+                FaceFeatureWithUrl &t_feas = t_db[uuid];
+                t_feas.uuid = uuid;
+                QByteArray t_fea = query.value(1).toByteArray();
+//            std::cout << t_fea.size() << std::endl;
+                t_feas.faceFeature.resize(t_fea.size());
+                memcpy(t_feas.faceFeature.data(), t_fea.data(), t_fea.size());
+//            string create_time = query.value(2).toString().toStdString();
+                t_feas.faceurl = query.value(3).toString().toStdString();
+            }
+        }
+    }
+    return &t_db;
+}
+
+
+FeatureDBWithUrlCache SqliteFaceEncap::getFacesFromTableWhereDate(std::string tableName, std::string date) {
+    //#todo not used del_flag
+
+    return FeatureDBWithUrlCache();
+}
+
+TableInfos SqliteFaceEncap::getTableInfos() {
+    TableInfos tableInfos;
+    QString sql = QString::fromStdString(getTableInfosSql());
+    qDebug() << sql;
+    QSqlQuery query(g_db);
+    query.prepare(sql);
+    if (!query.exec()) {
+        qDebug() << "getTableInfos" << __FILE__ << __LINE__ << query.lastError() << "  " << query.lastQuery();
+    } else {
+        while (query.next()) {
+            TableInfo tableInfo;
+            tableInfo.uuid = query.value(0).toString().toStdString();
+            tableInfo.tableName = query.value(1).toString().toStdString();
+            tableInfo.tableType = query.value(2).toString().toStdString();
+            tableInfo.bwType = query.value(3).toString().toStdString();
+            tableInfo.startTime = query.value(4).toString().toStdString();
+            tableInfo.endTime = query.value(5).toString().toStdString();
+            tableInfos.push_back(tableInfo);
+        }
+    }
+    return tableInfos;
+}
+
+FaceInfosCache SqliteFaceEncap::getFaceInfoFromTable(std::string tableName) {
+    FaceInfosCache faceInfosCache;
+    QString sql = QString::fromStdString(getTableInfosSql(tableName));
+    std::lock_guard<std::mutex> dataGuard(dataMtx);
+    QSqlQuery query(g_db);
+    query.prepare(sql);
+    if (!query.exec()) {
+        qDebug() << "getTableNameList" << __FILE__ << __LINE__ << query.lastError();
+    } else {
+        while (query.next()) {
+            int del_falg = query.value(9).toInt();
+            if (del_falg == 1) {
+                continue;
+            }
+            FaceInfo tableInfo;
+            tableInfo.uuid = query.value(0).toString().toStdString();
+            tableInfo.personName = query.value(1).toString().toStdString();
+            tableInfo.age = query.value(2).toString().toStdString();
+            tableInfo.sex = query.value(3).toString().toStdString();
+            tableInfo.idCard = query.value(4).toString().toStdString();
+            tableInfo.phoneNum = query.value(5).toString().toStdString();
+            faceInfosCache.insert(std::make_pair(tableInfo.uuid, tableInfo));
+        }
+    }
+    return faceInfosCache;
+}
+
+
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h
new file mode 100644
index 0000000..7928ddf
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.h
@@ -0,0 +1,85 @@
+//
+// Created by pans on 4/28/18.
+//
+
+#ifndef TESTSQLITE_SQLITEFACEENCAP_H
+#define TESTSQLITE_SQLITEFACEENCAP_H
+
+#include "sqliteEncapsulation.h"
+
+#include "SqliteToolkit.hpp"
+
+/**
+ * #todo sqlite -> Qt.sqlite
+ */
+
+class SqliteFaceEncap : public sqliteEncapsulation {
+public:
+    explicit SqliteFaceEncap(std::string t_string);
+
+    bool createTable(std::string t_tableName, FieldValues &fieldValues);
+
+    bool updateTable(std::string t_tableName, FieldValues &fieldValues);
+
+    bool deleteTable(std::string t_tableName);
+
+    /***
+     * 鏍规嵁搴曞簱绫诲瀷鑾峰彇搴曞簱鍒楄〃
+     * @param type 搴曞簱绫诲瀷
+     * @return 搴曞簱鍒楄〃
+     */
+    std::vector<std::string> getTableNameList(std::string type);
+
+    TableInfos getTableInfos();
+
+public:
+
+    std::string addFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues);
+
+    bool updateFace(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues);
+
+    std::string addFaceData(std::string t_tableName, AddFaceData &faceData);
+
+    //#todo
+    bool addFaceInfo(std::string t_tableName, FieldValues &fieldValues);
+
+    bool updateFaceData(std::string t_tableName, AddFaceData &faceData);
+
+    bool updateFaceInfo(std::string t_tableName, FieldValues &fieldValues);
+
+    bool deleteFace(std::string t_tableName, std::string uuid);
+
+private:
+    bool deleteFaceData(std::string t_tableName, std::string uuid);
+
+public:
+    /***
+     * 鏍规嵁浜鸿劯琛ㄥ悕绉拌幏鍙栦汉鑴哥壒寰佸垪琛�
+     * @param tableName 琛ㄩ潰
+     * @return 浜鸿劯鐗瑰緛闆嗗悎
+     */
+    FeatureDBWithUrlCache *getFacesFromTable(std::string tableName);
+
+    FaceInfosCache getFaceInfoFromTable(std::string tableName);
+
+    FeatureDBWithUrlCache getFacesFromTableWhereDate(std::string tableName, std::string date);
+
+
+private:
+
+    void initDB(const char *t_string) const;
+
+private:
+    sqlite3 *db;
+    char *zErrMsg = 0;
+    std::mutex dataMtx;
+
+
+
+//    FeatureDBCache m_db;
+
+    std::map<std::string, FeatureDBWithUrlCache> m_dbCache;
+};
+
+
+#endif //TESTSQLITE_SQLITEFACEENCAP_H
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
new file mode 100644
index 0000000..06dfd59
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
@@ -0,0 +1,312 @@
+//
+// Created by pans on 4/28/18.
+//
+
+#ifndef TESTSQLITE_SQLITETOOLKIT_HPP
+#define TESTSQLITE_SQLITETOOLKIT_HPP
+
+#include <iostream>
+#include <map>
+#include <vector>
+#include <string>
+#include <cstring>
+#include <sstream>
+#include <basic/util/app/AppUtil.h>
+
+/**
+ * 瀛楁鐨勯泦鍚�
+ * @key FieldName
+ * @value Value
+ */
+typedef std::map<std::string, std::string> FieldValues;
+/***
+ * 浜鸿劯鐗瑰緛
+ */
+typedef std::vector<unsigned char> FaceFeature;
+
+struct AddFaceData {
+    std::string uuid;
+    FaceFeature feature;
+    std::string faceUrl;
+};
+
+struct FaceInfo {
+    std::string uuid;
+    std::string personName;
+    std::string age;
+    std::string sex;
+    std::string idCard;
+    std::string phoneNum;
+};
+typedef std::vector<FaceInfo> FaceInfos;
+typedef std::map<std::string, FaceInfo> FaceInfosCache;
+
+struct TableInfo {
+    std::string uuid;
+    std::string tableName;
+    std::string tableType;
+    std::string bwType;
+    std::string startTime;
+    std::string endTime;
+    std::string createBy;
+};
+typedef std::vector<TableInfo> TableInfos;
+typedef std::map<std::string, TableInfo> TableInfosCache;
+
+//typedef std::vector<FaceFeature> FaceFeatures;
+
+//typedef std::map<std::string, FaceFeatures> FeatureDBCache;
+
+struct FaceFeatureWithUrl {
+    std::string uuid;
+    std::string faceurl;
+    FaceFeature faceFeature;
+};
+
+typedef std::map<std::string, FaceFeatureWithUrl> FeatureDBWithUrlCache;
+
+namespace {
+
+#define INITCOPY(_DEST, _SRC) _DEST.resize(_SRC.size());memcpy(_DEST.data(),_SRC.data(), _SRC.size());
+#define COPY(NAME1, NAME2) memcpy(&NAME1.data(), &NAME2.data(), NAME2.size);
+#define SQLERR(message) fprintf(stderr, "%s->%d->  SQLite error: %s\n",__FILE__,__LINE__, message);
+
+
+    //#todo 鏁版嵁搴搘enjian鍚嶇О
+    static std::string file_dbName = "TestFaceDB.db";
+    //#todo 鏁版嵁搴撳悕绉�
+    static std::string g_dbName = "main";
+    //#todo 绠$悊琛ㄧ殑琛ㄥ悕
+    static std::string g_tableName = "sys_o_tables";
+
+    //
+    std::string getFacesFromTableSql(std::string tableName) {
+        std::string sql =
+            "select uuid,feature,create_time,faceUrl,del_flag from " + tableName +
+            "_fea where feature is not null ";
+        return sql;
+    }
+
+    std::string getTableListSqlWithType(std::string type) {
+        std::string sql = "select tableName,del_flag from " + g_tableName + " where del_flag = 0";
+        if (type.size() > 0) {
+            sql.append(" and tableType = '" + type + "'");
+        }
+        return sql;
+    }
+
+    std::string getTableInfosSql(std::string tableName) {
+        std::string sql = "select * from " + tableName;// + " where del_flag = 0";
+        return sql;
+    }
+
+
+    std::string getTableInfosSql() {
+        //uuid,tableName,tableDesc,tableType,bwType,startTime,endTime
+        std::string sql = "select uuid,tableName,tableType,bwType,startTime,endTime from " + g_tableName +
+                          " where del_flag = 0";
+        return sql;
+    }
+
+    /**
+     * not used have bug
+     * @param tableName
+     * @param id
+     * @param feature
+     * @return
+     */
+    char *getAddFaceDataSql(std::string tableName, int id, FaceFeature &feature) {
+        if (tableName.size() == 0 || feature.size() == 0) {
+            //#todo errInfo
+            return "tableName or FaceFeature is NULL";
+        }
+        std::string str_fea;
+        str_fea.assign(feature.begin(), feature.end());
+
+        std::stringstream sql;//= ;
+        sql << "INSERT INTO " << tableName << " (";
+        //std::string sqlTemp = sql;
+        std::string sql2 = ") VALUES(\"";
+        if (id >= 0) {
+            sql << "id,";
+            sql2.append(std::to_string(id) + "\",\"");
+        }
+        sql << "feature " << sql2 << str_fea << "\")";
+
+        //sql1 delete ,
+        //sql2 delete 2 ,'  add )
+        return const_cast<char *>(str_fea.c_str());
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     * @param tableName 琛ㄥ悕
+     * @param fieldValues 鍒犻櫎鐨勬潯浠剁粍鍚�
+     * @return
+     */
+    std::string getDeleteSql(std::string tableName, FieldValues &fieldValues) {
+        if (tableName.size() == 0 || fieldValues.size() == 0) {
+            //#todo errInfo
+            return "tableName or fieldValues is NULL";
+        }
+        std::string sql = "DELETE from " + tableName + " where 1 = 1 ";
+        for (auto item : fieldValues) {
+            if (item.first.size() != 0) {
+                sql.append("and " + item.first + " = '" + item.second + "' ");
+            }
+        }
+        return sql;
+    }
+
+    /**
+     * 娣诲姞鏁版嵁 || 鍒涘缓浜鸿劯琛ㄤ箣鍚庯紝灏嗚璁板綍鎻掑叆绠$悊琛�
+     * @param tableName 琛ㄥ悕
+     * @param fieldValues 灏嗚鎻掑叆瀛楁鐨勯泦鍚�
+     * @return
+     */
+    std::string getInsertSql(std::string tableName, FieldValues &fieldValues) {
+        if (tableName.size() == 0 || fieldValues.size() == 0) {
+            //#todo errInfo
+            return "tableName or fieldValues is NULL";
+        }
+        std::string sql = "INSERT INTO " + tableName + " (";
+        std::string sqlTemp = sql;
+        std::string sql2 = ") VALUES('";
+        for (auto item : fieldValues) {
+            if (item.first.size() != 0) {
+                sql.append(item.first + ",");
+                sql2.append(item.second + "','");
+            }
+        }
+        //sql1 delete ,
+        sql = sql.substr(0, sql.length() - 1);
+        //sql2 delete 2 ,'  add )
+        sql2 = sql2.substr(0, sql2.length() - 2);
+        sql2.append(" )");
+        sql.append(sql2);
+        return sql;
+    }
+
+    /**
+     * 鍒涘缓绠$悊琛ㄧ殑sql璇彞
+     *
+     * @return sql
+     */
+    std::string getInitDBSql() {
+        std::string sql = "CREATE TABLE \"main\".\"sys_o_tables\" (";
+        sql.append(" uuid        varchar(255) PRIMARY KEY, ");
+//        sql.append(" ClusterName varchar(255) DEFAULT NULL,");//鏈湴搴撲笉闇�瑕�
+        sql.append(" tableName   varchar(255) UNIQUE,");
+        sql.append(" tableDesc   varchar(255) DEFAULT NULL,");
+        sql.append(" tableType   varchar(255) DEFAULT NULL,");
+        sql.append(" bwType      varchar(255) DEFAULT NULL,");
+        sql.append(" startTime   varchar(255) DEFAULT NULL,");
+        sql.append(" endTime     varchar(255) DEFAULT NULL,");
+        sql.append(" create_time BLOB default (datetime('now', 'localtime')),");
+        sql.append(" update_time varchar(255) DEFAULT NULL,");
+        sql.append(" create_by   varchar(255) DEFAULT NULL,");
+        sql.append(" del_flag    varchar(255) DEFAULT 0");
+        sql.append(");");
+        return sql;
+    }
+
+
+    /**
+     * 鍒涘缓浜鸿劯琛ㄧ殑sql璇彞
+     * @param tableName 鎯宠鍒涘缓鐨勮〃鍚�
+     * @return
+     */
+    std::string getCreateFaceTableSql(std::string tableName) {
+        if (tableName.size() == 0) {
+            //#todo errInfo
+            return "tableName is NULL";
+        }
+        // 浜哄憳淇℃伅琛�
+        std::string sql = "CREATE TABLE " + g_dbName + ".";
+        sql.append(tableName);
+        sql.append(" (  uuid        varchar(255) PRIMARY KEY,");
+        sql.append("personName  varchar(255) DEFAULT NULL,");
+        sql.append("age         varchar(255) DEFAULT NULL,");
+        sql.append("sex         varchar(255) DEFAULT NULL,");
+        sql.append("idCard      varchar(255) DEFAULT NULL,");
+        sql.append("phoneNum    varchar(255) DEFAULT NULL,");
+        sql.append("create_time BLOB         DEFAULT (datetime('now', 'localtime')),");
+        sql.append("update_time DATETIME     DEFAULT NULL,");
+        sql.append("create_by   varchar(255) DEFAULT NULL,");
+        sql.append("del_flag    INTEGER      DEFAULT 0");
+        sql.append(");");
+        // 浜鸿劯鐗瑰緛琛�
+        sql.append("CREATE TABLE " + g_dbName + ".");
+        sql.append(tableName + "_fea");
+        sql.append(" (  uuid        varchar(255) PRIMARY KEY,");
+        sql.append("    feature     BLOB NOT NULL,");
+        sql.append("    faceUrl     BLOB NOT NULL,");
+        sql.append("    create_time  BLOB default (datetime('now', 'localtime')),");
+        sql.append("    update_time varchar(255) DEFAULT NULL,");
+        sql.append("    create_by   varchar(255) DEFAULT NULL,");
+        sql.append("    del_flag     INTEGER DEFAULT 0");
+        sql.append(");");
+        return sql;
+    }
+
+
+    std::string getUpdateFaceTableSql(std::string tableName, FieldValues &fieldValues) {
+        if (tableName.size() == 0) {
+            //#todo errInfo
+            return "tableName is NULL";
+        }
+        std::string uuid = fieldValues["uuid"];
+        if (uuid.size() <= 0) {
+            SQLERR("uuid size is error");
+            return "";
+        }
+        fieldValues.erase("uuid");
+        if (fieldValues.size() <= 0) {
+            SQLERR("fieldValues size is error");
+            return "";
+        }
+        std::string sql = "update ";
+        sql.append(tableName + " set ");
+        for (auto &item :fieldValues) {
+            sql.append(item.first + " =  '" + item.second + "',");
+        }
+        sql.append(" update_time ='" + AppUtil::getTimeSecString() + "'");
+        sql.append(" where uuid ='" + uuid + "'");
+        return sql;
+    }
+
+
+    //#TODO 浜鸿劯琛ㄩ渶瑕佸垹闄や袱涓�
+    std::string getDeleteFaceTableSql(std::string tableName) {
+        if (tableName.size() == 0) {
+            //#todo errInfo
+            return "tableName is NULL";
+        }
+        std::string sql = "DROP TABLE " + g_dbName + "." + tableName + ";";
+        sql.append("DROP TABLE " + g_dbName + "." + tableName + "_fea;");
+        return sql;
+    }
+
+    /**
+     * 鏍规嵁琛ㄥ悕鍒ゆ柇鏁版嵁琛ㄦ槸鍚﹀瓨鍦�
+     * @param existRet true is exist.
+     * @param nCount 瀛楁鏁伴噺
+     * @param pValue 瀛楁鍊兼暟缁�
+     * @param azColName 瀛楁鍚嶇О鏁扮粍
+     * @return
+     */
+    static int isExist(void *existRet, int nCount, char **pValue, char **azColName) {
+        bool *testRet = (bool *) existRet;
+        int num = atoi(pValue[0]);
+        if (num > 0) {
+            *testRet = true;
+        } else {
+            *testRet = false;
+        }
+        return 0;
+    }
+
+}
+
+
+#endif //TESTSQLITE_SQLITETOOLKIT_HPP
diff --git a/QiaoJiaSystem/LocalDBTool/main.cpp b/QiaoJiaSystem/LocalDBTool/main.cpp
new file mode 100644
index 0000000..8f3d590
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/main.cpp
@@ -0,0 +1,273 @@
+//
+// Created by pans on 5/2/18.
+//
+#include <iostream>
+#include <thread>
+
+//#include <basic/util/app/AppPreference.hpp>
+#include <zconf.h>
+#include <basic/debug/Debug.h>
+//#include <QtCore/QString>
+//#include "SqliteFaceEncap.h"
+//#include "SqliteToolkit.hpp"
+#include "GetUUId.h"
+
+using namespace std;
+
+/***
+ * 鍒濆鍖栧垱寤鸿〃 :
+ * 1.搴曞簱绠$悊琛�
+ * uuid, tableName, tableDesc, tableType, bwType, create_time, update_time, create_by, del_flag, startTime, endTime
+ * sql ok
+ *
+ * 2.涓枃鍜寀uid瀵瑰簲琛�
+ * uuid, name, tableName(uuid)
+ * sql ok code not ok
+ *
+ *
+ * 搴曞簱鐗瑰緛琛� id鏄痷uid
+ * uuid, feature, img_url, create_time, update_time, create_by
+ * sql ok
+ *
+ * 浜哄憳淇℃伅琛�
+ * uuid, personName, age, sex, idCard, phoneNum,  create_time, update_time, create_by
+ * sql ok
+ *
+ * car #todo
+ *
+ *
+ *
+ */
+
+/***
+
+  drop table "main"."sys_o_tables";
+  CREATE TABLE "main"."sys_o_tables" (
+  uuid        varchar(255) PRIMARY KEY,
+  ClusterName varchar(255) DEFAULT NULL,
+  tableName   varchar(255) DEFAULT NULL,
+  tableDesc   varchar(255) DEFAULT NULL,
+  tableType   varchar(255) DEFAULT NULL,
+  bwType      varchar(255) DEFAULT NULL,
+  startTime   varchar(255) DEFAULT NULL,
+  endTime     varchar(255) DEFAULT NULL,
+  create_time BLOB         DEFAULT (datetime('now', 'localtime')),
+  update_time varchar(255) DEFAULT NULL,
+  create_by   varchar(255) DEFAULT NULL,
+  del_flag    varchar(255) DEFAULT 0
+);
+
+drop table "main"."TN2TID";
+CREATE TABLE "main"."TN2TID" (
+  uuid        varchar(255) PRIMARY KEY,
+  TableName   varchar(255) NOT NULL,
+  tableID     varchar(255) NOT NULL,
+  create_time BLOB         DEFAULT (datetime('now', 'localtime')),
+  update_time varchar(255) DEFAULT NULL,
+  del_flag    INTEGER      DEFAULT 0
+);
+
+drop table "main"."person_info";
+CREATE TABLE "main"."person_info" (
+  uuid        varchar(255) PRIMARY KEY,
+  personName  varchar(255) DEFAULT NULL,
+  age         varchar(255) DEFAULT NULL,
+  sex         varchar(255) DEFAULT NULL,
+  idCard      varchar(255) DEFAULT NULL,
+  phoneNum    varchar(255) DEFAULT NULL,
+  create_time BLOB         DEFAULT (datetime('now', 'localtime')),
+  update_time DATETIME     DEFAULT NULL,
+  create_by   varchar(255) DEFAULT NULL,
+  del_flag    INTEGER      DEFAULT 0
+);
+
+drop table "main"."person_info_feature";
+CREATE TABLE "main"."person_info_feature" (
+  uuid        varchar(255) PRIMARY KEY,
+  feature     BLOB NOT NULL,
+  faceUrl     BLOB NOT NULL,
+  create_time BLOB         DEFAULT (datetime('now', 'localtime')),
+  update_time varchar(255) DEFAULT NULL,
+  create_by   varchar(255) DEFAULT NULL,
+  del_flag    INTEGER      DEFAULT 0
+);
+
+ */
+
+
+//struct FaceFeaWithScore {
+//    int left;
+//    int top;
+//    int width;
+//    int height;
+//    std::vector<unsigned char> feature;
+//    float score;
+//};
+//typedef std::vector<FaceFeaWithScore> Features;
+
+
+/***
+ *
+ * @param argc
+ * @param argv
+ * @return
+ */
+/*
+int main2(int argc, char **argv) {
+
+   SAVE_APP_ARGS;
+
+//    cout << getInitDBSql();
+
+   SqliteFaceEncap sqliteFaceEncap("testRR");
+
+   {
+       //#鍒犻櫎搴曞簱
+//        sqliteFaceEncap.deleteTable("test1");
+   }
+
+   {
+       FieldValues fieldValues;
+       fieldValues.insert(std::make_pair("uuid", GetUUId::getUUID()));
+       fieldValues.insert(std::make_pair("tableName", "test2"));
+       fieldValues.insert(std::make_pair("tableDesc", "ceshi"));
+       fieldValues.insert(std::make_pair("tableType", "person"));
+       fieldValues.insert(std::make_pair("bwType", "1"));
+       fieldValues.insert(std::make_pair("startTime", "2018-01-01 02:02:02"));
+       fieldValues.insert(std::make_pair("endTime", "2018-12-01 02:02:02"));
+       fieldValues.insert(std::make_pair("create_by", "who"));
+
+       //#鍒涘缓搴曞簱
+//        sqliteFaceEncap.createTable("test2", fieldValues);
+   }
+
+   {
+       //#鏌ヨ浜鸿劯搴曞簱鍒楄〃
+       auto res = sqliteFaceEncap.getTableNameList("person");
+       for (auto &item : res) {
+           std::cout << "tableName is  " << item << std::endl;
+       }
+   }
+
+   {
+       //#鏇存柊搴曞簱绠$悊琛�
+       FieldValues fieldValues;
+       fieldValues.insert(std::make_pair("uuid", "c4e27077-59a3-458e-aedf-4b5d4def649b"));
+       fieldValues.insert(std::make_pair("tableName", "test4"));
+       fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
+       fieldValues.insert(std::make_pair("tableType", "car"));
+       fieldValues.insert(std::make_pair("bwType", "0"));
+       fieldValues.insert(std::make_pair("startTime", "2018-01-01 02:02:02"));
+       fieldValues.insert(std::make_pair("endTime", "2018-12-01 02:02:02"));
+       fieldValues.insert(std::make_pair("create_by", "who"));
+//        sqliteFaceEncap.updateTable("sys_o_tables", fieldValues);
+   }
+
+   {
+       Features faceResults;
+       for (int i = 0; i < 10; i++) {
+           FaceFeaWithScore faceFeaWithScore;
+           faceFeaWithScore.feature.resize(100);
+           memset(faceFeaWithScore.feature.data(), 1, faceFeaWithScore.feature.size());
+
+           faceResults.push_back(faceFeaWithScore);
+       }
+       //#娣诲姞浜鸿劯鏁版嵁 TODO test
+       //#涓ゅ紶琛�
+       int lpp = 0;
+       FieldValues fieldValues;
+       for (auto item : faceResults) {
+           AddFaceData addFaceData;
+           addFaceData.feature.resize(item.feature.size());
+           memcpy(addFaceData.feature.data(), item.feature.data(), item.feature.size());
+           addFaceData.uuid = GetUUId::getUUID();
+           addFaceData.faceUrl = "null";
+           auto t_id = sqliteFaceEncap.addFace("test1", addFaceData, fieldValues);
+       }
+   }
+
+   {
+       //#鏇存柊浜鸿劯鏁版嵁
+       //#todo 涓ゅ紶琛�
+       FieldValues fieldValues;
+       FaceFeaWithScore faceFeaWithScore;
+       faceFeaWithScore.feature.resize(100);
+       memset(faceFeaWithScore.feature.data(), 1, faceFeaWithScore.feature.size());
+
+
+       AddFaceData addFaceData;
+       addFaceData.feature.resize(faceFeaWithScore.feature.size());
+       memcpy(addFaceData.feature.data(), faceFeaWithScore.feature.data(), faceFeaWithScore.feature.size());
+//        addFaceData.uuid = "ac8b30cf-8476-4dcf-a476-96907bb9a01f";
+       addFaceData.faceUrl = "ttttttttt";
+//        auto ret = sqliteFaceEncap.updateFace("test1", addFaceData, fieldValues);
+//        if (ret) {
+//            DBG("true");
+//        } else {
+//            DBG("false");
+//        }
+   }
+
+   {
+       //#鍒犻櫎浜鸿劯鏁版嵁
+       sqliteFaceEncap.deleteFace("test1", "e04ad3bc-5126-4fe5-b01f-f461dd30e104");
+   }
+
+
+   {
+       //#鏌ヨ浜鸿劯鏁版嵁
+       auto res = sqliteFaceEncap.getFacesFromTable("test1");
+       auto &res_t = *res;
+       for (auto &item : res_t) {
+//            std::cout << item.first << std::endl;
+           std::cout << item.second.uuid << std::endl;
+           std::cout << item.second.faceurl << std::endl;
+           std::cout << item.second.faceFeature.size() << std::endl;
+       }
+   }
+
+   {
+       auto res = sqliteFaceEncap.getTableInfos();
+       for (auto &item : res) {
+           std::cout << item.uuid << std::endl;
+       }
+   }
+
+   return 0;
+}
+*/
+//#define STRIP_LOG 0
+#include <AppConfig.h>
+
+int main(int argc, char **argv) {
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+    std::string m = "test";
+    DBG(m << " DBG");
+    DBG(m << " DBG");
+    LOG(INFO) << "hello glog";     // 鎵撳嵃log锛氣�渉ello glog.  绫讳技浜嶤++ stream銆�
+    SYSLOG(INFO) << "test log";
+//    DLOG(INFO, m);
+//    RAW_DLOG(WARNING, "test");
+
+
+    CHKMSG(1, 1, m << " CHKMSG");
+    CHKMSG(1, 2, m << " CHKMSG");
+    MSG(m << " MSG");
+
+    CHKERR(1, 1, m << " CHKERR");
+    CHKERR(1, 2, m << " CHKERR");
+
+    ERR(m << " ERR");
+
+    CHKINFO(1, 1, m << " CHKINFO");
+    CHKINFO(1, 2, m << " CHKINFO");
+    INFO(m << " INFO");
+
+    CHKDBG(1, 1, m << " CHKDBG");
+    CHKDBG(1, 2, m << " CHKDBG");
+
+    DBG(m << " DBG");
+
+    getchar();
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/LocalDBTool/new_file b/QiaoJiaSystem/LocalDBTool/new_file
new file mode 100644
index 0000000..ca06b05
--- /dev/null
+++ b/QiaoJiaSystem/LocalDBTool/new_file
Binary files differ
diff --git a/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp b/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp
new file mode 100644
index 0000000..de80896
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/AppPaController.cpp
@@ -0,0 +1,363 @@
+#include "AppPaController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+#include <algorithm>
+#include <basic/util/app/AppConfig.h>
+#include <QtCore/QDateTime>
+#include <QtCore/QtGlobal>
+#include <net_config.h>
+
+
+AppPaController:: AppPaController(int index, const ControllerConfig& cfg ):
+ videoCaptureElement(cfg.camInfo.strRtsp, 25, 3000, appPref.getLongData("gpu.index"), true),
+ m_index(index),
+ fdfsClient(nullptr),
+ yoloRpcElement(to_string(index) + "yoloRpc"),
+ triggerElement(cfg.paAlarmInfo.nTriggerDelay, cfg.paAlarmInfo.nAlarmDelay),
+ recordVideoElement(index, cfg.camInfo.strRtsp),
+ m_cfg(cfg)
+ {
+
+      init();
+ }
+
+AppPaController::~AppPaController() {
+
+}
+
+
+
+bool AppPaController::getRunning() {
+    return videoCaptureElement.isRunning();
+}
+
+
+
+void AppPaController::init() {
+
+    unsigned char ip_old[15] = {0};
+    std::string net_ifname = appConfig.getStringProperty("netIfName");
+//    if (!(GetIpAddress(net_ifname.c_str(), ip_old))) {
+//        ERR("couldn't get ip");
+//    }
+
+    bUp = false;
+
+    yoloRpcElement.setProperty("str_addr", m_cfg.camInfo.strAdrr);
+    yoloRpcElement.setProperty("local_ip", std::string((char *) ip_old));
+   // yoloRpcElement.setMask(QString::fromStdString(m_cfg.paAlarmInfo.strMaskPath));
+    yoloRpcElement.SetRuleCfg(&m_cfg);
+    yoloRpcElement.setProperty("dev_id", m_cfg.camInfo.strCamId);
+    m_json_Record["rtsp"] = m_cfg.camInfo.strRtsp;
+
+
+
+    videoCaptureElement.registerConnector([&] {
+
+            auto i_t = videoCaptureElement.getChangeLevel();
+            if (i_t > 80)
+            {
+//                cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << i_t << endl;
+                triggerElement.setState(true);
+            }
+            else if (i_t < 50)
+            {
+//                cout << __FUNCTION__ << " -> " << __LINE__ << " -> " << i_t << endl;
+                triggerElement.setState(false);
+            }
+
+            triggerElement.triggerOnce();
+
+            int test_sub = triggerElement.getState() ? 1 : 5;//
+
+            videoCaptureElement.setOutPutInterval(test_sub);
+
+            if (triggerElement.getTriggerState()) {
+                if (!bUp) {
+
+                    string t_FilePath = "";
+                    m_json_Record["path"] = t_FilePath;
+                    std::string t_recJsonStr = m_fastWriter.write(m_json_Record);
+                    t_FilePath = recordVideoElement.startRecord(t_recJsonStr);
+                    INFO(m_cfg.camInfo.strCamId << "file keey is ::" << t_FilePath);
+                    yoloRpcElement.setProperty("path", t_FilePath);
+                    bUp = true;
+
+                    std::thread timerFunc([&] {
+                        //褰曞埗鏃堕棿瓒呰繃鐢ㄦ埛璁惧畾鐨勬椂闂村悗鎴柇锛岄噸鏂板綍鍒�
+                        long startTime = AppUtil::getCurrentMs();
+                        int cut_max_duration = appPref.getIntData("n_cut_max_duration");
+                        long triggerTime = cut_max_duration == -1 ? 2 * 60 * 1000 : cut_max_duration * 1000;
+                        while (bUp) {
+                            if (AppUtil::getCurrentMs() - startTime > triggerTime) {
+//                                if (bUp) {
+                                bUp = false;
+//                                }
+                                break;
+                            } else {
+                                usleep(5000);
+                            }
+                        }
+                    });
+                    timerFunc.detach();
+                } else {
+                    recordVideoElement.feedDog();
+                }
+            } else {
+                if (bUp) {
+                    bUp = false;
+                    //DBG(m_camId << "endRecord");
+                    recordVideoElement.endRecord();
+                }
+//                return;
+            }
+
+
+
+        std::string strNewTime;
+        if (m_cfg.camInfo.strCamId.size() > 0) {
+            strNewTime = AppUtil::getTimeSecString();
+        } else {
+            //#todo 璁$畻褰撳墠鏂囦欢鏃堕棿
+            //#TODO 杈撳嚭闂撮殧鐢ㄤ簬璁$畻鏃堕棿
+            // 鐜颁负姣忎笁甯ц绠椾竴娆★紝瀵艰嚧璁$畻鐨勬椂闂撮暱浜庢枃浠剁殑瀹為檯鏃堕棿
+            auto opit = 25;// videoCaptureElement.getOutPutInterval();
+            auto opidx = videoCaptureElement.getoutPutIndex();
+            int second = opidx / opit;
+            qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000;
+            QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+            strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+
+        }
+//        DBG(strNewTime);
+
+
+
+        if (!yoloRpcElement.isBusy()) {
+//            yoloRpcElement.setProperty("uuid", uuid);
+            //#todo
+            yoloRpcElement.setProperty("time", strNewTime);
+            yoloRpcElement.setImage(videoCaptureElement.getImage());
+            yoloRpcElement.submit();
+        }
+
+        if (!imageDrawElement.isBusy()) {
+            imageDrawElement.setImage(videoCaptureElement.getImage());
+            imageDrawElement.submit();
+        }
+
+
+    });
+
+
+    triggerElement.registerConnector([&] {
+
+//        std::string strImgPath,strVideoPath,strCurTime;
+//        makePath(strImgPath,strVideoPath,strCurTime);
+        if(yoloRpcElement.getRealNum()<m_cfg.paAlarmInfo.nAssembleCount)
+            return;
+        switch (triggerElement.getTriggerType()) {
+        case UP:
+            INFO("UP:sendVideoAlarm(true) num="<<yoloRpcElement.getRealNum());
+          //  this->sendVideoAlarm(true);
+            //this->openSoundAlarm();
+            //if(isSaveResult()) alarmResultSaveToDB(strImgPath,strVideoPath,strCurTime);
+            //if(isSaveVideo())  recordVideoElement.startRecord()strVideoPath.c_str());
+            break;
+        case DOWN:
+
+            INFO("UP:sendVideoAlarm(false) num="<<yoloRpcElement.getRealNum());
+           // this->sendVideoAlarm(false);
+           // this->closeSoundAlarm();
+            //if(isSaveVideo()) recordVideoElement.endRecord();
+            break;
+        default:
+            break;
+        };
+//        if(isSaveImage() &&triggerElement.getTriggerType()==UP)
+//        {
+
+//             std::vector<cv::Rect> rects ;
+//             std::vector<ScoredRect> scoredRects=yoloRpcElement.getLastScoreRects();
+//             for(auto scoreRect:scoredRects)
+//             {
+//                 rects.push_back(scoreRect.rect);
+//             }
+
+//            cv::Mat img = this->videoCaptureElement.getImage();
+//            AppPaController::saveRectsImage(rects,img,strImgPath.c_str());
+//        }
+
+    });
+    yoloRpcElement.registerConnector([&] {
+        imageDrawElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+        triggerElement.setState(yoloRpcElement.getRealNum()>=m_cfg.paAlarmInfo.nAssembleCount);
+
+    });
+
+
+    imageDrawElement.registerConnector([&] {
+        if (appPref.getIntData("show.image") == 1) {
+            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+        }
+    });
+
+    registerElement(videoCaptureElement);
+
+    registerElement(yoloRpcElement);
+
+
+    registerElement(imageDrawElement);
+
+    registerElement(triggerElement);
+
+    videoCaptureElement.setOutPutInterval(3);
+
+}
+
+
+
+void AppPaController::setfdfsClient(FastFdsWithLock *p_fdfsClient) {
+    fdfsClient = p_fdfsClient;
+    yoloRpcElement.setFdfs(fdfsClient);
+}
+
+std::string AppPaController::getRtmp() {
+    std::string ret = "";// = videoPublishElement.getPath();
+    size_t pos = ret.find(".flv");
+    ret = ret.substr(0, pos);
+    INFO(ret);
+    return ret;
+}
+//void AppPaController::sendVideoAlarm(bool value)
+//{
+//    ::Alarm::AlarmInfo alarmInfo;
+//    alarmInfo.bAlarm = value;
+//    alarmInfo.strRtsp = m_cfg.camInfo.strRtsp;
+//    alarmInfo.wallNo = m_cfg.paAlarmInfo.nWallNum;
+//    alarmInfo.subWallNo = m_cfg.paAlarmInfo.nWallSubNum;
+//    alarmInfo.windowNo = m_cfg.paAlarmInfo.nWindowNum;
+//    try {
+//        auto server = alarmRpc.getServer();
+//        if(server){
+//            server->AlarmSingle(alarmInfo);
+//        }else{
+//            ERR("sendVideoAlarm falid; server is null");
+//        }
+//    } catch (std::exception& e) {
+//        ERR(e.what());
+//    }
+//}
+
+void AppPaController::openSoundAlarm()
+{
+    try {
+//        auto server = alarmRpc.getServer();
+//        if(server){
+//            server->AlarmSound(appPref.getStringData("pa.identity"),true);
+//        }else{
+//            ERR("openSoundAlarm falid; server is null");
+//        }
+    } catch (std::exception& e) {
+        ERR(e.what());
+    }
+}
+
+void AppPaController::closeSoundAlarm()
+{
+    try {
+//        auto server = alarmRpc.getServer();
+//        if(server){
+//            server->AlarmSound(appPref.getStringData("pa.identity"),false);
+//        }else{
+//            ERR("closeSoundAlarm falid; server is null");
+//        }
+    } catch (std::exception& e) {
+        ERR(e.what());
+    }
+}
+
+void AppPaController::playSound()
+{
+    try {
+//        auto server = soundRpc.getServer();
+//        if(server){
+
+//            server->SoundPlay(m_index,soundInfos);
+//        }else{
+//            ERR("playSound falid; server is null");
+//        }
+    } catch (std::exception& e) {
+        ERR(e.what());
+    }
+}
+
+void AppPaController::stopSound()
+{
+    try {
+//        auto server = soundRpc.getServer();
+//        if(server){
+//            server->SoundStop(m_index);
+//        }else{
+//            ERR("stopSound falid; server is null");
+//        }
+    } catch (std::exception& e) {
+        ERR(e.what());
+    }
+}
+
+
+
+
+//void AppPaController::alarmResultSaveToDB(std::string& imgPath,std::string& videoPath,std::string& curTime)
+//{
+//    try {
+//        auto server = m_SaveAlarmRpc.getServer();
+//        if(server){
+//            ::SaveModule::AlarmInfo iceAlarmInfo;
+//            iceAlarmInfo.nCamID = index;
+//            iceAlarmInfo.nStatus = 0;
+//            iceAlarmInfo.strAlarmDescribe = "invade";
+//            size_t pos = imgPath.find("/static");
+//            iceAlarmInfo.strAlarmImgPath = imgPath.substr(pos,imgPath.length()-pos);
+//            pos = videoPath.find("/static");
+//            iceAlarmInfo.strAlarmVideoPath = videoPath.substr(pos,videoPath.length()-pos);
+//            iceAlarmInfo.strCreateTime = curTime;
+//            server->saveAlarmInfo(iceAlarmInfo);
+//        }else{
+//            ERR("ice alarmSaveToDB falid; server is null");
+//        }
+//    }catch (std::exception& e) {
+//        ERR(e.what());
+//    }
+//}
+
+static int AppPaController::saveRectsImage(const vector<cv::Rect2f> &rects, const cv::Mat &img, const char *path)
+{
+    if(img.rows==0||img.cols==0)return -1;
+    cv::Mat image = img.clone();
+    for(auto& rectf:rects){
+        cv::Rect rect(rectf.x*image.cols,rectf.y*image.rows,rectf.width*image.cols,rectf.height*image.rows);
+        cv::rectangle(image, rect,cv::Scalar(0,0,255),4);
+    }
+    return cv::imwrite(path,image);
+
+}
+
+bool AppPaController::isSaveVideo()
+{
+    return appPref.getIntData("video.save") != 0;
+}
+
+bool AppPaController::isSaveResult()
+{
+    return appPref.getIntData("alarmresult.save") != 0;
+}
+
+bool AppPaController::isSaveImage()
+{
+    return appPref.getIntData("image.save") != 0;
+}
+
+
+
diff --git a/QiaoJiaSystem/PerimeterAlarm/AppPaController.h b/QiaoJiaSystem/PerimeterAlarm/AppPaController.h
new file mode 100644
index 0000000..4c5a8c2
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/AppPaController.h
@@ -0,0 +1,168 @@
+#ifndef APPPACONTROLLER_H
+#define APPPACONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/util/curl/HttpRequestWithCrul.hpp>
+#include "PaImageDrawElement.h"
+#include "../StructureApp/RecordVideoElement.h"
+#include "PaYoloRpcElement.h"
+#include <TriggerElement.h>
+#include <QtCore/QDateTime>
+#include <jsoncpp/json/json.h>
+//#include <basic/rpc/IceRpc.hpp>
+//#include "../Alarm/rpc/Alarm.h"
+//#include "../netsoundbox/rpc/NetSoundBox.h"
+//#include <QtCore/QVector>
+//缃戠粶闊崇閰嶇疆
+struct SoundPlayInfo
+{
+    SoundPlayInfo():nSoundDuration(-1)
+    {}
+    //int nID;
+    std::string strIP;//闊崇IP
+    int nSoundDuration;//澹伴煶闂撮殧鏃堕棿
+    std::string strPath;//澹伴煶璺緞
+};
+//鎽勫儚澶翠俊鎭�
+struct CamInfo
+{
+    int nFps;//甯х巼
+    std::string strCamId;
+    std::string strAdrr;
+    std::string strRtsp;//RTSP鍦板潃
+};
+
+//鎶ヨ淇℃伅
+struct PaAlarmInfo
+{
+//    int nWallNum;//澧欏彿
+//    int nWallSubNum;//瀛愬鍙�
+//    int nWindowNum;//绐楀彛鍙�
+    int nTriggerDelay;//鎶ヨ寮�濮嬪欢鏃舵椂闂撮棿闅�
+    int nAlarmDelay;//鎶ヨ缁撴潫寤舵椂鏃堕棿闂撮殧
+    QString strMaskPath; //alarm maskPath瑙g爜鍣ㄦ姤璀︾殑ROI鍖哄煙灏忓浘璺緞
+    float fSensitivity;//alarm sensitivity鎶ヨ鐨勬娴嬮槇鍊�
+    int nAssembleCount;//鑱氶泦鐨勪汉鏁�
+};
+
+//鑱氶泦淇℃伅
+struct AssembleInfo
+{
+    int nAssembleCount;//鑱氶泦鐨勪汉鏁�
+    float fSensitivity;//AssembleInfo sensitivity鑱氶泦鐨勬娴嬮槇鍊�
+    //std::string strProxy;
+    std::string strMaskPath;// AssembleInfo maskPath鑱氶泦鐨凴OI鍖哄煙灏忓浘璺緞
+    std::vector<SoundPlayInfo> sounds;//缃戠粶闊崇鎾斁淇℃伅
+};
+
+struct RuleWeekInfo
+{
+    RuleWeekInfo()
+    {
+        m_nType = 1;
+        m_strBegin = "";
+        m_strEnd = "";
+    }
+
+    int m_nType; //鍛ㄥ嚑
+    QString m_strBegin;//00:00
+    QString m_strEnd;
+};
+//addcamera閰嶇疆椤�
+struct ControllerConfig
+{
+
+    //NONE neither alarm nor assemble
+    //ALARM alarm
+    //ASSEMBLE Assemble
+
+    //camInfo
+    CamInfo camInfo;//鎽勫儚澶翠俊鎭�
+
+    //alarmInfo
+    PaAlarmInfo paAlarmInfo;//鎶ヨ淇℃伅
+
+    //AssembleInfo
+  //  AssembleInfo assembleInfo;//鑱氶泦淇℃伅
+
+    QVector<RuleWeekInfo> ruleWeekInfoVec;
+
+};
+
+class AppPaController : public PipeController {
+public:
+    /***
+     * 鐢ㄤ簬蹇�熻棰戠粨鏋勫寲
+     * @param folderPath 浠诲姟鏍圭洰褰曪紝鐢ㄤ簬鍋氬叡浜唴瀛榠d
+     * @param json 鍙傛暟涓簉tsp娴佸湴鍧� sdk鏄惁鍚敤鐨勬爣璇�
+     */
+
+    AppPaController(int index, const ControllerConfig& cfg);
+
+    virtual ~AppPaController();
+
+    void sendVideoAlarm(bool value);
+    //閫氱煡鎶ヨ鏈嶅姟鎶ヨ
+    void openSoundAlarm();
+    //閫氱煡鎶ヨ鏈嶅姟鍏抽棴鎶ヨ
+    void closeSoundAlarm();
+    //閫氱煡缃戠粶闊崇鎾斁闊充箰
+    void playSound();
+    //閫氱煡缃戠粶闊崇鍋滄鎾斁闊充箰
+    void stopSound();
+
+    //void alarmResultSaveToDB(std::string&,std::string&,std::string&);
+
+    //淇濆瓨浜轰綋瑁佸壀鍥�
+    static int saveRectsImage(const vector<cv::Rect2f>& rects,const cv::Mat& img,const char* path);
+
+
+    bool isSaveVideo();
+
+    bool isSaveResult();
+
+    bool isSaveImage();
+
+
+    bool getRunning();
+
+    std::string getRtmp();
+
+    void setfdfsClient(FastFdsWithLock *p_fdfsClient);
+
+private:
+    void init();
+
+private:
+    ffmpeg::VideoCaptureElement videoCaptureElement;
+    PaYoloRpcElement yoloRpcElement;
+    PaImageDrawElement imageDrawElement;
+    RecordVideoElement recordVideoElement;
+//    VideoPublishElement videoPublishElement;
+
+    int m_index;
+    std::string m_folderPath;
+    Json::Value m_json_Record;
+
+    Json::FastWriter m_fastWriter;
+    FastFdsWithLock *fdfsClient;
+
+
+    TriggerElement triggerElement;
+    std::atomic<bool> bUp;
+
+    QDateTime m_dt;
+
+
+    const ControllerConfig m_cfg;
+
+  //  NetSoundBox::SoundInfos soundInfos;
+//    IceRpcClient<Alarm::AlarmInterfacePrx> alarmRpc;
+//    IceRpcClient<NetSoundBox::SoundInterfacePrxPtr> soundRpc;
+  //  IceRpcClient<SaveModule::SaveAlarmPrx> m_SaveAlarmRpc;
+
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt
new file mode 100644
index 0000000..126891b
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt
@@ -0,0 +1,121 @@
+cmake_minimum_required(VERSION 3.5)
+project(PerimeterAlarm)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DTESTCODE -fpermissive)
+
+SET(SOURCES
+#    TrackingTrigger.cpp
+    PaYoloRpcElement.cpp
+    PaImageDrawElement.cpp
+
+#    rpc/StructureApp.cpp
+    AppPaController.cpp
+    ../YoloServer/rpc/YoloServer.cpp
+    ../RecordVideo/rpc/RecordVideo.cpp
+    ../RapidStructureApp/TriggerElement.cpp
+    ../StructureApp/TrackingTrigger.cpp
+    ../StructureApp/RecordVideoElement.cpp
+#    ../Alarm/rpc/Alarm.cpp
+ #   ../netsoundbox/rpc/NetSoundBox.cpp
+
+
+
+#    rpc/AlarmInfo.cpp
+
+
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+    ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+    ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+    ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+    ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+    )
+
+SET(LIBS
+    Ice
+    crypto
+    opencv_world
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+    Qt5Core
+    pthread
+    jsoncpp
+    cuda
+    cudart
+    cublas
+    curand
+
+    glog
+
+    uuid
+    curl
+    fastcommon
+    fdfsclient
+    Qt5Gui
+    )
+
+include_directories(
+#    ./rpc
+    ../YoloServer/rpc
+    ../RecordVideo/rpc
+    ../RapidStructureApp/
+
+#    ../netsoundbox/rpc/
+#    ../Alarm/rpc
+
+
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+
+    ../../BasicPlatForm/basic/util/net_config/
+    ../../BasicPlatForm/basic/util/fastdfs/
+    ../../BasicPlatForm/libs/FastDFS/include
+    ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+    ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+
+    ../../BasicPlatForm/basic/pipe/
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/basic/util/curl/
+    ../../BasicPlatForm/libs/libuuid/include
+    ../../BasicPlatForm/libs/glog/include
+    /usr/include/x86_64-linux-gnu/qt5
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/FastDFS/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/crul/lib
+)
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    ${SOURCES}
+    )
+
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+
diff --git a/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user
new file mode 100644
index 0000000..f16a61e
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/CMakeLists.txt.user
@@ -0,0 +1,484 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.5.1, 2018-11-26T18:16:49. -->
+<qtcreator>
+ <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{e1ca3822-a9f7-41c4-8b27-ed35006d2304}</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+    <value type="QString" key="language">Cpp</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+    </valuemap>
+   </valuemap>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+    <value type="QString" key="language">QmlJS</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+    </valuemap>
+   </valuemap>
+   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.PluginSettings</variable>
+  <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">妗岄潰</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">妗岄潰</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{9141802c-62f7-4eed-b036-21940bb88d33}</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">2</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <valuelist type="QVariantList" key="CMake.Configuration"/>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Default</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">all</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Default</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <valuelist type="QVariantList" key="CMake.Configuration">
+     <value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
+    </valuelist>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Debug</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">all</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+    <valuelist type="QVariantList" key="CMake.Configuration">
+     <value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
+    </valuelist>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Release</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">all</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
+    <valuelist type="QVariantList" key="CMake.Configuration">
+     <value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
+    </valuelist>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Release with Debug Information</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">all</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release with Debug Information</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
+    <valuelist type="QVariantList" key="CMake.Configuration">
+     <value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
+    </valuelist>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/basic/c++/Qt/QiaoJiaSystem/build-StructureApp-unknown-Minimum Size Release</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">all</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
+      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
+       <value type="QString">clean</value>
+      </valuelist>
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">CMake Build</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Minimum Size Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">StructureApp</value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">StructureApp</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.StructureApp</value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">AppPipeControllerTest</value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">AppPipeControllerTest</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.AppPipeControllerTest</value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.2">
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">PerimeterAlarm</value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
+    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory.default">/home/basic/c++/Qt/QiaoJiaSystem/build</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">PerimeterAlarm</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.PerimeterAlarm</value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">3</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">18</value>
+ </data>
+ <data>
+  <variable>Version</variable>
+  <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp
new file mode 100644
index 0000000..c466a20
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.cpp
@@ -0,0 +1,55 @@
+#include "PaImageDrawElement.h"
+#include <basic/util/opencv/CvUtil.h>
+
+PaImageDrawElement::PaImageDrawElement() {
+
+}
+
+void PaImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) {
+    cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5,
+                cv::Scalar(255, 255, 0), 2);
+}
+
+void PaImageDrawElement::processImage(cv::Mat &image) {
+
+    auto yoloObjectsData = yoloObjects.getData();
+
+  //  {\"x\":4,\"y\":6},{\"x\":4,\"y\":537},{\"x\":955,\"y\":536},{\"x\":951,\"y\":9},{\"x\":4,\"y\":6}]
+        CvPoint spoint1[5] = {{4,6},{4,537},{955,536},{951,9},{4,6}};
+
+    cv::Rect rect(100,6,1700,1200);
+    cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2);
+    for (auto yoloObj: yoloObjectsData) {
+        auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1);
+       // Scalar scalar;
+        if(yoloObj.id>=0)
+        {
+            if(yoloObj.isMask)
+            {
+                //scalar=cv::Scalar(0, 0, 255);
+                  cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2);
+            }
+            else
+            {
+                //scalar=cv::Scalar(255, 0, 0);
+                 cv::rectangle(image, rect, cv::Scalar(255, 0, 0), 2);
+            }
+        }
+        else
+        {
+            // scalar=cv::Scalar(0, 255, 255);
+              cv::rectangle(image, rect, cv::Scalar(0, 255, 255), 2);
+        }
+        //cv::rectangle(image, rect, scalar, 2);
+        int i = 0;
+        for (auto &property:yoloObj.properties) {
+            darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+        }
+    }
+}
+
+
+
+void PaImageDrawElement::setYoloObjects(std::vector<ScoredRect> value) {
+    yoloObjects = value;
+}
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h
new file mode 100644
index 0000000..0a7e51c
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaImageDrawElement.h
@@ -0,0 +1,28 @@
+#ifndef PAIMAGEDRAWELEMENT_H
+#define PAIMAGEDRAWELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <basic/core/DoubleBufferedData.h>
+#include "../StructureApp/TrackingTrigger.h"
+
+class PaImageDrawElement : public ImageFactoryElement {
+public:
+    PaImageDrawElement();
+
+    // ImageFactoryElement interface
+
+
+    void setYoloObjects(std::vector<ScoredRect> value);
+
+private:
+    virtual void processImage(cv::Mat &) override;
+
+    void darwProperty(cv::Mat &image, string key, string value, int x, int y);
+
+private:
+    DoubleBufferedData<std::vector<ScoredRect>> yoloObjects;
+};
+
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp
new file mode 100644
index 0000000..d1e5bc8
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.cpp
@@ -0,0 +1,276 @@
+#include "PaYoloRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+#include "AppPaController.h"
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#include <basic/db/ES/es/ManagerEsDB.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
+
+PaYoloRpcElement::PaYoloRpcElement(string shareMemoryName) :
+    rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
+              appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
+    mRealNum(0),mCfg(nullptr),
+    trackingTrigger(nullptr) {
+    sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+//    DBG(shareMemoryName);
+    //1520 x 2688   1080 x 1920 //2560 * 1440 * 4
+    if (!sharedMemory->create(4608 * 2592 * 4)) {
+        sharedMemory->attach();
+    }
+    trackingTrigger = new TrackingTrigger(0.5);
+    try {
+        auto server = rpcClient.getServer();
+        cocoData = server->getCocoData();
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+PaYoloRpcElement::~PaYoloRpcElement() {
+    if (sharedMemory) {
+        delete sharedMemory;
+    }
+    if (trackingTrigger) {
+        delete trackingTrigger;
+    }
+    if (mCfg)
+    {
+        delete mCfg;
+        mCfg=nullptr;
+    }
+    mPolygon.clear();
+}
+
+void PaYoloRpcElement::threadFunc() {
+//    ClockTimer ct("YoloRpcElement::threadFunc");.
+    triggerMats.clear();
+    int num=0;
+    bool bInWeekTime=false;
+    if(mCfg==nullptr)
+    {
+        return;
+    }
+
+    try {
+        auto server = rpcClient.getServer();
+        if (!server) {
+            ERR("server is null");
+            return;
+        }
+        objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
+        if (objs.size() <= 0) {
+            trackingTrigger->triggerLine();
+            return;
+        }
+        string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+//        float t_det_sc =
+//            appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+
+        bInWeekTime=isInWeekRuleTime();
+
+        for (auto &obj: objs) {
+            if (obj.type != 0)
+                continue;
+            if(obj.prob < ((1-mCfg->paAlarmInfo.fSensitivity)/2+0.5))continue;
+
+
+            ScoredRect scoredRect;
+
+            int x = obj.rcObj.left * image.cols;
+            int y = obj.rcObj.top * image.rows;
+            int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+            int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+            scoredRect.rect = cv::Rect(x, y, w, h);
+            QRect rect(x,y,w,h);
+            QPoint center = rect.center();
+            scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+
+            if(mPolygon.containsPoint(center,Qt::OddEvenFill))
+            {
+                scoredRect.isMask=true;
+                if(bInWeekTime)
+                   num++;
+            }
+
+            if ( trackingTrigger->triggerOnce(scoredRect)) {
+
+                DBG("x="<<center.x()<<"y="<<center.y());
+                trackingTrigger->getLastRect().isMask= scoredRect.isMask;
+                trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+                trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+                auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone();
+                triggerMats.push_back(t_image);
+
+                std::string strImgUrl = "http://";
+                if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+                    fdfsClient->rwLock.rdlock();
+                    std::vector<unsigned char> buffer;
+                    CvUtil::cvMat2Buffer(t_image, buffer);
+                    std::string strImgUrlTmp = "";
+                    fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+                    strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+                    fdfsClient->rwLock.unlock();
+                }
+
+                //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture
+                if(0)
+                {
+                    //#todo
+                    EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+                    string str_uuid;
+                    uuid_t t_uuid;
+                    char str[36];
+                    uuid_generate(t_uuid);
+                    uuid_unparse(t_uuid, str);
+                    str_uuid = str;
+
+//                jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d  锛燂紵锛熸嬁涓嶅埌
+//                jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("Image","");//蹇収  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷
+//                jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎
+
+                    Json::Value t_json;
+                    t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+                    t_json["picName"] = "wait todo";
+                    t_json["DataType"] = cocoData[obj.type];
+                    t_json["Score"] = obj.prob;
+
+                    t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+                    t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+                    t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+                    t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+                    t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+                    t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+
+//                    faceRpcElement.setProperty("frame_number", frame_number);
+                    t_json["picDate"] = getProperty("time");
+                    t_json["content"] = "wait todo";
+                    t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+                    t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
+                    t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+                    t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+                    t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+                    t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+                    t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+                    t_json["indeviceid"] = appPref.getStringData("fxDevID");
+                    t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+                    DBG(t_json.toStyledString());
+                    bool retface = false;
+                    retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid);
+                    if (retface) {
+                        INFO("facedb success");
+                    } else {
+                        ERR("facedb fail");
+                    }
+                }
+            }
+        }
+        mRealNum=num;
+        trackingTrigger->triggerLine();
+        if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+        fireConnectors();
+    } catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+::YoloDetect::ObjInfos PaYoloRpcElement::getObjects() const {
+    return objs;
+}
+
+std::vector<cv::Mat> PaYoloRpcElement::getTriggerMats() {
+    return triggerMats;
+}
+
+std::vector<ScoredRect> PaYoloRpcElement::getLastScoreRects() const {
+    return trackingTrigger->getLastScoreRects();
+}
+
+void PaYoloRpcElement::setImage(const cv::Mat &value) {
+    if (value.size != image.size) {
+        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+    }
+    value.copyTo(image);
+}
+
+
+bool PaYoloRpcElement::isInWeekRuleTime()
+{
+
+    int nWeek = QDate::currentDate().dayOfWeek();
+    //QString strWeek = getWeekString(nWeek);
+    int size=mCfg->ruleWeekInfoVec.size();
+    for(int i = 0;i < size;++i)
+    {
+        if(mCfg->ruleWeekInfoVec[i].m_nType == nWeek)
+        {
+            QString strCurrent = QDateTime::currentDateTime().toString("hh:mm");
+            if(strCurrent >= mCfg->ruleWeekInfoVec[i].m_strBegin && strCurrent <= mCfg->ruleWeekInfoVec[i].m_strEnd)
+            {
+                    return true;
+            }
+        }
+    }
+    return false;
+}
+
+QJsonArray PaYoloRpcElement::getJsonArrayFromQString(const QString strJson)
+{
+    QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+    if( jsonDocument.isNull() ){
+        //DBG("please check the string"<< strJson.toLocal8Bit());
+        return QJsonArray();
+    }
+    QJsonArray jsonArray = jsonDocument.array();
+    return jsonArray;
+}
+
+ void PaYoloRpcElement::SetRuleCfg(const ControllerConfig* cfg)
+ {
+    mCfg=cfg;
+    if(mCfg)
+    {
+
+        QJsonArray arrayAreas = getJsonArrayFromQString(mCfg->paAlarmInfo.strMaskPath);
+        if(arrayAreas.isEmpty())
+        {
+            return;//do not detect
+        }
+        for(int i = 0;i < arrayAreas.size();++i)
+        {
+            QJsonValue jsonValue = arrayAreas[i];
+            QJsonObject obj = jsonValue.toObject();
+            int x = obj.value("x").toInt();
+            int y = obj.value("y").toInt();
+            mPolygon<<(QPoint(x,y));
+
+        }
+
+    }
+
+
+ }
+ int PaYoloRpcElement::getRealNum() const
+ {
+     return mRealNum;
+ }
diff --git a/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h
new file mode 100644
index 0000000..fe666d3
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/PaYoloRpcElement.h
@@ -0,0 +1,59 @@
+#ifndef PAYOLORPCELEMENT_H
+#define PAYOLORPCELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include "../StructureApp/TrackingTrigger.h"
+#include <QtCore/QVector>
+#include <QtCore/QJsonArray>
+#include <QtGui/qpolygon.h>
+class QSharedMemory;
+class ControllerConfig;
+class PaYoloRpcElement : public basic::PipeElement {
+public:
+    PaYoloRpcElement(string);
+
+    ~PaYoloRpcElement();
+
+    void setImage(const cv::Mat &value);
+
+    int getRealNum() const;
+    void SetRuleCfg(const ControllerConfig* cfg);
+
+    ::YoloDetect::ObjInfos getObjects() const;
+
+    std::vector<cv::Mat> getTriggerMats();
+
+    std::vector<ScoredRect> getLastScoreRects() const;
+
+
+
+    void setFdfs(FastFdsWithLock *p_fdfsClient) {
+        fdfsClient = p_fdfsClient;
+    }
+
+private:
+    virtual void threadFunc() override;
+    bool isInWeekRuleTime();
+    QJsonArray getJsonArrayFromQString(const QString strJson);
+private:
+    IceRpcClient<YoloDetect::YoloDetectServerPrx> rpcClient;
+    cv::Mat image;
+    QSharedMemory *sharedMemory;
+    ::YoloDetect::ObjInfos objs;
+    TrackingTrigger *trackingTrigger;
+    std::vector<cv::Mat> triggerMats;
+    ::YoloDetect::stringData cocoData;
+    FastFdsWithLock *fdfsClient;
+    cv::Mat mask,numMask;
+    QString mStrArea;
+    QPolygon mPolygon;
+    int mRealNum;
+    ControllerConfig* mCfg;
+
+};
+
+#endif // YOLORPCELEMENT_H
diff --git a/QiaoJiaSystem/PerimeterAlarm/main.cpp b/QiaoJiaSystem/PerimeterAlarm/main.cpp
new file mode 100644
index 0000000..d54f890
--- /dev/null
+++ b/QiaoJiaSystem/PerimeterAlarm/main.cpp
@@ -0,0 +1,113 @@
+#include <thread>
+#include "AppPaController.h"
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/debug/Debug.h>
+#include <basic/util/app/AppConfig.h>
+using namespace std;
+
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS;
+
+#ifdef GLOG
+    ENABLEGLOG("./log/");
+#endif
+
+//    std::string src_path = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/cut/123456/34/201808/28/123456-34-201808-20180828090100";
+    std::string src_path = "/home/basic/瑙嗛/test";
+
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setIntData("show.image", 1);
+
+    //yolo server
+    appPref.setStringData("yolo.proxy", "yoloServer");
+    //#todo
+    appPref.setStringData("yolo.ip", "");
+    appPref.setIntData("yolo.port", 10003);
+
+
+
+
+
+
+
+    //loopRecord server
+    appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+    //#todo
+    appPref.setStringData("loopRecord.ip", "");
+    appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+    appPref.setStringData("ipAdd", "192.168.1.185");
+    appPref.setIntData("ipPort", 9200);
+    Json::Value json;
+
+    //split sdks enable
+    //#todo other sdk
+
+   // json["face.enable"] = "1";
+    json["yolo.enable"] = "1";
+    json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+//    json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+//    json["rtsp"] = "/home/bsk/test/realtime/test123/201809/27/test123-2018092717/2018-09-27 17:20:57.mp4";
+
+
+    FastFdsWithLock fdfsClient;
+//    fdfsClient.fastFds = new FastFds;
+
+    //#todo from path get file list
+    file_filter_type filter = [](const char *dirName, const char *dirent) {
+        return (strstr(dirent, ".mp4") != nullptr);// add format
+    };
+    std::vector<std::string> vec = for_each_file(src_path, filter);
+//    while (true) {
+    auto size = vec.size();
+//    int size = 1;
+    int pos = 0;
+
+    QVector<RuleWeekInfo> ruleWeekVec;
+    for(int i=1;i<=7;++i)
+    {
+         RuleWeekInfo info;
+         info.m_nType=i;
+         info.m_strBegin="00:00";
+         info.m_strEnd="23.59";
+         ruleWeekVec.push_back(info);
+    }
+
+    ControllerConfig cfg;
+    cfg.ruleWeekInfoVec.swap(ruleWeekVec);
+    cfg.camInfo.strRtsp="rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+    cfg.camInfo.strCamId="1";
+    cfg.paAlarmInfo.nTriggerDelay=25;
+    cfg.paAlarmInfo.nAlarmDelay=5;
+  //  cfg.paAlarmInfo.strMaskPath="/home/basic/aaa/1.png";
+     cfg.paAlarmInfo.strMaskPath="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+    cfg.paAlarmInfo.fSensitivity=0.5;
+    cfg.paAlarmInfo.nAssembleCount=2;
+
+
+
+    AppPaController _AppPaController(1, cfg);
+//    AppPipeController _AppPipeController(src_path, json);
+    _AppPaController.setfdfsClient(&fdfsClient);
+//    for (; pos < size;) {
+//
+//        //#todo
+//        _AppPipeController.resetVideoCapturePath(vec[pos++]);
+//        _AppPipeController.resetVideoCapturePath(
+//            "/home/basic/work/qiaojia/cut/DS-7808N-SN0820161208AARR691369356WCVU/34/201810/11/DS-7808N-SN0820161208AARR691369356WCVU-34-20181011090000/2018-10-11 09:48:05.mp4");
+    _AppPaController.start();
+    while (_AppPaController.getRunning()) {
+        usleep(40000);
+    }
+    _AppPaController.stop();
+    _AppPaController.wait();
+    DBG("finish file");
+
+    getchar();
+
+    return 0;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/AppController.cpp b/QiaoJiaSystem/RapidStructureApp/AppController.cpp
new file mode 100644
index 0000000..90760e3
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/AppController.cpp
@@ -0,0 +1,132 @@
+#include "AppController.h"
+#include <basic/util/file/FileUtil.h>
+
+#define VECSIZE 1
+
+AppController::AppController(std::string path, int interval) : TimerElement(interval), m_path(path),
+                                                               func_cond_mutex(PTHREAD_MUTEX_INITIALIZER),
+                                                               func_cond(PTHREAD_COND_INITIALIZER) {
+    file_filter_type filter = [](const char *dirName, const char *dirent) {
+        return (strstr(dirent, ".mp4") != nullptr);// add format
+    };
+
+    std::string tmp = path;
+    m_pathOut = tmp.replace(tmp.begin() + tmp.find("/load"), tmp.begin() + tmp.find("/load") + 5, "/cut");
+//    DBG("m_pathOut is " << m_pathOut);
+
+    std::vector<std::string> vec = for_each_file(m_path, filter);
+
+    INFO(path << " vec size : " << vec.size());
+
+    for (int i = 0; i < vec.size(); ++i) {
+        m_que.push(vec[i]);
+    }
+
+    if (vec.size() >= VECSIZE) {
+        m_vec.resize(VECSIZE);
+    } else {
+        m_vec.resize(vec.size());
+    }
+
+    for (int i = 0; i < m_vec.size(); ++i) {
+        m_vec[i] = nullptr;
+    }
+}
+
+RapidAppPipeController *AppController::addController() {
+    RapidAppPipeController *p = nullptr;
+    std::lock_guard<std::mutex> lg(mtx);
+    std::string strPath;
+    Json::Value value;
+    if (!m_que.empty()) {
+        strPath = m_que.front();
+        value["rtsp"] = strPath;
+        m_que.pop();
+        p = new RapidAppPipeController(m_nIndex, value, m_pathOut);
+        p->start();
+        m_nIndex++;
+    }
+    return p;
+}
+
+std::string AppController::startController() {
+    start();
+    pthread_mutex_lock(&func_cond_mutex);
+//    INFO("before wait" << m_path);
+    pthread_cond_wait(&func_cond, &func_cond_mutex);
+    int m_t_size = m_vec.size();
+    for (int i = 0; i < m_vec.size(); ++i) {
+        if (m_vec[i] == nullptr) {
+            continue;
+        }
+        while (m_vec[i]->getIsRunning()) {
+            usleep(40000);
+        }
+        m_vec[i]->stop();
+        m_vec[i]->wait();
+        delete m_vec[i];
+        m_vec[i] = nullptr;
+        m_t_size--;
+    }
+//    INFO("after wait" << m_path);
+    pthread_mutex_unlock(&func_cond_mutex);
+    wait();
+//    DBG("cut ok ;m_pathOut is " << m_pathOut);
+    return m_pathOut;
+}
+
+void AppController::timerFunc() {
+    if (m_que.empty()) {
+//        INFO("before signal  " << m_path);
+        stop();
+        pthread_cond_signal(&func_cond);
+//        INFO("after signal" << m_path);
+        return;
+    }
+
+    for (int i = 0; i < m_vec.size(); ++i) {
+        if (m_vec[i] == nullptr) {
+            m_vec[i] = addController();
+            continue;
+        }
+
+        if (!m_vec[i]->getIsRunning()) {
+
+            m_vec[i]->stop();
+            m_vec[i]->wait();
+
+            delete m_vec[i];
+//            std::string cmd = "rm -rf \"";
+//            cmd.append(m_vec[i]->getPath()).append("\" & ");
+//            system(cmd.c_str());
+            m_vec[i] = nullptr;
+
+            m_vec[i] = addController();
+            continue;
+        }
+    }
+}
+
+//if (!m_que.empty())
+//{
+//    strPath = m_que.pop();
+//}else
+//{
+//    return;
+//}
+//value["rtsp"] = strPath;
+
+//std::string strPath;
+//Json::Value value;
+
+//m_vec[i] = new RapidAppPipeController(m_nIndex,strPath);
+//m_vec[i]->start();
+
+//m_vec[i]->stop();
+//m_vec[i]->wait();
+
+//delete m_vec[i];
+//m_vec[i] = nullptr;
+
+//m_vec[i] = new RapidAppPipeController(m_nIndex,strPath);
+//m_vec[i]->start();
diff --git a/QiaoJiaSystem/RapidStructureApp/AppController.h b/QiaoJiaSystem/RapidStructureApp/AppController.h
new file mode 100644
index 0000000..e0ab782
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/AppController.h
@@ -0,0 +1,37 @@
+#ifndef APPCONTROLLER_H
+#define APPCONTROLLER_H
+
+#include <basic/pipe/TimerElement.h>
+#include <queue>
+#include "RapidAppPipeController.h"
+#include <condition_variable>
+#include <mutex>
+
+class AppController : public TimerElement {
+public:
+    AppController(std::string path, int interval);
+
+    RapidAppPipeController *addController();
+
+    std::string startController();
+
+private:
+    virtual void timerFunc() override;
+
+private:
+    std::string m_path;
+    std::string m_pathOut;
+    std::queue<std::string> m_que;
+    std::vector<RapidAppPipeController *> m_vec;
+
+    bool m_state;
+
+    int m_nIndex;
+    std::mutex mtx;
+
+    pthread_cond_t func_cond;
+    pthread_mutex_t func_cond_mutex;
+
+};
+
+#endif // APPCONTROLLER_H
diff --git a/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt b/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt
new file mode 100644
index 0000000..a96af7a
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/CMakeLists.txt
@@ -0,0 +1,74 @@
+cmake_minimum_required(VERSION 3.5)
+project(RapidStructureApp)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+#set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+
+SET(SOURCES
+    RapidAppPipeController.cpp
+    VideoMoveCaptureElement.cpp
+    VideoChangeScore.cpp
+    TriggerElement.cpp
+    AppController.cpp
+    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+    ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+    ../../BasicPlatForm/basic/util/file/FileUtil.cpp
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.cpp
+    )
+
+SET(LIBS
+    Ice
+    opencv_world
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+    Qt5Core
+    pthread
+    jsoncpp
+    )
+
+include_directories(
+    ../VptServer/rpc
+    ../YoloServer/rpc
+    ../FaceDetectServer/rpc
+    ../StructureApp
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/basic/pipe/
+    /usr/include/x86_64-linux-gnu/qt5
+)
+
+link_directories(
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+)
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    ${SOURCES}
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+
+add_executable(${PROJECT_NAME}Rtsp
+    mainRtsp.cpp
+    ${SOURCES}
+    )
+
+target_link_libraries(${PROJECT_NAME}Rtsp
+    ${LIBS}
+    )
\ No newline at end of file
diff --git a/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp
new file mode 100644
index 0000000..599012f
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.cpp
@@ -0,0 +1,86 @@
+#include "RapidAppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+
+//#include <sstream>
+#include <algorithm>
+
+RapidAppPipeController::RapidAppPipeController(int index, const Json::Value &json, const std::string &outPath) :
+    videoCaptureElement(json["rtsp"].asString(), outPath, 25, -1, 0),//appPref.getLongData("gpu.index")
+    index(index), bUp(false), m_json(json),
+    /*yoloRpcElement(to_string(index)+"yoloRpc"),*/triggerElement(0, 3) {
+    videoCaptureElement.registerConnector([&] {
+        if (videoCaptureElement.getChangeLevel() > 40) {
+            triggerElement.setState(true);
+        } else if (videoCaptureElement.getChangeLevel() < 20) {
+            triggerElement.setState(false);
+        }
+
+        triggerElement.triggerOnce();
+
+        if (triggerElement.getState()) {
+            videoCaptureElement.setOutPutInterval(1);
+        } else {
+            videoCaptureElement.setOutPutInterval(25);
+        }
+
+        if (triggerElement.getTriggerState()) {
+            if (!bUp) {
+                bUp = true;
+//                DBG(videoCaptureElement.getOutPutIndex());
+                videoCaptureElement.startRecord(videoCaptureElement.getOutPutIndex());
+            } else {
+                //#TODO
+                auto it = (videoCaptureElement.getOutPutIndex() - videoCaptureElement.getM_nFrame()) / 25;
+//                DBG("tes t   " << it);
+                if (it > (60 * 5)) {
+//                    DBG("test");
+                    bUp = false;
+                    videoCaptureElement.endRecord(videoCaptureElement.getOutPutIndex());
+                }
+
+            }
+        } else {
+            if (bUp) {
+                bUp = false;
+//                DBG(videoCaptureElement.getOutPutIndex());
+                videoCaptureElement.endRecord(videoCaptureElement.getOutPutIndex());
+            }
+        }
+    });
+
+    triggerElement.registerConnector([&] {
+        switch (triggerElement.getTriggerType()) {
+            case UP:
+//                DBG("UP");
+                break;
+            case DOWN:
+//                DBG("DOWN");
+                break;
+            default:
+                break;
+        }
+    });
+
+    registerElement(videoCaptureElement);
+//    if(appPref.getStringData("yolo.enable")=="1"){
+//        registerElement(yoloRpcElement);
+//    }
+    //registerElement(yoloRpcElement);
+    //registerElement(imageDrawElement);
+    registerElement(triggerElement);
+
+    videoCaptureElement.setOutPutInterval(1);
+}
+
+bool RapidAppPipeController::getIsRunning() const {
+    return videoCaptureElement.isRunning();
+}
+
+RapidAppPipeController::~RapidAppPipeController() {
+
+}
+
+std::string RapidAppPipeController::getPath() {
+    return m_json["rtsp"].asString();
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h
new file mode 100644
index 0000000..da59590
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/RapidAppPipeController.h
@@ -0,0 +1,28 @@
+#ifndef RAPIDAPPPIPECONTROLLER_H
+#define RAPIDAPPPIPECONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include "VideoMoveCaptureElement.h"
+#include "TriggerElement.h"
+#include <jsoncpp/json/json.h>
+
+class RapidAppPipeController : public PipeController {
+public:
+    RapidAppPipeController(int index, const Json::Value &json, const std::string &outPath);
+
+    virtual ~RapidAppPipeController();
+
+    bool getIsRunning() const;
+
+    std::string getPath();
+
+private:
+    VideoMoveCaptureElement videoCaptureElement;
+    TriggerElement triggerElement;
+    int index;
+    bool bUp;
+    Json::Value m_json;
+};
+
+#endif // RAPIDAPPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
new file mode 100644
index 0000000..6f0272d
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
@@ -0,0 +1,89 @@
+#include "TriggerElement.h"
+
+TriggerElement::TriggerElement(long tolerance, long delay) :
+    state(false),
+//    TimerElement(1),
+    triggerState(false),
+    tolerance(tolerance), delay(delay),
+    triggerType(DOWN), triggerTimes(0),lastDown(0),lastUp(0) {
+
+}
+
+TriggerElement::~TriggerElement() {
+
+}
+
+bool TriggerElement::getState() const {
+    return state;
+}
+
+void TriggerElement::setState(bool value) {
+    state = value;
+}
+
+TriggerType TriggerElement::getTriggerType() const {
+    return triggerType;
+}
+
+void TriggerElement::triggerOnce() {
+    triggerTimes++;
+    if (state) {
+        lastUp = triggerTimes;
+        if (!triggerState) {
+            if (triggerTimes - lastDown > tolerance) {
+                triggerType = UP;
+                triggerState = true;
+                fireConnectors();
+            }
+        }
+    } else {
+        lastDown = triggerTimes;
+        if (triggerState) {
+            if (triggerTimes - lastUp > delay) {
+                triggerType = DOWN;
+                triggerState = false;
+                fireConnectors();
+            }
+        }
+    }
+}
+
+void TriggerElement::triggerOnce(bool ret_notused) {
+    triggerTimes++;
+    if (state) {
+        lastUp = triggerTimes;
+        if (!triggerState) {
+            if (triggerTimes - lastDown > tolerance) {
+                triggerType = UP;
+                triggerState = true;
+            }
+        }
+    } else {
+        lastDown = triggerTimes;
+        if (triggerState) {
+            if (triggerTimes - lastUp > delay) {
+                triggerType = DOWN;
+                triggerState = false;
+            }
+        }
+    }
+}
+
+bool TriggerElement::getTriggerState() const {
+    return triggerState;
+}
+
+void TriggerElement::threadInitial() {
+    lastUp = 0;
+    lastDown = 0;
+    triggerType = DOWN;
+}
+
+
+void TriggerElement::timerFunc() {
+
+}
+
+void TriggerElement::threadClosing() {
+
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/TriggerElement.h b/QiaoJiaSystem/RapidStructureApp/TriggerElement.h
new file mode 100644
index 0000000..ce6e32d
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/TriggerElement.h
@@ -0,0 +1,51 @@
+#ifndef TRIGGERELEMENT_H
+#define TRIGGERELEMENT_H
+
+#include <mutex>
+#include <opencv2/opencv.hpp>
+#include <basic/pipe/TimerElement.h>
+#include <atomic>
+
+enum TriggerType {
+    UP = 0, DOWN
+};
+
+class TriggerElement : public basic::PipeElement {
+
+public:
+    TriggerElement(long tolerance = 0, long delay = 0);
+
+    virtual ~TriggerElement();
+
+    bool getState() const;
+
+    void setState(bool value);
+
+    TriggerType getTriggerType() const;
+
+    void triggerOnce();
+
+    void triggerOnce(bool);
+
+    bool getTriggerState() const;
+
+private:
+    bool state;
+    bool triggerState;
+    long tolerance;
+    long delay;
+    long lastDown;
+    long lastUp;
+    long triggerTimes;
+    TriggerType triggerType;
+
+private:
+
+    virtual void threadInitial() override;
+
+    virtual void timerFunc();
+
+    virtual void threadClosing() override;
+};
+
+#endif // TRIGGERELEMENT_H
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp
new file mode 100644
index 0000000..8e6250a
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.cpp
@@ -0,0 +1,28 @@
+#include "VideoChangeScore.h"
+
+VideoChangeScore::VideoChangeScore() {
+
+}
+
+int VideoChangeScore::EvalChange(cv::Mat &image) {
+    if (image.empty())return 0;
+
+    cv::blur(image, image, cv::Size(16, 9));
+    if (backGround.empty()) {
+        image.copyTo(backGround);
+    } else {
+        backGround = image * 0.1 + backGround * 0.9;
+    }
+    cv::absdiff(image, backGround, change);
+    double min, max;
+    cv::minMaxLoc(change, &min, &max);
+    return max;
+}
+
+cv::Mat VideoChangeScore::getBackGround() const {
+    return backGround;
+}
+
+cv::Mat VideoChangeScore::getChange() const {
+    return change;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h
new file mode 100644
index 0000000..a0d07f1
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoChangeScore.h
@@ -0,0 +1,22 @@
+#ifndef VIDEOCHANGESCORE_H
+#define VIDEOCHANGESCORE_H
+
+#include <opencv2/opencv.hpp>
+
+class VideoChangeScore {
+public:
+    VideoChangeScore();
+
+    int EvalChange(cv::Mat &image);
+
+    cv::Mat getBackGround() const;
+
+    cv::Mat getChange() const;
+
+private:
+    cv::Mat change;
+    cv::Mat temp;
+    cv::Mat backGround;
+};
+
+#endif // VIDEOCHANGESCORE_H
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp
new file mode 100644
index 0000000..4b85cc8
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.cpp
@@ -0,0 +1,145 @@
+#include "VideoMoveCaptureElement.h"
+//#include <basic/pipe_element/ffmpeg/cap_ffmpeg_impl.hpp>
+//#todo
+#include <basic/pipe_element/ffmpeg/FfmpegElement.cpp>
+#include <QtCore/QStringList>
+#include <QtCore/QDateTime>
+#include <unistd.h>
+#include <basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.h>
+
+VideoMoveCaptureElement::VideoMoveCaptureElement(const std::string &path, const std::string &outPath,
+                                                 int fps, int reOpenTime, int gpuIndex) :
+    basic::PipeElement(false), path(path), m_pathOut(outPath), gpuIndex(gpuIndex),
+    reopenTime(reOpenTime), outPutInterval(25), outPutIndex(0), bYoloDetect(false) //TODO25
+{
+
+}
+
+void VideoMoveCaptureElement::threadFunc() {
+//    _timer.reset();
+    usleep(1);
+    u_char *data;
+    int width = 0, height = 0, step = 0, cn = 0;
+    bool ret = capture->grabFrame();
+    if (!ret) {
+        if (reopenTime < 0) {
+            stop();
+            INFO("grabFrame faild, element stopping" << path);
+            //INFO(_timerTotal.tell_ms());
+            return;
+        } else {
+            usleep(reopenTime * 1000);
+            INFO("grabFrame faild, try reopen video: " << path);
+            openVideo();
+            ret = capture->grabFrame();
+            if (!ret)return;
+        }
+    }
+
+//    DBG(_timer.tell_ns());
+    if (outPutInterval > 0 && (outPutIndex++ % outPutInterval != 0)) {
+        return;
+    }
+
+    capture->retrieveFrame(0, &data, &step, &width, &height, &cn);
+    try {
+        cv::Mat img(height, width, CV_8UC3, data, step);
+        cv::resize(img, image, cv::Size(192, 108), 0, 0, cv::INTER_LINEAR);
+        nChangeLevel = videoChangeScore.EvalChange(image);
+    } catch (std::exception ex) {
+        ERR("ex is " << ex.what());
+    }
+
+
+
+//    DBG(nChangeLevel);
+
+    fireConnectors();
+
+}
+
+int VideoMoveCaptureElement::getOutPutInterval() const {
+    return outPutInterval;
+}
+
+void VideoMoveCaptureElement::setOutPutInterval(int value) {
+    outPutInterval = value;
+}
+
+cv::Mat VideoMoveCaptureElement::getImage() const {
+    return image;
+}
+
+void VideoMoveCaptureElement::openVideo() {
+    if (gpuIndex >= 0) {
+        setenv("CUDA_VISIBLE_DEVICES", std::to_string(gpuIndex).c_str(), 0);
+    }
+    capture->open(path.c_str(), gpuIndex >= 0);
+}
+
+int VideoMoveCaptureElement::getOutPutIndex() const {
+    return outPutIndex;
+}
+
+void VideoMoveCaptureElement::startRecord(int startFrame) {
+    m_nFrame = startFrame;
+}
+
+void VideoMoveCaptureElement::endRecord(int endFrame) {
+    int startSec = m_nFrame / outPutInterval;
+    int endSec = endFrame / outPutInterval;
+
+    std::string start = std::to_string(startSec);
+    std::string end = std::to_string(endSec);
+
+    QString strPath = QString::fromStdString(path);
+    QStringList list = strPath.split("/");
+    QString fileName;
+    QString time;
+    QString strNewTime;
+    if (list.size() != 0) {
+        fileName = list.last();
+        time = fileName.split(".").first();
+        //#todo
+//        time = fileName.split("_").first();
+    } else {
+        ERR("list.size() == 0)");
+    }
+
+    if (!time.isEmpty()) {
+        QDateTime dt = QDateTime::fromString(time, "yyyy-MM-dd hh:mm:ss");
+        int second = m_nFrame / outPutInterval;
+        qint64 newTime = dt.toMSecsSinceEpoch() + second * 1000;
+        QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+        strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss");
+    }
+
+    //#todo m_pathOut + /
+    QString strNewPath = QString(m_pathOut.c_str()) + "/" + strNewTime + QString(".mp4");
+
+    fileRecord(path.c_str(), start.c_str(), endSec - startSec, strNewPath.toStdString().c_str());
+}
+
+bool VideoMoveCaptureElement::getBYoloDetect() const {
+    return bYoloDetect;
+}
+
+int VideoMoveCaptureElement::getChangeLevel() const {
+    return nChangeLevel;
+}
+
+void VideoMoveCaptureElement::threadInitial() {
+    capture = new CvCapture_FFMPEG;
+    openVideo();
+    //_timerTotal.reset();
+}
+
+void VideoMoveCaptureElement::threadClosing() {
+    capture->close();
+    delete capture;
+    capture = nullptr;
+}
+
+int VideoMoveCaptureElement::getM_nFrame() const {
+    return m_nFrame;
+}
diff --git a/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h
new file mode 100644
index 0000000..b2becf8
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/VideoMoveCaptureElement.h
@@ -0,0 +1,67 @@
+#ifndef VIDEOMOVECAPTUREELEMENT_H
+#define VIDEOMOVECAPTUREELEMENT_H
+
+#include <basic/pipe/TimerElement.h>
+#include <opencv2/opencv.hpp>
+#include "VideoChangeScore.h"
+
+//#include <basic/pipe/my_timer.hpp>
+
+struct CvCapture_FFMPEG;
+struct CvVideoWriter_FFMPEG;
+
+class VideoMoveCaptureElement : public basic::PipeElement {
+public:
+    VideoMoveCaptureElement(const std::string &path, const std::string &outPath,
+                            int fps = 30, int reOpenTime = -1, int gpuIndex = -1
+    );
+
+    cv::Mat getImage() const;
+
+    int getOutPutInterval() const;
+
+    void setOutPutInterval(int value);
+
+    int getChangeLevel() const;
+
+    bool getBYoloDetect() const;
+
+    int getOutPutIndex() const;
+
+    void startRecord(int startFrame);//too large?no int?
+
+    void endRecord(int endFrame);
+
+private:
+    void threadFunc();
+
+    void threadInitial();
+
+    void threadClosing();
+
+    void openVideo();
+
+private:
+    CvCapture_FFMPEG *capture;
+    std::string path;
+    std::string m_pathOut;
+    cv::Mat image;
+    int gpuIndex;
+    int outPutIndex;
+    int outPutInterval;
+    int reopenTime;
+
+    VideoChangeScore videoChangeScore;
+    int nChangeLevel;
+
+    bool bYoloDetect;
+
+    int m_nFrame;
+public:
+    int getM_nFrame() const;
+
+//    my_module_space::Timer _timer;
+//    my_module_space::Timer _timerTotal;
+};
+
+#endif // VIDEOMOVECAPTUREELEMENT_H
diff --git a/QiaoJiaSystem/RapidStructureApp/main.cpp b/QiaoJiaSystem/RapidStructureApp/main.cpp
new file mode 100644
index 0000000..d4192b9
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/main.cpp
@@ -0,0 +1,36 @@
+#include <iostream>
+#include "AppController.h"
+
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+    vector<string> vec;
+    vec.push_back("/home/bsk/test/1/load/");
+//    vec.push_back("/home/bsk/2/load/");
+
+//    while (true) {
+
+        for (int i = 0; i < vec.size(); ++i) {
+            AppController _AppController(vec[i], 5000);
+            auto str_Path = _AppController.startController();
+        }
+//    }
+
+
+//    appController->wait();
+    return 0;
+}
+
+
+
+//    value["rtsp"] = "rtsp://admin:a1234567@192.168.1.202:554/h264/ch1/main/av_stream";
+
+//    cv::VideoCapture capture;
+//    int frameCount =0;
+//    capture.open("/home/basic/瑙嗛/output.mp4");
+//    while (capture.grab()) {
+//        frameCount++;
+//    }
+//    cout << "total time: "<<frameCount/25<<"s"<<endl;
diff --git a/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp b/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp
new file mode 100644
index 0000000..b3079d5
--- /dev/null
+++ b/QiaoJiaSystem/RapidStructureApp/mainRtsp.cpp
@@ -0,0 +1,26 @@
+#include <iostream>
+#include "AppController.h"
+
+#include <basic/util/file/FileUtil.h>
+
+using namespace std;
+
+int main(int argc, char **argv) {
+
+    std::string strOutPath = "/home/bsk/test/";
+    std::string strPath = "rtsp://admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream";;
+    Json::Value value;
+    value["rtsp"] = strPath;
+    RapidAppPipeController p(0, value, strOutPath);
+    p.start();
+//    getchar();
+
+    while (p.getIsRunning()) {
+        usleep(40000);
+    }
+    p.stop();
+    p.wait();
+    return 0;
+}
+
+
diff --git a/QiaoJiaSystem/RecordVideo/CMakeLists.txt b/QiaoJiaSystem/RecordVideo/CMakeLists.txt
new file mode 100644
index 0000000..5aa4879
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/CMakeLists.txt
@@ -0,0 +1,88 @@
+cmake_minimum_required(VERSION 3.5)
+project(RecordVideo)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+find_package(Qt5Core)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(SOURCES
+    rpc/RecordVideo.cpp
+    RecordVideoI.cpp
+    ImageGrabberI.cpp
+    LoopRecordVideoI.cpp
+    LoopVideoRecorder.cpp
+    ../VideoServer/QiaoJia/DB/LDBTool.cpp
+    ./VideoRecorder.cpp
+    ./CommonFFmpegFunc.hpp
+    ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+    ../../BasicPlatForm/basic/util/app/AppConfig.h
+    ../../BasicPlatForm/basic/util/app/AppPreference.hpp
+    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+    ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+    )
+
+SET(LIBS
+    glog
+    Ice
+    opencv_world
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+    Qt5Core
+    pthread
+    fastcommon
+    fdfsclient
+    jsoncpp
+    Qt5Core
+    Qt5Sql
+    uuid
+    )
+
+include_directories(
+    ./rpc
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+    ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder
+    ../../BasicPlatForm/basic/pipe
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/glog/include
+    ../../BasicPlatForm/libs/libuuid/include
+
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/FastDFS/lib
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+)
+
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    ${SOURCES}
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
diff --git a/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp b/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp
new file mode 100644
index 0000000..9e4e825
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/CommonFFmpegFunc.hpp
@@ -0,0 +1,264 @@
+#ifndef COMMONFFMPEGFUNC_HPP
+#define COMMONFFMPEGFUNC_HPP
+
+#include <basic/debug/Debug.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <libavcodec/avcodec.h>
+#include <libavdevice/avdevice.h>
+#include <libavformat/avformat.h>
+#include <libavfilter/avfilter.h>
+#include <libavutil/avutil.h>
+#include <libswscale/swscale.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+
+#ifdef __cplusplus
+}
+#endif
+
+class CommonFFmpeg
+{
+public:
+    CommonFFmpeg():m_pInFmtCtx(nullptr),m_pInVideoStream(nullptr),m_pDict(nullptr){}
+    ~CommonFFmpeg(){}
+
+public:
+    void init()
+    {
+        av_register_all();
+        avformat_network_init();
+    }
+    int rtspInputOpen(const char* rtsp)
+    {
+        av_dict_set(&m_pDict, "rtsp_transport", "tcp", 0);
+        int ret = avformat_open_input(&m_pInFmtCtx, rtsp, NULL, &m_pDict);
+        if (ret!=0)
+        {
+            fprintf(stderr, "could not open input file, ret: %d,info: %x\n",ret,AVERROR(ret));
+            return ret;
+        }
+        ret = avformat_find_stream_info(m_pInFmtCtx, NULL);
+        if (ret<0)
+        {
+            fprintf(stderr, "could not find stream info\n");
+            return ret;
+        }
+
+        /* find first video stream */
+        for (unsigned i=0; i<m_pInFmtCtx->nb_streams; i++)
+        {
+            if (m_pInFmtCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
+            {
+                m_pInVideoStream = m_pInFmtCtx->streams[i];
+                break;
+            }
+        }
+        if (m_pInVideoStream == NULL)
+        {
+            fprintf(stderr, "didn't find any video stream\n");
+            return -1;
+        }
+        return 0;
+    }
+    void rtspInputClose()
+    {
+        if(m_pInFmtCtx!=nullptr)
+            avformat_close_input(&m_pInFmtCtx);
+        if(m_pDict!=nullptr)
+            av_dict_free(&m_pDict);
+    }
+
+    void* rtspCreatePkg()
+    {
+        //g_pkg.lock();
+        mutex().lock();
+        AVPacket* pkt = nullptr;
+        try{pkt=new AVPacket();av_init_packet(pkt);}
+        catch (...){if(pkt!=nullptr){delete pkt;pkt=nullptr;}}
+        //g_pkg.unlock();
+        mutex().unlock();
+        return pkt;
+    }
+    void rtspDestroyPkg(void* packet)
+    {
+        mutex().lock();
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            av_free_packet(pkg);
+            delete pkg;
+            pkg = nullptr;
+        }
+        mutex().unlock();
+    }
+
+    int rtspReadPkg(void* packet)
+    {
+        mutex().lock();
+        int ret = -1;
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            ret = av_read_frame(m_pInFmtCtx, pkg);
+        }
+        mutex().unlock();
+        return ret;
+    }
+
+    void* getRtspStream()
+    {
+        return (void*)m_pInVideoStream;
+    }
+
+    int fileOutOpen(const char* filename,void* inStream)
+    {
+        AVStream* pInstream = (AVStream*)inStream;
+        if(pInstream==nullptr)
+        {DBG("instream is null");return -1;}
+        int ret = avformat_alloc_output_context2(&m_pOutFmtCtx, NULL, NULL, filename);
+        if(ret<0)
+        {
+            fprintf(stderr, "avformat_alloc_output_context2 failed, errorCode: %d\n",AVERROR(ret));
+            return -1;
+        }
+        /*
+        * since all input files are supposed to be identical (framerate, dimension, color format, ...)
+        * we can safely set output codec values from first input file
+        */
+        m_pOutVideo_stream = avformat_new_stream(m_pOutFmtCtx, NULL);
+        {
+            AVCodecContext *c;
+            c = m_pOutVideo_stream->codec;
+            c->bit_rate = 400000;
+            c->codec_id = pInstream->codec->codec_id;
+            c->codec_type = pInstream->codec->codec_type;
+            c->time_base.num = pInstream->time_base.num;
+            c->time_base.den = pInstream->time_base.den;
+            fprintf(stderr, "time_base.num = %d time_base.den = %d\n", c->time_base.num, c->time_base.den);
+            c->width = pInstream->codec->width;
+            c->height = pInstream->codec->height;
+            c->pix_fmt = pInstream->codec->pix_fmt;
+            printf("%d %d %d", c->width, c->height, c->pix_fmt);
+            c->flags = pInstream->codec->flags;
+            c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+            c->me_range = pInstream->codec->me_range;
+            c->max_qdiff = pInstream->codec->max_qdiff;
+
+            c->qmin = pInstream->codec->qmin;
+            c->qmax = pInstream->codec->qmax;
+
+            c->qcompress = pInstream->codec->qcompress;
+        }
+        ret =avio_open(&m_pOutFmtCtx->pb, filename, AVIO_FLAG_WRITE);
+        if(ret<0)
+        {
+            fprintf(stderr, "could not find stream info, errorCode: %d\n",AVERROR(ret));
+            return -1;
+        }
+
+        avformat_write_header(m_pOutFmtCtx, NULL);
+    }
+
+    void fileOutClose()
+    {
+        av_write_trailer(m_pOutFmtCtx);
+        avio_close(m_pOutFmtCtx->pb);
+        avcodec_close(m_pOutFmtCtx->streams[0]->codec);
+        av_freep(&m_pOutFmtCtx->streams[0]->codec);
+        av_freep(&m_pOutFmtCtx->streams[0]);
+
+        av_free(m_pOutFmtCtx);
+        m_pOutFmtCtx = nullptr;
+    }
+
+    int fileWritePkg(void* packet)
+    {
+        mutex().lock();
+        int ret = -1;
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            //av_interleaved_write_frame(thisPtr->m_pOutFmtCtx, &i_pkt);
+            ret = av_write_frame(m_pOutFmtCtx, pkg);
+        }
+        mutex().unlock();
+        return ret;
+    }
+
+    bool isKeyFrame(void* packet)
+    {
+        bool ret = false;
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            if(pkg->flags&AV_PKT_FLAG_KEY) ret = true;
+        }
+        return ret;
+    }
+
+    long int getPkgDts(void* packet)
+    {
+        long int ret = 0;
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            ret = pkg->dts;
+        }
+        return ret;
+    }
+    long int getPkgPts(void* packet)
+    {
+        long int ret = 0;
+        if(packet!=nullptr)
+        {
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            ret = pkg->pts;
+        }
+        return ret;
+    }
+
+    void conversion(void* packet,const long int& firstKeyPts,const long int& firstKeyDts,void* inVideoStream)
+    {
+        mutex().lock();
+        if((packet!=nullptr)&&(inVideoStream!=nullptr))
+        {
+            AVStream* inStream = (AVStream*)inVideoStream;
+            AVPacket* pkg = static_cast<AVPacket*>(packet);
+            pkg->pts -= firstKeyPts;
+            pkg->dts -= firstKeyDts;
+            pkg->pts = av_rescale_q_rnd(pkg->pts, inStream->time_base,
+                                         m_pOutVideo_stream->time_base,
+                                         (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
+            pkg->dts = av_rescale_q_rnd(pkg->dts, inStream->time_base,
+                                         m_pOutVideo_stream->time_base,
+                                         (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
+            pkg->duration = av_rescale_q(pkg->duration, inStream->time_base,
+                                          m_pOutVideo_stream->time_base);
+            pkg->pos = -1;
+        }
+        mutex().unlock();
+    }
+
+private:
+    AVFormatContext * m_pInFmtCtx;
+    AVStream *m_pInVideoStream;
+    AVDictionary *m_pDict;
+
+    AVFormatContext *m_pOutFmtCtx;
+    AVStream *m_pOutVideo_stream;
+    //static std::mutex g_pkg;
+    inline static int& n() { static int tn = 0; return tn;}
+
+    inline static std::mutex& mutex(){static std::mutex mtx;return mtx;}
+
+};
+#endif
+//std::mutex CommonFFmpeg::g_pkg;
diff --git a/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp b/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp
new file mode 100644
index 0000000..59fe9f2
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/ImageGrabberI.cpp
@@ -0,0 +1,117 @@
+#include "ImageGrabberI.h"
+#include <functional>
+#include <algorithm>
+#include <dirent.h>
+#include <basic/debug/Debug.h>
+#include <cstring>
+#include <opencv2/opencv.hpp>
+#include <QtCore/QDateTime>
+#include <basic/util/opencv/CvUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+
+//鑾峰彇鐩綍涓嬫墍鏈夋枃浠剁殑鍚嶇О
+std::vector<std::string> forEachFile(const std::string &dir_name) {
+    std::vector<std::string> v;
+    auto dir = opendir(dir_name.data());
+    struct dirent *ent;
+    int len = 0;
+    if (dir) {
+        while ((ent = readdir(dir)) != NULL) {
+            std::string p = std::string(ent->d_name);
+            len = strlen(p.data());
+            if (len == 25) {
+                v.emplace_back(p);
+            }
+        }
+        closedir(dir);
+    }
+    return v;
+}
+
+//灏嗚棰戜腑鐨勬寚瀹氬抚瀛樹负鍥剧墖
+cv::Mat Video2Imag(std::string VideoName, int msec) {
+    cv::VideoCapture m;
+    cv::Mat img = cv::Mat();
+
+    m.open(VideoName);
+    m.set(CV_CAP_PROP_POS_MSEC, msec);
+    if (!m.isOpened()) {
+        ERR("瑙嗛璇诲叆閿欒");
+        return img;
+    }
+
+    m >> img;
+
+    return img;
+}
+
+ImageGrabberI::ImageGrabberI() : fdfsClient("./client.conf") {
+
+}
+
+RecordVideo::ByteSequence
+ImageGrabberI::grabImage(const Ice::Int index, const std::string &time, const Ice::Current &) {
+    ::RecordVideo::ByteSequence buffer;
+    QDateTime dt = QDateTime::fromString(time.data(), "yyyy-MM-dd hh:mm:ss");
+    QDateTime dtCurrent = QDateTime::currentDateTime();
+    qint64 diff = dtCurrent.toMSecsSinceEpoch() - dt.toMSecsSinceEpoch();
+    if (diff > appPref.getLongData("user.timeout") || diff < appPref.getLongData("user.interval.duration")) {
+        return buffer;
+    }
+    std::string path = appPref.getStringData("user.loop.absolute.path");
+    std::string absPath;
+
+    if (path.empty()) {
+        ERR("璺緞涓虹┖!");
+        return buffer;
+    }
+
+    char last = path.back();
+    if (last != '/') {
+        absPath = path + "/";
+    } else {
+        absPath = path;
+    }
+
+    std::string definitePath = absPath + QString::number(index).toStdString() + "/";
+
+    vec.clear();
+    vec = forEachFile(definitePath);
+    std::sort(vec.begin(), vec.end());
+
+    if (vec.empty()) {
+        ERR("娌℃湁鎵惧埌褰曞埗瑙嗛");
+        return buffer;
+    }
+
+    for (std::string &s : vec) {
+        std::string temp;
+        temp = s.substr(0, 21);
+
+        QDateTime dtFile = QDateTime::fromString(temp.data(), "yyyyMMdd_hh:mm:ss:zzz");
+        qint64 sub = dt.toMSecsSinceEpoch() - dtFile.toMSecsSinceEpoch();
+        if (sub <= appPref.getLongData("user.interval.duration") && sub > 0) {
+            std::string fullPath = definitePath + s;
+            cv::Mat img = Video2Imag(fullPath, sub);
+            CvUtil::cvMat2Buffer(img, buffer);
+            return buffer;
+        }
+    }
+
+    ERR("娌℃湁璇ユ椂娈电殑褰曞埗瑙嗛");
+    return buffer;
+}
+
+std::string ImageGrabberI::grabImageUrl(const Ice::Int index, const std::string &time, const Ice::Current &) {
+    std::string strHttpImgUrl;
+    ::RecordVideo::ByteSequence buffer = grabImage(index, time);
+
+    if (buffer.empty()) {
+        return strHttpImgUrl;
+    }
+
+    std::string strImgUrl;
+    fdfsClient.uploadFile(buffer, strImgUrl, "jpg");
+    strHttpImgUrl = appPref.getStringData("user.ip.port") + "/" + strImgUrl;
+    return strHttpImgUrl;
+}
diff --git a/QiaoJiaSystem/RecordVideo/ImageGrabberI.h b/QiaoJiaSystem/RecordVideo/ImageGrabberI.h
new file mode 100644
index 0000000..3a8be4e
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/ImageGrabberI.h
@@ -0,0 +1,21 @@
+#ifndef IMAGEGRABBERI_H
+#define IMAGEGRABBERI_H
+
+#include "RecordVideo.h"
+#include <iostream>
+#include <basic/util/fastdfs/FastdfsClient.h>
+
+class ImageGrabberI :public ::RecordVideo::ImageGrabber
+{
+public:
+    ImageGrabberI();
+
+    virtual ::RecordVideo::ByteSequence grabImage(const ::Ice::Int index,const ::std::string&time, const ::Ice::Current& = ::Ice::emptyCurrent);
+    virtual ::std::string grabImageUrl(const ::Ice::Int index,const ::std::string&time, const ::Ice::Current& = ::Ice::emptyCurrent);
+
+private:
+    std::vector<std::string> vec;
+    FastdfsClient fdfsClient;
+};
+
+#endif // IMAGEGRABBERI_H
diff --git a/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp
new file mode 100644
index 0000000..89082bb
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.cpp
@@ -0,0 +1,105 @@
+#include "LoopRecordVideoI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QDateTime>
+#include <uuid/uuid.h>
+#include "jsoncpp/json/json.h"
+
+LoopRecordVideoI::LoopRecordVideoI(int interval) : TimerElement(interval),db_c(nullptr){
+    start();
+
+}
+
+LoopRecordVideoI::~LoopRecordVideoI() {
+    qDeleteAll(m_mapRecorders);
+    if(db_c)
+    {
+        delete db_c;
+        db_c=nullptr;
+    }
+}
+
+::std::string
+LoopRecordVideoI::addCamera(const ::std::string &index, const std::string &t_str_json, const Ice::Current &) {
+    DBG(t_str_json);
+    Json::Reader reader;
+    Json::Value value;
+//"192.168.1.188/group1/M00/04/6C/wKgBvFuWLgeAJrdNAACdFDKB-U8853.jpg"
+    if (reader.parse(t_str_json, value)) {
+        // std::string filePathName = value["path"].asString();
+        // appPref.setStringData("user.loop.absolute.path", filePathName);
+        std::string t_rtsp = value["rtsp"].asString();
+
+        if (m_mapRecorders.find(index) == m_mapRecorders.end()) {
+            INFO("addCamera  <<  " << index << " time " << AppUtil::getTimeSecString());
+            uuid_t t_uuid;
+            uuid_generate(t_uuid);
+            char str[36] = {0};
+            uuid_unparse(t_uuid, str);
+            if(db_c==nullptr )
+            {
+                db_c=new LDBTool;
+            }
+            LoopVideoRecorder *pRecorder = new LoopVideoRecorder(appPref.getLongData("user.interval.duration"), index,
+                                                                 t_rtsp,std::string(str),db_c);
+            //da yin luzhi wenjian ming
+            std::lock_guard<std::mutex> lock(m_map_mutex);
+            m_mapRecorders[index] = pRecorder;
+            return std::string(str);
+        } else {
+            INFO("re addCamera  <<  " << index);
+            removeCamera(index);
+            return addCamera(index, t_str_json);
+        }
+
+    } else {
+        ERR("Json error ::  " << t_str_json);
+
+    }
+    return "";
+}
+
+void LoopRecordVideoI::removeCamera(const ::std::string &index, const Ice::Current &) {
+    if (m_mapRecorders.find(index) != m_mapRecorders.end()) {
+        INFO("removeCamera  << " << index);
+        m_mapRecorders[index]->stopTimer();
+        std::lock_guard<std::mutex> lock(m_map_mutex);
+        if (m_mapRecorders[index] != NULL) {
+            delete m_mapRecorders.value(index);
+        }
+        m_mapRecorders[index] = NULL;
+        m_mapRecorders.remove(index);
+    }
+}
+
+void LoopRecordVideoI::clearCamera(const Ice::Current &) {
+    auto iter = m_mapRecorders.begin();
+    while (iter != m_mapRecorders.end()) {
+        iter.value()->stopTimer();
+        delete iter.value();
+        iter.value() = NULL;
+        m_mapRecorders.remove(iter.key());
+        ++iter;
+    }
+}
+
+void LoopRecordVideoI::feedDog(const ::std::string &index, const Ice::Current &) {
+//    INFO("feedDog");
+    std::lock_guard<std::mutex> lock(m_mutex);
+    m_mapFeedDogTime[index] = QDateTime::currentDateTime();
+}
+
+void LoopRecordVideoI::timerFunc() {
+    m_mutex.lock();
+    auto mapFeedDogTime = m_mapFeedDogTime;
+    m_mutex.unlock();
+    auto iter = mapFeedDogTime.begin();
+    while (iter != mapFeedDogTime.end()) {
+        qint64 current = QDateTime::currentDateTime().toMSecsSinceEpoch();
+        qint64 feedDog = iter.value().toMSecsSinceEpoch();
+        qint64 sub = current - feedDog;
+        if (sub > 3000) {
+            removeCamera(iter.key());
+        }
+        ++iter;
+    }
+}
diff --git a/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h
new file mode 100644
index 0000000..b4c4b50
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopRecordVideoI.h
@@ -0,0 +1,37 @@
+#ifndef LOOPRECORDVIDEOI_H
+#define LOOPRECORDVIDEOI_H
+
+#include "RecordVideo.h"
+#include <iostream>
+#include <thread>
+#include <QtCore/QMap>
+#include "LoopVideoRecorder.h"
+#include "TimerElement.h"
+#include <mutex>
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+class LoopRecordVideoI : public ::RecordVideo::LoopRecorder, TimerElement {
+public:
+    LoopRecordVideoI(int interval = 10000);
+
+    ~LoopRecordVideoI();
+
+    ::std::string addCamera(const ::std::string &index, const ::std::string &t_rtsp, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+    void removeCamera(const ::std::string &index, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+    void clearCamera(const ::Ice::Current & = ::Ice::emptyCurrent);
+
+    void feedDog(const ::std::string &index, const ::Ice::Current & = ::Ice::emptyCurrent);
+
+    void timerFunc();
+
+private:
+
+    QMap<std::string, LoopVideoRecorder *> m_mapRecorders;
+    QMap<std::string, QDateTime> m_mapFeedDogTime;
+    std::mutex m_mutex;
+    std::mutex m_map_mutex;
+    LDBTool* db_c;
+};
+
+#endif // LOOPRECORDVIDEOI_H
diff --git a/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp
new file mode 100644
index 0000000..3c196d0
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.cpp
@@ -0,0 +1,98 @@
+#include "LoopVideoRecorder.h"
+#include <functional>
+#include <algorithm>
+#include <dirent.h>
+#include <cstdio>
+#include <QtCore/QDateTime>
+#include <basic/util/app/AppPreference.hpp>
+//#include <sys/stat.h>
+extern std::vector<std::string> forEachFile(const std::string &dir_name);
+
+//loop record video
+void LoopVideoRecorder::loopRecordVideo() {
+    std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << "  line  " << __LINE__ << std::endl;
+
+    if (m_strRtsp.empty()) {
+        ERR("rtsp涓虹┖!");
+        return;
+    }
+
+    //#todo get Path
+
+    //    std::string loopAbsPath = appPref.getStringData("user.loop.absolute.path");
+    //    std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << "  line  " << __LINE__ << std::endl;
+ //      std::string loopAbsPath = getFullFileName();
+//        if (loopAbsPath.empty()) {
+//            ERR("absolute.path涓虹┖");
+//           return ;
+//        }
+
+//        char last = loopAbsPath.back();
+//        if (last != '/') {
+//            loopAbsPath = loopAbsPath + "/";
+//        }
+
+
+
+      //  QString CmdMkdir = QString("cd %1 ; mkdir -p %2").arg(QString::fromStdString(loopAbsPath)).arg(QString::fromStdString(m_nIndex));
+       // system(CmdMkdir.toLatin1().data());
+
+        std::string fullPath = getFullFileName();
+       // std::string cmd="mkdir -p "+fullPath;
+       // system(cmd.c_str());
+        //mkdir(fullPath.c_str(),S_IRWXU);
+        if(fullPath.empty())
+        {
+            ERR("LoopVideoRecorder::getFullFileName() is empty");
+            return ;
+        }
+        m_pVideoRcd = new VideoRecorder(fullPath,m_pathId, m_strRtsp, m_nInterval,m_db);
+
+
+}
+
+void LoopVideoRecorder::stopTimer() {
+    stop();
+    wait();
+}
+
+void LoopVideoRecorder::timerFunc() {
+//    loopRecordVideo();
+}
+
+LoopVideoRecorder::LoopVideoRecorder(int interval, std::string index, std::string rtsp,std::string pathId,LDBTool* db_c)
+    : TimerElement(interval), m_nInterval(interval), m_nIndex(index), m_strRtsp(rtsp),m_pathId(pathId),m_db(db_c){
+//    start();
+//    std::cout << "File " << __FILE__ << "FUNC " << __FUNCTION__ << "  line  " << __LINE__ << std::endl;
+
+    loopRecordVideo();
+}
+
+LoopVideoRecorder::~LoopVideoRecorder() {
+    delete m_pVideoRcd;
+}
+std::string LoopVideoRecorder::getFullFileName() {
+
+    //# ./camIndex/YYYYMM/DD/camIndex-YYYYMMDDHHMMSS/
+    std::string t_FilePath = appPref.getStringData("user.loop.absolute.path");
+
+    if (t_FilePath.back() != '/') {
+        t_FilePath.push_back('/');
+    }
+    char buf[24];
+
+     time_t t=time(nullptr);
+     // 20180901113048 2018-09-01 11:30:48
+     strftime(buf,24,"%Y%m%d%H%M%S",localtime(&t));
+      std::string t_strTime(buf);
+       //# ./camIndex/YYYYMM/DD/
+     t_FilePath.append(m_nIndex + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+     //camIndex-YYYYMMDDHH/camIndex-YYYYMMDDHH/
+      t_FilePath.append(m_nIndex + "-" + t_strTime.substr(0,10) + "/");
+     std::string t_cmd = "mkdir -p '";
+    t_cmd.append(t_FilePath + "'");
+    //#get path mkdir path
+    system(t_cmd.c_str());
+
+    return t_FilePath;
+}
diff --git a/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h
new file mode 100644
index 0000000..ffbfd27
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/LoopVideoRecorder.h
@@ -0,0 +1,38 @@
+#ifndef LOOPVIDEORECORDER_H
+#define LOOPVIDEORECORDER_H
+
+#include <iostream>
+#include <thread>
+#include <functional>
+#include <unistd.h>
+#include "VideoRecorder.h"
+#include <QtCore/QObject>
+#include "TimerElement.h"
+#include <queue>
+
+class LoopVideoRecorder : public TimerElement {
+
+public:
+    explicit LoopVideoRecorder(int interval, std::string index, std::string rtsp,std::string pathId,LDBTool* db_c);
+
+    ~LoopVideoRecorder();
+
+    void loopRecordVideo();
+
+    void stopTimer();
+
+private:
+    virtual void timerFunc() override;
+    std::string getFullFileName();
+
+private:
+    std::string m_nIndex;
+    std::string m_strRtsp;
+    std::string m_pathId;
+    int m_nInterval;
+    VideoRecorder *m_pVideoRcd;
+    std::queue<VideoRecorder *> m_queManager;
+    LDBTool* m_db;
+};
+
+#endif // LOOPVIDEORECORDER_H
diff --git a/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp b/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp
new file mode 100644
index 0000000..82e8be7
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/RecordVideoI.cpp
@@ -0,0 +1,38 @@
+#include "RecordVideoI.h"
+#include <QtCore/QDateTime>
+#include <basic/util/app/AppPreference.hpp>
+
+RecordVideoI::RecordVideoI()
+{
+
+}
+
+std::string RecordVideoI::recordVideo(const std::string &rtsp, Ice::Long ms, const Ice::Current &)
+{
+    QString rtspUrl = QString::fromStdString(rtsp);
+
+    int ss = 1000;
+    int mi = ss * 60;
+    int hh = mi * 60;
+
+    long hour = ms / hh;
+    long minute = (ms - hour * hh) / mi;
+    long second = (ms - hour * hh - minute * mi) / ss;
+
+    QString strHour = QString("%1").arg(hour,2,10,QChar('0'));
+    QString strMinute = QString("%1").arg(minute,2,10,QChar('0'));
+    QString strSecond = QString("%1").arg(second,2,10,QChar('0'));
+
+    QString currentTime = QDateTime::currentDateTime().toString("yyyyMMdd_hh:mm:ss:zzz");
+    QString fileName = currentTime + ".mp4";
+    QString CmdTouch = QString("touch %1").arg(fileName);
+    QString CmdOrder = QString("LD_LIBRARY_PATH=/usr/local/cuda/lib64 ffmpeg -y -i %1 -vcodec copy -acodec copy -t %2:%3:%4 %5/%6 &")
+            .arg(rtspUrl).arg(strHour).arg(strMinute)
+            .arg(strSecond).arg(QString::fromStdString(appPref.getStringData("user.absolute.path")))
+            .arg(fileName);
+
+    system(CmdTouch.toLatin1().data());
+    system(CmdOrder.toLatin1().data());
+
+    return fileName.toStdString();
+}
diff --git a/QiaoJiaSystem/RecordVideo/RecordVideoI.h b/QiaoJiaSystem/RecordVideo/RecordVideoI.h
new file mode 100644
index 0000000..950f097
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/RecordVideoI.h
@@ -0,0 +1,14 @@
+#ifndef RECORDVIDEOI_H
+#define RECORDVIDEOI_H
+
+#include "RecordVideo.h"
+
+class RecordVideoI : public::RecordVideo::Recorder
+{
+public:
+    RecordVideoI();
+
+    virtual ::std::string recordVideo(const ::std::string& rtsp, ::Ice::Long ms, const ::Ice::Current& = ::Ice::emptyCurrent);
+};
+
+#endif // RECORDVIDEOI_H
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp b/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp
new file mode 100644
index 0000000..ae66290
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorder.cpp
@@ -0,0 +1,146 @@
+#include "VideoRecorder.h"
+#include <unistd.h>
+#include <QString>
+
+
+VideoRecorder::VideoRecorder(const std::string &fullPath,const std::string &uuid, const std::string &strRtsp, const int mseconds,LDBTool* db)
+    : m_pInFmtCtx(nullptr), m_pInVideoStream(nullptr), m_pOutFmtCtx(nullptr),
+      m_pDict(nullptr), m_pOutVideo_stream(nullptr), m_bStatus(true),/*m_thd(recodeFunc,this),*/
+      m_bStart(false), m_mseconds(mseconds), m_strfileName(""), m_uuid(uuid), m_bSave(false),
+      m_fullPath(fullPath),db_c(db){
+    m_CommonFFmpeg.init();
+    for (int i = 0; i < 3; i++) {
+        if (m_CommonFFmpeg.rtspInputOpen(strRtsp.c_str()) >= 0) {
+            m_thd = new std::thread(recodeFunc, this);
+            return;
+        }
+        usleep(20000);
+    }
+}
+
+VideoRecorder::~VideoRecorder() {
+
+    m_bSave = false;
+    m_bStatus = false;
+    m_thd->join();
+    delete m_thd;
+    m_thd = nullptr;
+    m_CommonFFmpeg.rtspInputClose();
+}
+
+void VideoRecorder::thisRecodeFunc() {
+    while (m_bStatus) {
+        //        std::string strDate;
+        //#todo get FilePath FileName
+
+        ///#todo shengcheng  luzhi wenjian ming
+
+
+
+        long lDate = getCurrentUs();
+        bool bFirstKeyFrame = true;
+        long int nFirstKeyPts = 0;
+        long int nFirstKeyDts = 0;
+
+        if (m_strfileName.empty() && !m_bSave) {
+            GetFileName(m_strfileName);
+
+            DBG("srtPath" << m_strfileName << "m_uuid" << m_uuid);
+        } else{
+            DBG("m_strfileName:" << m_strfileName);
+            DBG("m_bSave:" << m_bSave);
+        }
+
+
+        m_CommonFFmpeg.fileOutOpen(m_strfileName.c_str(), m_CommonFFmpeg.getRtspStream());
+        //#todo
+        while (m_bStatus && ((getCurrentUs() - lDate) < m_mseconds * 1000)) {
+            void *handle = m_CommonFFmpeg.rtspCreatePkg();
+            if (m_CommonFFmpeg.rtspReadPkg(handle) < 0) {
+                if(bFirstKeyFrame){
+                    ERR("rtspReadPkg m_strfileName:" << m_strfileName.c_str() << "getRtspStream:"
+                                                     << m_CommonFFmpeg.getRtspStream());
+                    usleep(20000);//20ms
+                    m_bSave = false;
+                    m_strfileName.clear();
+                    break;
+                } else{
+                    continue;
+                }
+
+            }
+
+            if (bFirstKeyFrame) {
+
+                if (m_CommonFFmpeg.isKeyFrame(handle)) {
+                    DBG("I");
+                    nFirstKeyPts = m_CommonFFmpeg.getPkgPts(handle);
+                    nFirstKeyDts = m_CommonFFmpeg.getPkgDts(handle);
+                    bFirstKeyFrame = false;
+
+                    if (!m_bSave && db_c) {
+                        if (db_c->insertRecordVedioPath(QString::fromStdString(m_uuid),
+                                                       QString::fromStdString(m_strfileName))) {
+                            m_bSave = true;
+                        } else {
+                            ERR("insertRecordVedioPath DB ERR m_uuid=" << m_uuid.c_str() << "m_strfileName="
+                                                                       << m_strfileName.c_str());
+                        }
+                    }
+                } else {
+                    //                       DBG("slice");
+                    m_CommonFFmpeg.rtspDestroyPkg(handle);
+                    continue;
+                    DBG("srtPath" << m_strfileName << "m_uuid" << m_uuid);
+                }
+            }
+            m_CommonFFmpeg.conversion(handle, nFirstKeyPts, nFirstKeyDts,
+                                      m_CommonFFmpeg.getRtspStream());
+
+            m_CommonFFmpeg.fileWritePkg(handle);
+
+            m_CommonFFmpeg.rtspDestroyPkg(handle);
+        }
+        m_CommonFFmpeg.fileOutClose();
+
+    }
+}
+
+long VideoRecorder::getCurrentUs() {
+    timeval time;
+    gettimeofday(&time, nullptr);
+    return time.tv_sec * 1000000 + time.tv_usec;
+}
+
+long VideoRecorder::getCurrentUs(std::string &strDateTime) {
+    timeval time;
+    gettimeofday(&time, nullptr);
+    __time_t sec = time.tv_sec;
+    char buf[128] = {0};
+    strftime(buf, 64, "%Y%m%d_%H:%M:%S", localtime(&sec));
+    char szDateTime[128] = {0};
+    sprintf(szDateTime, "%s/%s:%ld.mp4", m_strfileName.c_str(), buf, time.tv_usec / 1000);
+    strDateTime = szDateTime;
+    return time.tv_sec * 1000000 + time.tv_usec;
+}
+
+void VideoRecorder::recodeFunc(void *arg) {
+
+    VideoRecorder *thisPtr = (VideoRecorder *) arg;
+    thisPtr->thisRecodeFunc();
+}
+
+void VideoRecorder::GetFileName(std::string &fileName) {
+    //std::string tem="/home/basic/work_src/test_Rec/1";
+//    timeval time;
+//    gettimeofday(&time, nullptr);
+    time_t t = time(nullptr);
+
+    char buf[128] = {0};
+    strftime(buf, 64, "%Y-%m-%d %H:%M:%S", localtime(&t));
+    char szDateTime[256] = {0};
+    sprintf(szDateTime, "%s%s.mp4", m_fullPath.c_str(), buf);
+
+    fileName = szDateTime;
+    //std::cout << "File path " << fileName.c_str() << "FUNC " << __FUNCTION__ << "  line  " << __LINE__ << std::endl;
+}
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorder.h b/QiaoJiaSystem/RecordVideo/VideoRecorder.h
new file mode 100644
index 0000000..cefbed1
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorder.h
@@ -0,0 +1,56 @@
+#ifndef VIDEORECORDER_H
+#define VIDEORECORDER_H
+
+#include<thread>
+#include <basic/util/app/AppPreference.hpp>
+#include "CommonFFmpegFunc.hpp"
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+
+struct AVStream;
+struct AVDictionary;
+struct AVFormatContext;
+struct AVPacket;
+
+void ffmpegInit();
+
+class VideoRecorder {
+public:
+    VideoRecorder(const std::string& fullPath,const std::string &uuid, const std::string &strRtsp, const int mseconds,LDBTool* db);
+
+    virtual ~VideoRecorder();
+
+private:
+    AVFormatContext *m_pInFmtCtx;
+    AVStream *m_pInVideoStream;
+
+    AVFormatContext *m_pOutFmtCtx;
+    AVStream *m_pOutVideo_stream;
+    AVDictionary *m_pDict;
+    bool m_bStatus;
+
+    bool m_bStart;
+
+    std::thread *m_thd;
+
+    CommonFFmpeg m_CommonFFmpeg;
+
+    int m_mseconds;
+
+    std::string m_strfileName;
+    std::string m_uuid;
+    std::string m_fullPath;
+    LDBTool* db_c;
+    bool m_bSave;
+private:
+    void thisRecodeFunc();
+
+    long getCurrentUs();
+
+    long getCurrentUs(std::string &strDateTime);
+
+    void GetFileName(std::string &fileName);
+
+    static void recodeFunc(void *);
+};
+
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp
new file mode 100644
index 0000000..413d939
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.cpp
@@ -0,0 +1,54 @@
+#include "VideoRecorderManager.h"
+
+VideoRecorderManager::VideoRecorderManager(int interval, std::string rtsp, std::string path, std::string fileName)
+    :TimerElement(interval),m_strPath(path),m_strFileName(fileName)
+{
+    ClockTimer ct("VideoRecorderManager::VideoRecorderManager()");
+    int nCount = 0;
+    while(nCount++ < 10)
+    {
+        if (m_videoRcd.start(rtsp,path+fileName) >= 0)
+        {
+            break;
+        }
+        usleep(10000);//10ms
+    }
+
+    if (nCount >= 10)
+    {
+        ERR("open rtsp "<< rtsp <<" failed!");
+    }else
+    {
+        m_dtRecordTime = QDateTime::currentDateTime();
+        start();
+    }
+}
+
+double VideoRecorderManager::getLastUs()
+{
+    return getCurrentUs();
+}
+
+void VideoRecorderManager::threadInitial()
+{
+    lastUs = getLastUs();
+}
+
+void VideoRecorderManager::timerFunc()
+{
+    ClockTimer ct("VideoRecorderManager::timerFunc()");
+    m_videoRcd.stop();
+    if (access((m_strPath+m_strFileName).c_str(),F_OK) != 0)
+    {
+        ERR("file not exist!");
+        stop();
+        return;
+    }
+    QString strMvCmd = QString("cd %1 ; mv %2 %3")
+            .arg(QString::fromStdString(m_strPath))
+            .arg(QString::fromStdString(m_strFileName))
+            .arg(m_dtRecordTime.toString("yyyyMMdd_hh:mm:ss:zzz")+".mp4");
+    system(strMvCmd.toLatin1().data());
+
+    stop();
+}
diff --git a/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h
new file mode 100644
index 0000000..c28f2c1
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/VideoRecorderManager.h
@@ -0,0 +1,25 @@
+#ifndef VIDEORECORDERMANAGER_H
+#define VIDEORECORDERMANAGER_H
+
+#include "TimerElement.h"
+#include "VideoRecorder.h"
+#include <QtCore/QDateTime>
+
+class VideoRecorderManager : public TimerElement
+{
+public:
+    VideoRecorderManager(int interval,std::string rtsp,std::string path,std::string fileName);
+
+    virtual double getLastUs() override;
+private:
+    virtual void timerFunc() override;
+    virtual void threadInitial() override;
+private:
+    VideoRecorder m_videoRcd;
+    std::string m_strPath;
+    std::string m_strFileName;
+    QDateTime m_dtRecordTime;
+
+};
+
+#endif // VIDEORECORDERMANAGER_H
diff --git a/QiaoJiaSystem/RecordVideo/config.cfg b/QiaoJiaSystem/RecordVideo/config.cfg
new file mode 100644
index 0000000..f9cb22e
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/config.cfg
@@ -0,0 +1 @@
+Ice.Default.Locator=StructureAppRegistry/Locator:default -p 4062
\ No newline at end of file
diff --git a/QiaoJiaSystem/RecordVideo/main.cpp b/QiaoJiaSystem/RecordVideo/main.cpp
new file mode 100644
index 0000000..78d3b33
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/main.cpp
@@ -0,0 +1,93 @@
+#include <iostream>
+#include <QtCore/QDebug>
+#include <Ice/Ice.h>
+#include <IceUtil/IceUtil.h>
+#include "RecordVideoI.h"
+#include "ImageGrabberI.h"
+#include "LoopRecordVideoI.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppConfig.h>
+#include <basic/debug/Debug.h>
+
+
+using namespace std;
+
+int main2(int argc, char **argv) {
+    SAVE_APP_ARGS;
+    ENABLEGLOG("~/work/log/");
+    auto ich = Ice::initialize(argc, argv);
+
+    std::string identity = ich->getProperties()->getProperty("user.record.video.identity");
+    std::string identityCapture = ich->getProperties()->getProperty("user.capture.image.identity");
+    std::string identityLoop = ich->getProperties()->getProperty("user.loop.record.video.identity");
+    std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+    std::string absolutePath = ich->getProperties()->getProperty("user.absolute.path");
+    std::string loopAbsolutePath = ich->getProperties()->getProperty("user.loop.absolute.path");
+    std::string intervalDuration = ich->getProperties()->getProperty("user.interval.duration");
+    std::string ipPort = ich->getProperties()->getProperty("user.ip.port");
+    std::string timeOut = ich->getProperties()->getProperty("user.timeout");
+
+    appPref.setStringData("user.absolute.path", absolutePath);
+    appPref.setStringData("user.loop.absolute.path", loopAbsolutePath);
+    appPref.setLongData("user.interval.duration", atol(intervalDuration.c_str()));
+    appPref.setStringData("user.ip.port", ipPort);
+    appPref.setLongData("user.timeout", atol(timeOut.c_str()));
+
+    auto adapter = ich->createObjectAdapter(adapterName);
+    adapter->add(new RecordVideoI(), Ice::stringToIdentity(identity));
+    adapter->add(new ImageGrabberI(), Ice::stringToIdentity(identityCapture));
+    adapter->add(new LoopRecordVideoI(), Ice::stringToIdentity(identityLoop));
+    adapter->activate();
+    ich->waitForShutdown();
+
+    return 0;
+}
+
+#include "jsoncpp/json/json.h"
+
+int main(int argc, char **argv) {
+
+    SAVE_APP_ARGS;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+    auto ich = Ice::initialize(argc, argv);
+
+    std::string identity = "RecordVideoServer";
+    std::string identityCapture = "CaptureVideoImgServer";
+    std::string identityLoop = "LoopRecordVideoServer";
+    std::string adapterName = "RecordVideoServerAdapter";
+    std::string absolutePath = "build";
+    // std::string loopAbsolutePath = "/home/bsk/test/";
+    std::string loopAbsolutePath = appConfig.getStringProperty("cutPath");
+    std::string intervalDuration = "600000";
+    std::string ipPort = "192.168.1.65:8888";
+    std::string timeOut = "6000000";
+
+    appPref.setStringData("user.absolute.path", absolutePath);
+    appPref.setStringData("user.loop.absolute.path", loopAbsolutePath);
+    appPref.setLongData("user.interval.duration", atol(intervalDuration.c_str()));
+    appPref.setStringData("user.ip.port", ipPort);
+    appPref.setLongData("user.timeout", atol(timeOut.c_str()));
+
+//    auto adapter = ich->createObjectAdapter(adapterName);
+//    adapter->add(new RecordVideoI(), Ice::stringToIdentity(identity));
+//    adapter->add(new ImageGrabberI(), Ice::stringToIdentity(identityCapture));
+//    adapter->add(new LoopRecordVideoI(), Ice::stringToIdentity(identityLoop));
+//    adapter->activate();
+//    ich->waitForShutdown();
+
+//    Ice::ObjectAdapterPtr adapter = ich->createObjectAdapterWithEndpoints(identityLoop + "Adapter",
+//                                                                          " tcp -p " + std::to_string(10010));
+//
+//    adapter->add(new LoopRecordVideoI, Ice::stringToIdentity(identityLoop));
+//    adapter->activate();
+//    ich->waitForShutdown();
+
+    IceRpcServer<LoopRecordVideoI> server("LoopRecordVideoServer", 10010, "tcp");
+    server.setMessageSizeMax(1024 * 1024 * 50);
+    server.setPoolInitSize(5);
+    server.setPoolMaxSize(32);
+    server.runWaitShutDown();
+
+    return 0;
+}
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp
new file mode 100644
index 0000000..ab59d89
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.cpp
@@ -0,0 +1,1385 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `RecordVideo.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <RecordVideo.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+#   pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+#   pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_RecordVideo_Recorder_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::Recorder"
+};
+const ::std::string iceC_RecordVideo_Recorder_ops[] =
+{
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "recordVideo"
+};
+const ::std::string iceC_RecordVideo_Recorder_recordVideo_name = "recordVideo";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::ImageGrabber"
+};
+const ::std::string iceC_RecordVideo_ImageGrabber_ops[] =
+{
+    "grabImage",
+    "grabImageUrl",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImage_name = "grabImage";
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImageUrl_name = "grabImageUrl";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::LoopRecorder"
+};
+const ::std::string iceC_RecordVideo_LoopRecorder_ops[] =
+{
+    "addCamera",
+    "clearCamera",
+    "feedDog",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "removeCamera"
+};
+const ::std::string iceC_RecordVideo_LoopRecorder_addCamera_name = "addCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_removeCamera_name = "removeCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_clearCamera_name = "clearCamera";
+const ::std::string iceC_RecordVideo_LoopRecorder_feedDog_name = "feedDog";
+
+}
+
+bool
+RecordVideo::Recorder::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_Recorder_ids, iceC_RecordVideo_Recorder_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::Recorder::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_RecordVideo_Recorder_ids[0], &iceC_RecordVideo_Recorder_ids[2]);
+}
+
+::std::string
+RecordVideo::Recorder::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_staticId()
+{
+    static const ::std::string typeId = "::RecordVideo::Recorder";
+    return typeId;
+}
+
+bool
+RecordVideo::Recorder::_iceD_recordVideo(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::std::string iceP_rtsp;
+    long long int iceP_ms;
+    istr->readAll(iceP_rtsp, iceP_ms);
+    inS.endReadParams();
+    ::std::string ret = this->recordVideo(::std::move(iceP_rtsp), iceP_ms, current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::Recorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_Recorder_ops, iceC_RecordVideo_Recorder_ops + 5, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_Recorder_ops)
+    {
+        case 0:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 1:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 4:
+        {
+            return _iceD_recordVideo(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+bool
+RecordVideo::ImageGrabber::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_ImageGrabber_ids, iceC_RecordVideo_ImageGrabber_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::ImageGrabber::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_RecordVideo_ImageGrabber_ids[0], &iceC_RecordVideo_ImageGrabber_ids[2]);
+}
+
+::std::string
+RecordVideo::ImageGrabber::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_staticId()
+{
+    static const ::std::string typeId = "::RecordVideo::ImageGrabber";
+    return typeId;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImage(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_index;
+    ::std::string iceP_time;
+    istr->readAll(iceP_index, iceP_time);
+    inS.endReadParams();
+    ::RecordVideo::ByteSequence ret = this->grabImage(iceP_index, ::std::move(iceP_time), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImageUrl(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_index;
+    ::std::string iceP_time;
+    istr->readAll(iceP_index, iceP_time);
+    inS.endReadParams();
+    ::std::string ret = this->grabImageUrl(iceP_index, ::std::move(iceP_time), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_ImageGrabber_ops, iceC_RecordVideo_ImageGrabber_ops + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_ImageGrabber_ops)
+    {
+        case 0:
+        {
+            return _iceD_grabImage(in, current);
+        }
+        case 1:
+        {
+            return _iceD_grabImageUrl(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+bool
+RecordVideo::LoopRecorder::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_LoopRecorder_ids, iceC_RecordVideo_LoopRecorder_ids + 2, s);
+}
+
+::std::vector<::std::string>
+RecordVideo::LoopRecorder::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_RecordVideo_LoopRecorder_ids[0], &iceC_RecordVideo_LoopRecorder_ids[2]);
+}
+
+::std::string
+RecordVideo::LoopRecorder::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_staticId()
+{
+    static const ::std::string typeId = "::RecordVideo::LoopRecorder";
+    return typeId;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::std::string iceP_index;
+    ::std::string iceP_rtsp;
+    istr->readAll(iceP_index, iceP_rtsp);
+    inS.endReadParams();
+    ::std::string ret = this->addCamera(::std::move(iceP_index), ::std::move(iceP_rtsp), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::std::string iceP_index;
+    istr->readAll(iceP_index);
+    inS.endReadParams();
+    this->removeCamera(::std::move(iceP_index), current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_clearCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    inS.readEmptyParams();
+    this->clearCamera(current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_feedDog(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    ::std::string iceP_index;
+    istr->readAll(iceP_index);
+    inS.endReadParams();
+    this->feedDog(::std::move(iceP_index), current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_LoopRecorder_ops, iceC_RecordVideo_LoopRecorder_ops + 8, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_LoopRecorder_ops)
+    {
+        case 0:
+        {
+            return _iceD_addCamera(in, current);
+        }
+        case 1:
+        {
+            return _iceD_clearCamera(in, current);
+        }
+        case 2:
+        {
+            return _iceD_feedDog(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 6:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 7:
+        {
+            return _iceD_removeCamera(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+RecordVideo::RecorderPrx::_iceI_recordVideo(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_RecordVideo_Recorder_recordVideo_name);
+    outAsync->invoke(iceC_RecordVideo_Recorder_recordVideo_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_rtsp, iceP_ms);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::RecorderPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<RecorderPrx>();
+}
+
+const ::std::string&
+RecordVideo::RecorderPrx::ice_staticId()
+{
+    return RecordVideo::Recorder::ice_staticId();
+}
+
+void
+RecordVideo::ImageGrabberPrx::_iceI_grabImage(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::RecordVideo::ByteSequence>>& outAsync, int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImage_name);
+    outAsync->invoke(iceC_RecordVideo_ImageGrabber_grabImage_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index, iceP_time);
+        },
+        nullptr);
+}
+
+void
+RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+    outAsync->invoke(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index, iceP_time);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::ImageGrabberPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<ImageGrabberPrx>();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabberPrx::ice_staticId()
+{
+    return RecordVideo::ImageGrabber::ice_staticId();
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_RecordVideo_LoopRecorder_addCamera_name);
+    outAsync->invoke(iceC_RecordVideo_LoopRecorder_addCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index, iceP_rtsp);
+        },
+        nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::std::string& iceP_index, const ::Ice::Context& context)
+{
+    outAsync->invoke(iceC_RecordVideo_LoopRecorder_removeCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index);
+        },
+        nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_clearCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::Ice::Context& context)
+{
+    outAsync->invoke(iceC_RecordVideo_LoopRecorder_clearCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        nullptr,
+        nullptr);
+}
+
+void
+RecordVideo::LoopRecorderPrx::_iceI_feedDog(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>& outAsync, const ::std::string& iceP_index, const ::Ice::Context& context)
+{
+    outAsync->invoke(iceC_RecordVideo_LoopRecorder_feedDog_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+RecordVideo::LoopRecorderPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<LoopRecorderPrx>();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorderPrx::ice_staticId()
+{
+    return RecordVideo::LoopRecorder::ice_staticId();
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_RecordVideo_Recorder_recordVideo_name = "recordVideo";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImage_name = "grabImage";
+
+const ::std::string iceC_RecordVideo_ImageGrabber_grabImageUrl_name = "grabImageUrl";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_addCamera_name = "addCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_removeCamera_name = "removeCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_clearCamera_name = "clearCamera";
+
+const ::std::string iceC_RecordVideo_LoopRecorder_feedDog_name = "feedDog";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::Recorder* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::RecordVideo::Recorder;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::Recorder::_iceI_begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_RecordVideo_Recorder_recordVideo_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_Recorder_recordVideo_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_Recorder_recordVideo_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_rtsp);
+        ostr->write(iceP_ms);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_Recorder_recordVideo_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::std::string
+IceProxy::RecordVideo::Recorder::end_recordVideo(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_Recorder_recordVideo_name);
+    ::std::string ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::Recorder::_newInstance() const
+{
+    return new Recorder;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::Recorder::ice_staticId()
+{
+    return ::RecordVideo::Recorder::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::ImageGrabber* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::RecordVideo::ImageGrabber;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::ImageGrabber::_iceI_begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImage_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_ImageGrabber_grabImage_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_ImageGrabber_grabImage_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        ostr->write(iceP_time);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_ImageGrabber_grabImage_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::RecordVideo::ByteSequence
+IceProxy::RecordVideo::ImageGrabber::end_grabImage(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_ImageGrabber_grabImage_name);
+    ::RecordVideo::ByteSequence ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::ImageGrabber::_iceI_begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_ImageGrabber_grabImageUrl_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_ImageGrabber_grabImageUrl_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        ostr->write(iceP_time);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::std::string
+IceProxy::RecordVideo::ImageGrabber::end_grabImageUrl(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_ImageGrabber_grabImageUrl_name);
+    ::std::string ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::ImageGrabber::_newInstance() const
+{
+    return new ImageGrabber;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::ImageGrabber::ice_staticId()
+{
+    return ::RecordVideo::ImageGrabber::ice_staticId();
+}
+::IceProxy::Ice::Object* ::IceProxy::RecordVideo::upCast(::IceProxy::RecordVideo::LoopRecorder* p) { return p; }
+
+void
+::IceProxy::RecordVideo::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::RecordVideo::LoopRecorder;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_RecordVideo_LoopRecorder_addCamera_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_addCamera_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_LoopRecorder_addCamera_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        ostr->write(iceP_rtsp);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_LoopRecorder_addCamera_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::std::string
+IceProxy::RecordVideo::LoopRecorder::end_addCamera(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_RecordVideo_LoopRecorder_addCamera_name);
+    ::std::string ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_removeCamera_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_LoopRecorder_removeCamera_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_LoopRecorder_removeCamera_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_removeCamera(const ::Ice::AsyncResultPtr& result)
+{
+    _end(result, iceC_RecordVideo_LoopRecorder_removeCamera_name);
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_clearCamera(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_clearCamera_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_LoopRecorder_clearCamera_name, ::Ice::Normal, context);
+        result->writeEmptyParams();
+        result->invoke(iceC_RecordVideo_LoopRecorder_clearCamera_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_clearCamera(const ::Ice::AsyncResultPtr& result)
+{
+    _end(result, iceC_RecordVideo_LoopRecorder_clearCamera_name);
+}
+
+::Ice::AsyncResultPtr
+IceProxy::RecordVideo::LoopRecorder::_iceI_begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_RecordVideo_LoopRecorder_feedDog_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_RecordVideo_LoopRecorder_feedDog_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        result->endWriteParams();
+        result->invoke(iceC_RecordVideo_LoopRecorder_feedDog_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+void
+IceProxy::RecordVideo::LoopRecorder::end_feedDog(const ::Ice::AsyncResultPtr& result)
+{
+    _end(result, iceC_RecordVideo_LoopRecorder_feedDog_name);
+}
+
+::IceProxy::Ice::Object*
+IceProxy::RecordVideo::LoopRecorder::_newInstance() const
+{
+    return new LoopRecorder;
+}
+
+const ::std::string&
+IceProxy::RecordVideo::LoopRecorder::ice_staticId()
+{
+    return ::RecordVideo::LoopRecorder::ice_staticId();
+}
+
+RecordVideo::Recorder::~Recorder()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::Recorder* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_Recorder_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::Recorder"
+};
+
+}
+
+bool
+RecordVideo::Recorder::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_Recorder_ids, iceC_RecordVideo_Recorder_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::Recorder::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_RecordVideo_Recorder_ids[0], &iceC_RecordVideo_Recorder_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::Recorder::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::RecordVideo::Recorder";
+    return typeId;
+#else
+    return iceC_RecordVideo_Recorder_ids[1];
+#endif
+}
+
+bool
+RecordVideo::Recorder::_iceD_recordVideo(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::std::string iceP_rtsp;
+    ::Ice::Long iceP_ms;
+    istr->read(iceP_rtsp);
+    istr->read(iceP_ms);
+    inS.endReadParams();
+    ::std::string ret = this->recordVideo(iceP_rtsp, iceP_ms, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_Recorder_all[] =
+{
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "recordVideo"
+};
+
+}
+
+bool
+RecordVideo::Recorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_Recorder_all, iceC_RecordVideo_Recorder_all + 5, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_Recorder_all)
+    {
+        case 0:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 1:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 4:
+        {
+            return _iceD_recordVideo(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+RecordVideo::Recorder::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::RecordVideo::Recorder, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+RecordVideo::Recorder::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::RecordVideo::Recorder, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(RecorderPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::RecordVideo::RecorderPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::RecordVideo::Recorder::ice_staticId(), v);
+    }
+}
+
+RecordVideo::ImageGrabber::~ImageGrabber()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::ImageGrabber* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_ImageGrabber_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::ImageGrabber"
+};
+
+}
+
+bool
+RecordVideo::ImageGrabber::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_ImageGrabber_ids, iceC_RecordVideo_ImageGrabber_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::ImageGrabber::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_RecordVideo_ImageGrabber_ids[0], &iceC_RecordVideo_ImageGrabber_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::ImageGrabber::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::RecordVideo::ImageGrabber";
+    return typeId;
+#else
+    return iceC_RecordVideo_ImageGrabber_ids[1];
+#endif
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImage(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_index;
+    ::std::string iceP_time;
+    istr->read(iceP_index);
+    istr->read(iceP_time);
+    inS.endReadParams();
+    ::RecordVideo::ByteSequence ret = this->grabImage(iceP_index, iceP_time, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::ImageGrabber::_iceD_grabImageUrl(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_index;
+    ::std::string iceP_time;
+    istr->read(iceP_index);
+    istr->read(iceP_time);
+    inS.endReadParams();
+    ::std::string ret = this->grabImageUrl(iceP_index, iceP_time, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_ImageGrabber_all[] =
+{
+    "grabImage",
+    "grabImageUrl",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+
+}
+
+bool
+RecordVideo::ImageGrabber::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_ImageGrabber_all, iceC_RecordVideo_ImageGrabber_all + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_ImageGrabber_all)
+    {
+        case 0:
+        {
+            return _iceD_grabImage(in, current);
+        }
+        case 1:
+        {
+            return _iceD_grabImageUrl(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+RecordVideo::ImageGrabber::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::RecordVideo::ImageGrabber, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+RecordVideo::ImageGrabber::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::RecordVideo::ImageGrabber, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(ImageGrabberPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::RecordVideo::ImageGrabberPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::RecordVideo::ImageGrabber::ice_staticId(), v);
+    }
+}
+
+RecordVideo::LoopRecorder::~LoopRecorder()
+{
+}
+
+::Ice::Object* RecordVideo::upCast(::RecordVideo::LoopRecorder* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_RecordVideo_LoopRecorder_ids[2] =
+{
+    "::Ice::Object",
+    "::RecordVideo::LoopRecorder"
+};
+
+}
+
+bool
+RecordVideo::LoopRecorder::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_RecordVideo_LoopRecorder_ids, iceC_RecordVideo_LoopRecorder_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+RecordVideo::LoopRecorder::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_RecordVideo_LoopRecorder_ids[0], &iceC_RecordVideo_LoopRecorder_ids[2]);
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+RecordVideo::LoopRecorder::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::RecordVideo::LoopRecorder";
+    return typeId;
+#else
+    return iceC_RecordVideo_LoopRecorder_ids[1];
+#endif
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::std::string iceP_index;
+    ::std::string iceP_rtsp;
+    istr->read(iceP_index);
+    istr->read(iceP_rtsp);
+    inS.endReadParams();
+    ::std::string ret = this->addCamera(iceP_index, iceP_rtsp, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::std::string iceP_index;
+    istr->read(iceP_index);
+    inS.endReadParams();
+    this->removeCamera(iceP_index, current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_clearCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    inS.readEmptyParams();
+    this->clearCamera(current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+bool
+RecordVideo::LoopRecorder::_iceD_feedDog(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::std::string iceP_index;
+    istr->read(iceP_index);
+    inS.endReadParams();
+    this->feedDog(iceP_index, current);
+    inS.writeEmptyParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_RecordVideo_LoopRecorder_all[] =
+{
+    "addCamera",
+    "clearCamera",
+    "feedDog",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "removeCamera"
+};
+
+}
+
+bool
+RecordVideo::LoopRecorder::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_RecordVideo_LoopRecorder_all, iceC_RecordVideo_LoopRecorder_all + 8, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_RecordVideo_LoopRecorder_all)
+    {
+        case 0:
+        {
+            return _iceD_addCamera(in, current);
+        }
+        case 1:
+        {
+            return _iceD_clearCamera(in, current);
+        }
+        case 2:
+        {
+            return _iceD_feedDog(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 6:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 7:
+        {
+            return _iceD_removeCamera(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+RecordVideo::LoopRecorder::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::RecordVideo::LoopRecorder, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+RecordVideo::LoopRecorder::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::RecordVideo::LoopRecorder, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+RecordVideo::_icePatchObjectPtr(LoopRecorderPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::RecordVideo::LoopRecorderPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::RecordVideo::LoopRecorder::ice_staticId(), v);
+    }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h
new file mode 100644
index 0000000..b6c1647
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.h
@@ -0,0 +1,1571 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `RecordVideo.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __RecordVideo_h__
+#define __RecordVideo_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace RecordVideo
+{
+
+class Recorder;
+class RecorderPrx;
+class ImageGrabber;
+class ImageGrabberPrx;
+class LoopRecorder;
+class LoopRecorderPrx;
+
+}
+
+namespace RecordVideo
+{
+
+using ByteSequence = ::std::vector<::Ice::Byte>;
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = RecorderPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::std::string recordVideo(::std::string, long long int, const ::Ice::Current&) = 0;
+    bool _iceD_recordVideo(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class ImageGrabber : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = ImageGrabberPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::RecordVideo::ByteSequence grabImage(int, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_grabImage(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::std::string grabImageUrl(int, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_grabImageUrl(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+class LoopRecorder : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = LoopRecorderPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::std::string addCamera(::std::string, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void removeCamera(::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void clearCamera(const ::Ice::Current&) = 0;
+    bool _iceD_clearCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void feedDog(::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_feedDog(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace RecordVideo
+{
+
+class RecorderPrx : public virtual ::Ice::Proxy<RecorderPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::std::string recordVideo(const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto recordVideoAsync(const ::std::string& iceP_rtsp, long long int iceP_ms, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::std::string>>().get_future())
+    {
+        return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context);
+    }
+
+    ::std::function<void()>
+    recordVideoAsync(const ::std::string& iceP_rtsp, long long int iceP_ms,
+                     ::std::function<void(::std::string)> response,
+                     ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                     ::std::function<void(bool)> sent = nullptr,
+                     const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::RecorderPrx::_iceI_recordVideo, iceP_rtsp, iceP_ms, context);
+    }
+
+    void _iceI_recordVideo(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, const ::std::string&, long long int, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    RecorderPrx() = default;
+    friend ::std::shared_ptr<RecorderPrx> IceInternal::createProxy<RecorderPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class ImageGrabberPrx : public virtual ::Ice::Proxy<ImageGrabberPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::RecordVideo::ByteSequence grabImage(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::RecordVideo::ByteSequence>(true, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto grabImageAsync(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::RecordVideo::ByteSequence>>().get_future())
+    {
+        return _makePromiseOutgoing<::RecordVideo::ByteSequence, P>(false, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context);
+    }
+
+    ::std::function<void()>
+    grabImageAsync(int iceP_index, const ::std::string& iceP_time,
+                   ::std::function<void(::RecordVideo::ByteSequence)> response,
+                   ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                   ::std::function<void(bool)> sent = nullptr,
+                   const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::RecordVideo::ByteSequence>(response, ex, sent, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImage, iceP_index, iceP_time, context);
+    }
+
+    void _iceI_grabImage(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::RecordVideo::ByteSequence>>&, int, const ::std::string&, const ::Ice::Context&);
+
+    ::std::string grabImageUrl(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto grabImageUrlAsync(int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::std::string>>().get_future())
+    {
+        return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context);
+    }
+
+    ::std::function<void()>
+    grabImageUrlAsync(int iceP_index, const ::std::string& iceP_time,
+                      ::std::function<void(::std::string)> response,
+                      ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                      ::std::function<void(bool)> sent = nullptr,
+                      const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::ImageGrabberPrx::_iceI_grabImageUrl, iceP_index, iceP_time, context);
+    }
+
+    void _iceI_grabImageUrl(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, int, const ::std::string&, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    ImageGrabberPrx() = default;
+    friend ::std::shared_ptr<ImageGrabberPrx> IceInternal::createProxy<ImageGrabberPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+class LoopRecorderPrx : public virtual ::Ice::Proxy<LoopRecorderPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::std::string addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::std::string>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto addCameraAsync(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::std::string>>().get_future())
+    {
+        return _makePromiseOutgoing<::std::string, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context);
+    }
+
+    ::std::function<void()>
+    addCameraAsync(const ::std::string& iceP_index, const ::std::string& iceP_rtsp,
+                   ::std::function<void(::std::string)> response,
+                   ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                   ::std::function<void(bool)> sent = nullptr,
+                   const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_addCamera, iceP_index, iceP_rtsp, context);
+    }
+
+    void _iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, const ::std::string&, const ::std::string&, const ::Ice::Context&);
+
+    void removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto removeCameraAsync(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<void>>().get_future())
+    {
+        return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context);
+    }
+
+    ::std::function<void()>
+    removeCameraAsync(const ::std::string& iceP_index,
+                      ::std::function<void()> response,
+                      ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                      ::std::function<void(bool)> sent = nullptr,
+                      const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_removeCamera, iceP_index, context);
+    }
+
+    void _iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::std::string&, const ::Ice::Context&);
+
+    void clearCamera(const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto clearCameraAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<void>>().get_future())
+    {
+        return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context);
+    }
+
+    ::std::function<void()>
+    clearCameraAsync(::std::function<void()> response,
+                     ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                     ::std::function<void(bool)> sent = nullptr,
+                     const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_clearCamera, context);
+    }
+
+    void _iceI_clearCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::Ice::Context&);
+
+    void feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        _makePromiseOutgoing<void>(true, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto feedDogAsync(const ::std::string& iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<void>>().get_future())
+    {
+        return _makePromiseOutgoing<void, P>(false, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context);
+    }
+
+    ::std::function<void()>
+    feedDogAsync(const ::std::string& iceP_index,
+                 ::std::function<void()> response,
+                 ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                 ::std::function<void(bool)> sent = nullptr,
+                 const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<void>(response, ex, sent, this, &RecordVideo::LoopRecorderPrx::_iceI_feedDog, iceP_index, context);
+    }
+
+    void _iceI_feedDog(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<void>>&, const ::std::string&, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    LoopRecorderPrx() = default;
+    friend ::std::shared_ptr<LoopRecorderPrx> IceInternal::createProxy<LoopRecorderPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace RecordVideo
+{
+
+using RecorderPtr = ::std::shared_ptr<Recorder>;
+using RecorderPrxPtr = ::std::shared_ptr<RecorderPrx>;
+
+using ImageGrabberPtr = ::std::shared_ptr<ImageGrabber>;
+using ImageGrabberPrxPtr = ::std::shared_ptr<ImageGrabberPrx>;
+
+using LoopRecorderPtr = ::std::shared_ptr<LoopRecorder>;
+using LoopRecorderPrxPtr = ::std::shared_ptr<LoopRecorderPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace RecordVideo
+{
+
+class Recorder;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::Recorder*);
+
+class ImageGrabber;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::ImageGrabber*);
+
+class LoopRecorder;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::RecordVideo::LoopRecorder*);
+
+}
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder;
+::Ice::Object* upCast(::RecordVideo::Recorder*);
+typedef ::IceInternal::Handle< ::RecordVideo::Recorder> RecorderPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::Recorder> RecorderPrx;
+typedef RecorderPrx RecorderPrxPtr;
+void _icePatchObjectPtr(RecorderPtr&, const ::Ice::ObjectPtr&);
+
+class ImageGrabber;
+::Ice::Object* upCast(::RecordVideo::ImageGrabber*);
+typedef ::IceInternal::Handle< ::RecordVideo::ImageGrabber> ImageGrabberPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::ImageGrabber> ImageGrabberPrx;
+typedef ImageGrabberPrx ImageGrabberPrxPtr;
+void _icePatchObjectPtr(ImageGrabberPtr&, const ::Ice::ObjectPtr&);
+
+class LoopRecorder;
+::Ice::Object* upCast(::RecordVideo::LoopRecorder*);
+typedef ::IceInternal::Handle< ::RecordVideo::LoopRecorder> LoopRecorderPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::RecordVideo::LoopRecorder> LoopRecorderPrx;
+typedef LoopRecorderPrx LoopRecorderPrxPtr;
+void _icePatchObjectPtr(LoopRecorderPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace RecordVideo
+{
+
+typedef ::std::vector< ::Ice::Byte> ByteSequence;
+
+}
+
+namespace RecordVideo
+{
+
+class Callback_Recorder_recordVideo_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_Recorder_recordVideo_Base> Callback_Recorder_recordVideoPtr;
+
+class Callback_ImageGrabber_grabImage_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_ImageGrabber_grabImage_Base> Callback_ImageGrabber_grabImagePtr;
+
+class Callback_ImageGrabber_grabImageUrl_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_ImageGrabber_grabImageUrl_Base> Callback_ImageGrabber_grabImageUrlPtr;
+
+class Callback_LoopRecorder_addCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_addCamera_Base> Callback_LoopRecorder_addCameraPtr;
+
+class Callback_LoopRecorder_removeCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_removeCamera_Base> Callback_LoopRecorder_removeCameraPtr;
+
+class Callback_LoopRecorder_clearCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_clearCamera_Base> Callback_LoopRecorder_clearCameraPtr;
+
+class Callback_LoopRecorder_feedDog_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_LoopRecorder_feedDog_Base> Callback_LoopRecorder_feedDogPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Proxy<Recorder, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::std::string recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_recordVideo(_iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::RecordVideo::Callback_Recorder_recordVideoPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_recordVideo(const ::std::string& iceP_rtsp, ::Ice::Long iceP_ms, const ::Ice::Context& context, const ::RecordVideo::Callback_Recorder_recordVideoPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_recordVideo(iceP_rtsp, iceP_ms, context, del, cookie);
+    }
+
+    ::std::string end_recordVideo(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_recordVideo(const ::std::string&, ::Ice::Long, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class ImageGrabber : public virtual ::Ice::Proxy<ImageGrabber, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::RecordVideo::ByteSequence grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_grabImage(_iceI_begin_grabImage(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_grabImage(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImage(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImage(iceP_index, iceP_time, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::RecordVideo::Callback_ImageGrabber_grabImagePtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImage(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImage(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::RecordVideo::Callback_ImageGrabber_grabImagePtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImage(iceP_index, iceP_time, context, del, cookie);
+    }
+
+    ::RecordVideo::ByteSequence end_grabImage(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_grabImage(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::std::string grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_grabImageUrl(_iceI_begin_grabImageUrl(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImageUrl(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::RecordVideo::Callback_ImageGrabber_grabImageUrlPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImageUrl(iceP_index, iceP_time, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_grabImageUrl(::Ice::Int iceP_index, const ::std::string& iceP_time, const ::Ice::Context& context, const ::RecordVideo::Callback_ImageGrabber_grabImageUrlPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_grabImageUrl(iceP_index, iceP_time, context, del, cookie);
+    }
+
+    ::std::string end_grabImageUrl(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_grabImageUrl(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+class LoopRecorder : public virtual ::Ice::Proxy<LoopRecorder, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::std::string addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_addCamera(_iceI_begin_addCamera(iceP_index, iceP_rtsp, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_rtsp, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::RecordVideo::Callback_LoopRecorder_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_rtsp, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(const ::std::string& iceP_index, const ::std::string& iceP_rtsp, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_rtsp, context, del, cookie);
+    }
+
+    ::std::string end_addCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_addCamera(const ::std::string&, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    void removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        end_removeCamera(_iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::RecordVideo::Callback_LoopRecorder_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(const ::std::string& iceP_index, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+    }
+
+    void end_removeCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_removeCamera(const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    void clearCamera(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        end_clearCamera(_iceI_begin_clearCamera(context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_clearCamera(context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_clearCamera(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_clearCamera(context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_clearCamera(const ::RecordVideo::Callback_LoopRecorder_clearCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_clearCamera(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_clearCamera(const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_clearCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_clearCamera(context, del, cookie);
+    }
+
+    void end_clearCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_clearCamera(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    void feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        end_feedDog(_iceI_begin_feedDog(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_feedDog(iceP_index, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_feedDog(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_feedDog(iceP_index, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::RecordVideo::Callback_LoopRecorder_feedDogPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_feedDog(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_feedDog(const ::std::string& iceP_index, const ::Ice::Context& context, const ::RecordVideo::Callback_LoopRecorder_feedDogPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_feedDog(iceP_index, context, del, cookie);
+    }
+
+    void end_feedDog(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_feedDog(const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace RecordVideo
+{
+
+class Recorder : public virtual ::Ice::Object
+{
+public:
+
+    typedef RecorderPrx ProxyType;
+    typedef RecorderPtr PointerType;
+
+    virtual ~Recorder();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::std::string recordVideo(const ::std::string&, ::Ice::Long, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_recordVideo(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const Recorder& lhs, const Recorder& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const Recorder& lhs, const Recorder& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class ImageGrabber : public virtual ::Ice::Object
+{
+public:
+
+    typedef ImageGrabberPrx ProxyType;
+    typedef ImageGrabberPtr PointerType;
+
+    virtual ~ImageGrabber();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::RecordVideo::ByteSequence grabImage(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_grabImage(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::std::string grabImageUrl(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_grabImageUrl(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const ImageGrabber& lhs, const ImageGrabber& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const ImageGrabber& lhs, const ImageGrabber& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+class LoopRecorder : public virtual ::Ice::Object
+{
+public:
+
+    typedef LoopRecorderPrx ProxyType;
+    typedef LoopRecorderPtr PointerType;
+
+    virtual ~LoopRecorder();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::std::string addCamera(const ::std::string&, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void removeCamera(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void clearCamera(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_clearCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual void feedDog(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_feedDog(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const LoopRecorder& lhs, const LoopRecorder& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const LoopRecorder& lhs, const LoopRecorder& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace RecordVideo
+{
+
+template<class T>
+class CallbackNC_Recorder_recordVideo : public Callback_Recorder_recordVideo_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::std::string&);
+
+    CallbackNC_Recorder_recordVideo(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::RecorderPrx proxy = ::RecordVideo::RecorderPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_recordVideo(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_Recorder_recordVideo<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_Recorder_recordVideo<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_Recorder_recordVideo : public Callback_Recorder_recordVideo_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::std::string&, const CT&);
+
+    Callback_Recorder_recordVideo(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::RecorderPrx proxy = ::RecordVideo::RecorderPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_recordVideo(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_Recorder_recordVideo<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_Recorder_recordVideoPtr
+newCallback_Recorder_recordVideo(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_Recorder_recordVideo<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_ImageGrabber_grabImage : public Callback_ImageGrabber_grabImage_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::RecordVideo::ByteSequence&);
+
+    CallbackNC_ImageGrabber_grabImage(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+        ::RecordVideo::ByteSequence ret;
+        try
+        {
+            ret = proxy->end_grabImage(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::RecordVideo::ByteSequence&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_ImageGrabber_grabImage<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(T* instance, void (T::*cb)(const ::RecordVideo::ByteSequence&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_ImageGrabber_grabImage<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_ImageGrabber_grabImage : public Callback_ImageGrabber_grabImage_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::RecordVideo::ByteSequence&, const CT&);
+
+    Callback_ImageGrabber_grabImage(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+        ::RecordVideo::ByteSequence ret;
+        try
+        {
+            ret = proxy->end_grabImage(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::RecordVideo::ByteSequence&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_ImageGrabber_grabImage<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_ImageGrabber_grabImagePtr
+newCallback_ImageGrabber_grabImage(T* instance, void (T::*cb)(const ::RecordVideo::ByteSequence&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_ImageGrabber_grabImage<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_ImageGrabber_grabImageUrl : public Callback_ImageGrabber_grabImageUrl_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::std::string&);
+
+    CallbackNC_ImageGrabber_grabImageUrl(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_grabImageUrl(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_ImageGrabber_grabImageUrl<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_ImageGrabber_grabImageUrl<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_ImageGrabber_grabImageUrl : public Callback_ImageGrabber_grabImageUrl_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::std::string&, const CT&);
+
+    Callback_ImageGrabber_grabImageUrl(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::ImageGrabberPrx proxy = ::RecordVideo::ImageGrabberPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_grabImageUrl(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_ImageGrabber_grabImageUrl<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_ImageGrabber_grabImageUrlPtr
+newCallback_ImageGrabber_grabImageUrl(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_ImageGrabber_grabImageUrl<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_addCamera : public Callback_LoopRecorder_addCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::std::string&);
+
+    CallbackNC_LoopRecorder_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::LoopRecorderPrx proxy = ::RecordVideo::LoopRecorderPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_addCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_addCamera : public Callback_LoopRecorder_addCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::std::string&, const CT&);
+
+    Callback_LoopRecorder_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::RecordVideo::LoopRecorderPrx proxy = ::RecordVideo::LoopRecorderPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_addCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_addCameraPtr
+newCallback_LoopRecorder_addCamera(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_removeCamera : public Callback_LoopRecorder_removeCamera_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)();
+
+    CallbackNC_LoopRecorder_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_removeCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_removeCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_removeCamera : public Callback_LoopRecorder_removeCamera_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const CT&);
+
+    Callback_LoopRecorder_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_removeCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_removeCameraPtr
+newCallback_LoopRecorder_removeCamera(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_removeCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_clearCamera : public Callback_LoopRecorder_clearCamera_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)();
+
+    CallbackNC_LoopRecorder_clearCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_clearCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_clearCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_clearCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_clearCamera<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_clearCamera : public Callback_LoopRecorder_clearCamera_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const CT&);
+
+    Callback_LoopRecorder_clearCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_clearCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_clearCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_clearCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_clearCameraPtr
+newCallback_LoopRecorder_clearCamera(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_clearCamera<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_LoopRecorder_feedDog : public Callback_LoopRecorder_feedDog_Base, public ::IceInternal::OnewayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)();
+
+    CallbackNC_LoopRecorder_feedDog(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallbackNC<T>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_feedDog<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_feedDog<T>(instance, 0, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*cb)(), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_feedDog<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_LoopRecorder_feedDog<T>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_LoopRecorder_feedDog : public Callback_LoopRecorder_feedDog_Base, public ::IceInternal::OnewayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const CT&);
+
+    Callback_LoopRecorder_feedDog(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::OnewayCallback<T, CT>(obj, cb, excb, sentcb)
+    {
+    }
+};
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_feedDog<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(const IceUtil::Handle<T>& instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_feedDog<T, CT>(instance, 0, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*cb)(const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_feedDog<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_LoopRecorder_feedDogPtr
+newCallback_LoopRecorder_feedDog(T* instance, void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_LoopRecorder_feedDog<T, CT>(instance, 0, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice
new file mode 100644
index 0000000..5ed64ab
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo.ice
@@ -0,0 +1,24 @@
+module RecordVideo
+{
+    sequence<byte> ByteSequence;
+
+    interface Recorder
+    {
+	string recordVideo(string rtsp,long ms);
+    }
+  
+    interface ImageGrabber
+    {
+	ByteSequence grabImage(int index,string time);
+	string grabImageUrl(int index,string time);
+    }
+
+    interface LoopRecorder
+    {
+	string addCamera(string index,string rtsp);
+	void removeCamera(string index);
+	void clearCamera();
+	void feedDog(string index);
+    }
+
+}
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py
new file mode 100644
index 0000000..b937f10
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("RecordVideo")
+
+# Modules:
+import RecordVideo_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py
new file mode 100644
index 0000000..ba8a7ab
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/RecordVideo_ice.py
@@ -0,0 +1,285 @@
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+#
+# Ice version 3.7.0
+#
+# <auto-generated>
+#
+# Generated from file `RecordVideo.ice'
+#
+# Warning: do not edit this file.
+#
+# </auto-generated>
+#
+
+from sys import version_info as _version_info_
+import Ice, IcePy
+
+# Start of module RecordVideo
+_M_RecordVideo = Ice.openModule('RecordVideo')
+__name__ = 'RecordVideo'
+
+if '_t_ByteSequence' not in _M_RecordVideo.__dict__:
+    _M_RecordVideo._t_ByteSequence = IcePy.defineSequence('::RecordVideo::ByteSequence', (), IcePy._t_byte)
+
+_M_RecordVideo._t_Recorder = IcePy.defineValue('::RecordVideo::Recorder', Ice.Value, -1, (), False, True, None, ())
+
+if 'RecorderPrx' not in _M_RecordVideo.__dict__:
+    _M_RecordVideo.RecorderPrx = Ice.createTempClass()
+    class RecorderPrx(Ice.ObjectPrx):
+
+        def recordVideo(self, rtsp, ms, context=None):
+            return _M_RecordVideo.Recorder._op_recordVideo.invoke(self, ((rtsp, ms), context))
+
+        def recordVideoAsync(self, rtsp, ms, context=None):
+            return _M_RecordVideo.Recorder._op_recordVideo.invokeAsync(self, ((rtsp, ms), context))
+
+        def begin_recordVideo(self, rtsp, ms, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.Recorder._op_recordVideo.begin(self, ((rtsp, ms), _response, _ex, _sent, context))
+
+        def end_recordVideo(self, _r):
+            return _M_RecordVideo.Recorder._op_recordVideo.end(self, _r)
+
+        @staticmethod
+        def checkedCast(proxy, facetOrContext=None, context=None):
+            return _M_RecordVideo.RecorderPrx.ice_checkedCast(proxy, '::RecordVideo::Recorder', facetOrContext, context)
+
+        @staticmethod
+        def uncheckedCast(proxy, facet=None):
+            return _M_RecordVideo.RecorderPrx.ice_uncheckedCast(proxy, facet)
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::Recorder'
+    _M_RecordVideo._t_RecorderPrx = IcePy.defineProxy('::RecordVideo::Recorder', RecorderPrx)
+
+    _M_RecordVideo.RecorderPrx = RecorderPrx
+    del RecorderPrx
+
+    _M_RecordVideo.Recorder = Ice.createTempClass()
+    class Recorder(Ice.Object):
+
+        def ice_ids(self, current=None):
+            return ('::Ice::Object', '::RecordVideo::Recorder')
+
+        def ice_id(self, current=None):
+            return '::RecordVideo::Recorder'
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::Recorder'
+
+        def recordVideo(self, rtsp, ms, current=None):
+            raise NotImplementedError("servant method 'recordVideo' not implemented")
+
+        def __str__(self):
+            return IcePy.stringify(self, _M_RecordVideo._t_RecorderDisp)
+
+        __repr__ = __str__
+
+    _M_RecordVideo._t_RecorderDisp = IcePy.defineClass('::RecordVideo::Recorder', Recorder, (), None, ())
+    Recorder._ice_type = _M_RecordVideo._t_RecorderDisp
+
+    Recorder._op_recordVideo = IcePy.Operation('recordVideo', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0), ((), IcePy._t_long, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+
+    _M_RecordVideo.Recorder = Recorder
+    del Recorder
+
+_M_RecordVideo._t_ImageGrabber = IcePy.defineValue('::RecordVideo::ImageGrabber', Ice.Value, -1, (), False, True, None, ())
+
+if 'ImageGrabberPrx' not in _M_RecordVideo.__dict__:
+    _M_RecordVideo.ImageGrabberPrx = Ice.createTempClass()
+    class ImageGrabberPrx(Ice.ObjectPrx):
+
+        def grabImage(self, index, time, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImage.invoke(self, ((index, time), context))
+
+        def grabImageAsync(self, index, time, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImage.invokeAsync(self, ((index, time), context))
+
+        def begin_grabImage(self, index, time, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImage.begin(self, ((index, time), _response, _ex, _sent, context))
+
+        def end_grabImage(self, _r):
+            return _M_RecordVideo.ImageGrabber._op_grabImage.end(self, _r)
+
+        def grabImageUrl(self, index, time, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImageUrl.invoke(self, ((index, time), context))
+
+        def grabImageUrlAsync(self, index, time, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImageUrl.invokeAsync(self, ((index, time), context))
+
+        def begin_grabImageUrl(self, index, time, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.ImageGrabber._op_grabImageUrl.begin(self, ((index, time), _response, _ex, _sent, context))
+
+        def end_grabImageUrl(self, _r):
+            return _M_RecordVideo.ImageGrabber._op_grabImageUrl.end(self, _r)
+
+        @staticmethod
+        def checkedCast(proxy, facetOrContext=None, context=None):
+            return _M_RecordVideo.ImageGrabberPrx.ice_checkedCast(proxy, '::RecordVideo::ImageGrabber', facetOrContext, context)
+
+        @staticmethod
+        def uncheckedCast(proxy, facet=None):
+            return _M_RecordVideo.ImageGrabberPrx.ice_uncheckedCast(proxy, facet)
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::ImageGrabber'
+    _M_RecordVideo._t_ImageGrabberPrx = IcePy.defineProxy('::RecordVideo::ImageGrabber', ImageGrabberPrx)
+
+    _M_RecordVideo.ImageGrabberPrx = ImageGrabberPrx
+    del ImageGrabberPrx
+
+    _M_RecordVideo.ImageGrabber = Ice.createTempClass()
+    class ImageGrabber(Ice.Object):
+
+        def ice_ids(self, current=None):
+            return ('::Ice::Object', '::RecordVideo::ImageGrabber')
+
+        def ice_id(self, current=None):
+            return '::RecordVideo::ImageGrabber'
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::ImageGrabber'
+
+        def grabImage(self, index, time, current=None):
+            raise NotImplementedError("servant method 'grabImage' not implemented")
+
+        def grabImageUrl(self, index, time, current=None):
+            raise NotImplementedError("servant method 'grabImageUrl' not implemented")
+
+        def __str__(self):
+            return IcePy.stringify(self, _M_RecordVideo._t_ImageGrabberDisp)
+
+        __repr__ = __str__
+
+    _M_RecordVideo._t_ImageGrabberDisp = IcePy.defineClass('::RecordVideo::ImageGrabber', ImageGrabber, (), None, ())
+    ImageGrabber._ice_type = _M_RecordVideo._t_ImageGrabberDisp
+
+    ImageGrabber._op_grabImage = IcePy.Operation('grabImage', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), _M_RecordVideo._t_ByteSequence, False, 0), ())
+    ImageGrabber._op_grabImageUrl = IcePy.Operation('grabImageUrl', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+
+    _M_RecordVideo.ImageGrabber = ImageGrabber
+    del ImageGrabber
+
+_M_RecordVideo._t_LoopRecorder = IcePy.defineValue('::RecordVideo::LoopRecorder', Ice.Value, -1, (), False, True, None, ())
+
+if 'LoopRecorderPrx' not in _M_RecordVideo.__dict__:
+    _M_RecordVideo.LoopRecorderPrx = Ice.createTempClass()
+    class LoopRecorderPrx(Ice.ObjectPrx):
+
+        def addCamera(self, index, rtsp, context=None):
+            return _M_RecordVideo.LoopRecorder._op_addCamera.invoke(self, ((index, rtsp), context))
+
+        def addCameraAsync(self, index, rtsp, context=None):
+            return _M_RecordVideo.LoopRecorder._op_addCamera.invokeAsync(self, ((index, rtsp), context))
+
+        def begin_addCamera(self, index, rtsp, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.LoopRecorder._op_addCamera.begin(self, ((index, rtsp), _response, _ex, _sent, context))
+
+        def end_addCamera(self, _r):
+            return _M_RecordVideo.LoopRecorder._op_addCamera.end(self, _r)
+
+        def removeCamera(self, index, context=None):
+            return _M_RecordVideo.LoopRecorder._op_removeCamera.invoke(self, ((index, ), context))
+
+        def removeCameraAsync(self, index, context=None):
+            return _M_RecordVideo.LoopRecorder._op_removeCamera.invokeAsync(self, ((index, ), context))
+
+        def begin_removeCamera(self, index, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.LoopRecorder._op_removeCamera.begin(self, ((index, ), _response, _ex, _sent, context))
+
+        def end_removeCamera(self, _r):
+            return _M_RecordVideo.LoopRecorder._op_removeCamera.end(self, _r)
+
+        def clearCamera(self, context=None):
+            return _M_RecordVideo.LoopRecorder._op_clearCamera.invoke(self, ((), context))
+
+        def clearCameraAsync(self, context=None):
+            return _M_RecordVideo.LoopRecorder._op_clearCamera.invokeAsync(self, ((), context))
+
+        def begin_clearCamera(self, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.LoopRecorder._op_clearCamera.begin(self, ((), _response, _ex, _sent, context))
+
+        def end_clearCamera(self, _r):
+            return _M_RecordVideo.LoopRecorder._op_clearCamera.end(self, _r)
+
+        def feedDog(self, index, context=None):
+            return _M_RecordVideo.LoopRecorder._op_feedDog.invoke(self, ((index, ), context))
+
+        def feedDogAsync(self, index, context=None):
+            return _M_RecordVideo.LoopRecorder._op_feedDog.invokeAsync(self, ((index, ), context))
+
+        def begin_feedDog(self, index, _response=None, _ex=None, _sent=None, context=None):
+            return _M_RecordVideo.LoopRecorder._op_feedDog.begin(self, ((index, ), _response, _ex, _sent, context))
+
+        def end_feedDog(self, _r):
+            return _M_RecordVideo.LoopRecorder._op_feedDog.end(self, _r)
+
+        @staticmethod
+        def checkedCast(proxy, facetOrContext=None, context=None):
+            return _M_RecordVideo.LoopRecorderPrx.ice_checkedCast(proxy, '::RecordVideo::LoopRecorder', facetOrContext, context)
+
+        @staticmethod
+        def uncheckedCast(proxy, facet=None):
+            return _M_RecordVideo.LoopRecorderPrx.ice_uncheckedCast(proxy, facet)
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::LoopRecorder'
+    _M_RecordVideo._t_LoopRecorderPrx = IcePy.defineProxy('::RecordVideo::LoopRecorder', LoopRecorderPrx)
+
+    _M_RecordVideo.LoopRecorderPrx = LoopRecorderPrx
+    del LoopRecorderPrx
+
+    _M_RecordVideo.LoopRecorder = Ice.createTempClass()
+    class LoopRecorder(Ice.Object):
+
+        def ice_ids(self, current=None):
+            return ('::Ice::Object', '::RecordVideo::LoopRecorder')
+
+        def ice_id(self, current=None):
+            return '::RecordVideo::LoopRecorder'
+
+        @staticmethod
+        def ice_staticId():
+            return '::RecordVideo::LoopRecorder'
+
+        def addCamera(self, index, rtsp, current=None):
+            raise NotImplementedError("servant method 'addCamera' not implemented")
+
+        def removeCamera(self, index, current=None):
+            raise NotImplementedError("servant method 'removeCamera' not implemented")
+
+        def clearCamera(self, current=None):
+            raise NotImplementedError("servant method 'clearCamera' not implemented")
+
+        def feedDog(self, index, current=None):
+            raise NotImplementedError("servant method 'feedDog' not implemented")
+
+        def __str__(self):
+            return IcePy.stringify(self, _M_RecordVideo._t_LoopRecorderDisp)
+
+        __repr__ = __str__
+
+    _M_RecordVideo._t_LoopRecorderDisp = IcePy.defineClass('::RecordVideo::LoopRecorder', LoopRecorder, (), None, ())
+    LoopRecorder._ice_type = _M_RecordVideo._t_LoopRecorderDisp
+
+    LoopRecorder._op_addCamera = IcePy.Operation('addCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_string, False, 0), ())
+    LoopRecorder._op_removeCamera = IcePy.Operation('removeCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0),), (), None, ())
+    LoopRecorder._op_clearCamera = IcePy.Operation('clearCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), None, ())
+    LoopRecorder._op_feedDog = IcePy.Operation('feedDog', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_string, False, 0),), (), None, ())
+
+    _M_RecordVideo.LoopRecorder = LoopRecorder
+    del LoopRecorder
+
+# End of module RecordVideo
diff --git a/QiaoJiaSystem/RecordVideo/rpc/test2.py b/QiaoJiaSystem/RecordVideo/rpc/test2.py
new file mode 100644
index 0000000..241a545
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/test2.py
@@ -0,0 +1,70 @@
+import time
+
+import Ice
+import sys
+import traceback
+
+import RecordVideo
+
+status = 0
+ic = None
+try:
+
+    # 鍒濆鍖栬繍琛岀幆澧�
+    ic = Ice.initialize(sys.argv)
+
+    # 鑾峰彇杩滅▼printer鏈嶅姟鐨勪唬鐞�
+    base = ic.stringToProxy("LoopRecordVideoServer:default -h 192.168.1.185 -p 11010")
+
+    # 璇锋眰鏈嶅姟绔‘璁わ細鈥濊繖鏄笉鏄� Demo::Printer鐨勪唬鐞嗘帴鍙o紵鈥�
+    printer = RecordVideo.LoopRecorderPrx.checkedCast(base)
+    if not printer:
+        raise RuntimeError("Invalid proxy")
+
+    str_json = "{\"rtsp\":\"rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream\"," \
+               "\"path\":\"/home/basic/work/qiaojia/realtime/21/"
+
+    # 杩滅▼璋冪敤锛岀湅璧锋潵鍍忔湰鍦扮殑鏈嶅姟涓�鏍�
+    # ti = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str1 = str_json + ti + ".mp4\"}"
+    # print(str1)
+    # printer.addCamera("2", "test")
+
+    time.sleep(2)
+    ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    str2 = str_json + ti1 + ".mp4\"}"
+    print(str2)
+    printer.addCamera("21", str2)
+
+    # time.sleep(2)
+    # ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str2 = str_json + ti1 + ".mp4\"}"
+    # print(str2)
+    # printer.addCamera("2", str2)
+
+    # printer.addCamera("2", "test")
+    # time.sleep(2)
+    # ti3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str3 = str_json + ti3 + ".mp4\"}"
+    # print(str2)
+    # printer.addCamera("3", str3)
+
+    # printer.removeCamera("2")
+
+    while True:
+        printer.feedDog("21")
+        time.sleep(1)
+
+except:
+    traceback.print_exc()
+    status = 1
+
+if ic:
+    # Clean up
+    try:
+        ic.destroy()
+    except:
+        traceback.print_exc()
+        status = 1
+
+sys.exit(status)
diff --git a/QiaoJiaSystem/RecordVideo/rpc/testClient.py b/QiaoJiaSystem/RecordVideo/rpc/testClient.py
new file mode 100644
index 0000000..16189ce
--- /dev/null
+++ b/QiaoJiaSystem/RecordVideo/rpc/testClient.py
@@ -0,0 +1,74 @@
+import time
+
+import Ice
+import sys
+import traceback
+
+import RecordVideo
+
+status = 0
+ic = None
+try:
+
+    # 鍒濆鍖栬繍琛岀幆澧�
+    ic = Ice.initialize(sys.argv)
+
+    # 鑾峰彇杩滅▼printer鏈嶅姟鐨勪唬鐞�
+    base = ic.stringToProxy("LoopRecordVideoServer:default -p 10010")
+
+    # 璇锋眰鏈嶅姟绔‘璁わ細鈥濊繖鏄笉鏄� Demo::Printer鐨勪唬鐞嗘帴鍙o紵鈥�
+    printer = RecordVideo.LoopRecorderPrx.checkedCast(base)
+    if not printer:
+        raise RuntimeError("Invalid proxy")
+
+    str_json = "{\"rtsp\":\"rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream\"," \
+               "\"path\":\"/home/bsk/test/2/"
+
+    # 杩滅▼璋冪敤锛岀湅璧锋潵鍍忔湰鍦扮殑鏈嶅姟涓�鏍�
+    # ti = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str1 = str_json + ti + ".mp4\"}"
+    # print(str1)
+    # printer.addCamera("2", "test")
+
+    time.sleep(2)
+    ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    str2 = str_json + ti1 + ".mp4\"}"
+    print(str2)
+    str_key = printer.addCamera("2", str2)
+
+    print(str_key)
+
+    # time.sleep(2)
+    # ti1 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str2 = str_json + ti1 + ".mp4\"}"
+    # print(str2)
+    # printer.addCamera("2", str2)
+
+    # printer.addCamera("2", "test")
+    # time.sleep(2)
+    # ti3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+    # str3 = str_json + ti3 + ".mp4\"}"
+    # print(str2)
+    # printer.addCamera("3", str3)
+    #
+    # printer.removeCamera("2")
+    #
+    # printer.removeCamera("2")
+
+    while True:
+        printer.feedDog("2")
+        time.sleep(1)
+
+except:
+    traceback.print_exc()
+    status = 1
+
+if ic:
+    # Clean up
+    try:
+        ic.destroy()
+    except:
+        traceback.print_exc()
+        status = 1
+
+sys.exit(status)
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
new file mode 100644
index 0000000..2a0062d
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -0,0 +1,508 @@
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppUtil.h>
+#include <algorithm>
+#include <basic/util/app/AppConfig.h>
+#include <QtCore/QDateTime>
+#include <QtCore/QtGlobal>
+#include <net_config.h>
+
+AppPipeController::AppPipeController(std::string folderPath, const Json::Value &json) :
+    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0),
+    m_folderPath(folderPath),
+    m_json(json), fdfsClient(nullptr), yoloRpcElement(folderPath + "yoloRpc"), faceRpcElement(folderPath + "faceRpc"),
+    faceExtractElement(folderPath + "faceExtract"), triggerElement(25, 10),
+    recordVideoElement(-1, json["rtsp"].asString()), bRecordVideoEnable(false) {
+
+    init();
+
+}
+
+AppPipeController::AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable) :
+    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index"), RecordVideoEnable),
+    m_index(index), fdfsClient(nullptr), yoloRpcElement(to_string(index) + "yoloRpc"),
+    faceRpcElement(to_string(index) + "faceRpc"), m_json(json), faceExtractElement(to_string(index) + "faceExtract"),
+    triggerElement(25, 4), recordVideoElement(index, json["rtsp"].asString()), bRecordVideoEnable(RecordVideoEnable) {
+    init();
+}
+
+
+AppPipeController::AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable) :
+    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index")),
+    m_index(0),
+    m_camId(camId),
+    fdfsClient(nullptr),
+    yoloRpcElement(camId + "yoloRpc"),
+    faceRpcElement(camId + "faceRpc"),
+    m_json(json),
+    faceExtractElement(camId + "faceExtract"),
+   // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()),
+//    leftTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
+//    rightTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
+   // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()),
+    triggerElement(25, 4),
+    recordVideoElement(camId, json["rtsp"].asString()),
+    newRecordVideoElement(camId),
+    perimeterElement(1),
+    crowdElement(json["crowd.num"].asInt()),
+    bRecordVideoEnable(RecordVideoEnable)
+{
+    init();
+    initPerimeter();
+    initCrowd();
+    intKeepRight();
+}
+
+AppPipeController::~AppPipeController() {
+      if(recordStatus==RECORD_DOING)
+      {
+          newRecordVideoElement.endRecord();
+      }
+}
+
+//************************************
+// Method:    string_replace
+// FullName:  string_replace
+// Access:    public
+// Returns:   void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+    std::string::size_type pos = 0;
+    std::string::size_type srclen = strsrc.size();
+    std::string::size_type dstlen = strdst.size();
+
+    while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+        strBig.replace(pos, srclen, strdst);
+        pos += dstlen;
+    }
+}
+
+bool AppPipeController::resetVideoCapturePath(std::string path) {
+//    videoCaptureElement.stop();
+//    videoCaptureElement.wait();
+
+    string_replace(path, "//", "/");
+
+    videoCaptureElement.setVideoPath(path);
+    auto dev_pos = path.find("/cut/") + 5;
+    auto ch_pos = path.find("/", dev_pos) + 1;
+    auto str_device_id = path.substr(dev_pos, ch_pos - dev_pos - 1);
+    auto str_ch_id = path.substr(ch_pos, path.find("/", ch_pos) - ch_pos);
+    faceExtractElement.setProperty("dev_id", str_device_id);
+    faceExtractElement.setProperty("ch_id", str_ch_id);
+    faceExtractElement.setProperty("path", path);
+    yoloRpcElement.setProperty("dev_id", str_device_id);
+    yoloRpcElement.setProperty("ch_id", str_ch_id);
+    yoloRpcElement.setProperty("path", path);
+
+    //淇敼鏃堕棿涓哄疄闄呭彂鐢熸椂闂�
+    QString strPath = QString::fromStdString(path);
+    QStringList list = strPath.split("/");
+    QString fileName;
+    QString time;
+    QString strNewTime;
+    if (list.size() != 0) {
+        fileName = list.last();
+        time = fileName.split(".").first();
+        //#todo
+//        time = fileName.split("_").first();
+    } else {
+        ERR("list.size() == 0)");
+    }
+
+    if (!time.isEmpty()) {
+        m_dt = QDateTime::fromString(time, "yyyy-MM-dd hh:mm:ss");
+    } else {
+        m_dt = QDateTime::currentDateTime();
+    }
+
+//  deciceId
+//  chenle
+
+}
+
+bool AppPipeController::getRunning() {
+    return videoCaptureElement.isRunning();
+}
+
+string test_str;
+
+void AppPipeController::init() {
+
+    unsigned char ip_old[15] = {0};
+    std::string net_ifname = appConfig.getStringProperty("netIfName");
+    if (!(GetIpAddress(net_ifname.c_str(), ip_old))) {
+        ERR("couldn't get ip");
+    }
+
+    bUp = false;
+
+    yoloRpcElement.setProperty("str_addr", m_json["addr"].asString());
+    yoloRpcElement.setProperty("local_ip", std::string((char *) ip_old));
+
+    faceExtractElement.setProperty("str_addr", m_json["addr"].asString());
+    faceExtractElement.setProperty("local_ip", std::string((char *) ip_old));
+
+
+    if (bRecordVideoEnable) {
+        faceExtractElement.setProperty("dev_id", m_camId);
+        yoloRpcElement.setProperty("dev_id", m_camId);
+        m_json_Record["rtsp"] = m_json["rtsp"].asString();
+    }
+
+
+   //#todo
+  //  int max=appPref.getIntData("n_cut_max_duration");
+    recordInit(20,100);
+    videoCaptureElement.registerConnector([&] {
+
+
+
+        std::string strNewTime;
+        if (m_camId.size() > 0) {
+            strNewTime = AppUtil::getTimeUSecString();
+
+            if(bRecordVideoEnable)
+            {
+                newRecordVideoElement.pushImgBuf(strNewTime,videoCaptureElement.getImage());
+                setSdkTrigger();
+
+                doRecord();
+            }
+
+        } else {
+            //#todo 璁$畻褰撳墠鏂囦欢鏃堕棿
+            //#TODO 杈撳嚭闂撮殧鐢ㄤ簬璁$畻鏃堕棿
+            // 鐜颁负姣忎笁甯ц绠椾竴娆★紝瀵艰嚧璁$畻鐨勬椂闂撮暱浜庢枃浠剁殑瀹為檯鏃堕棿
+            auto opit = 25;// videoCaptureElement.getOutPutInterval();
+            auto opidx = videoCaptureElement.getoutPutIndex();
+            int second = opidx / opit;
+            qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000;
+            QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
+            strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+
+        }
+//        DBG(strNewTime);
+
+        if (!faceRpcElement.isBusy()) {
+//            faceRpcElement.setProperty("uuid", uuid);
+            //#todo
+            faceRpcElement.setProperty("time", strNewTime);
+//            faceRpcElement.setProperty("time", uuid);
+            faceRpcElement.setImage(videoCaptureElement.getImage());
+            faceRpcElement.submit();
+        }
+
+        if (!yoloRpcElement.isBusy()) {
+//            yoloRpcElement.setProperty("uuid", uuid);
+            //#todo
+            yoloRpcElement.setProperty("time", strNewTime);
+            yoloRpcElement.setImage(videoCaptureElement.getImage());
+            yoloRpcElement.submit();
+        }
+
+        if (!imageDrawElement.isBusy()) {
+            imageDrawElement.setImage(videoCaptureElement.getImage());
+            imageDrawElement.submit();
+        }
+
+        if (bRecordVideoEnable) {
+            registerElement(triggerElement);
+        }
+    });
+
+
+    yoloRpcElement.registerConnector([&] {
+        imageDrawElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+    });
+
+    faceRpcElement.registerConnector([&] {
+        imageDrawElement.setFaces(faceRpcElement.getLastScoreRects());
+    });
+
+    yoloRpcElement.registerConnector("YoloTrigger", [&] {
+//        auto images = yoloRpcElement.getTriggerMats();
+    });
+
+    faceRpcElement.registerConnector("FaceTrigger", [&] {
+//        auto images = faceRpcElement.getTriggerMats();
+        faceExtractElement.submitFaceExtract({faceRpcElement.getProperty("uuid"),
+                                              AppUtil::getTimeString(),
+                                              faceRpcElement.getImage().clone(),
+                                              faceRpcElement.getTriggerFaces(),
+                                              faceRpcElement.getTriggerScoreRects(),
+                                              faceRpcElement.getTriggerMats()});
+    });
+
+    imageDrawElement.registerConnector([&] {
+        if (appPref.getIntData("show.image") == 1) {
+            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+        }
+    });
+
+    registerElement(videoCaptureElement);
+    if (m_json["yolo.enable"].asString() == "1") {
+        registerElement(yoloRpcElement);
+    }
+    if (m_json["face.enable"].asString() == "1") {
+        registerElement(faceRpcElement);
+        registerElement(faceExtractElement);
+    }
+    registerElement(imageDrawElement);
+
+    videoCaptureElement.setOutPutInterval(3);
+    faceExtractElement.setProperty("index", to_string(m_index));
+    //#todo setProperty
+//    faceExtractElement.setProperty("index", to_string(m_index));
+//    faceExtractElement.setProperty("index", to_string(m_index));
+}
+
+std::string AppPipeController::getFullFileName() {
+    string tmppath = appConfig.getStringProperty("cutPath");
+    auto findCutSize = tmppath.begin() + tmppath.find("/cut");
+    if (tmppath.back() != '/') {
+        tmppath.push_back('/');
+    }
+    string t_FilePath = tmppath;
+//    string t_FilePath = tmppath.replace(findCutSize, findCutSize + 4, "/realtime/");
+
+    //# ./camIndex/YYYYMM/DD/camIndex-YYYYMMDDHHMMSS/
+    //# ./camIndex/YYYYMM/DD/
+    string t_strTime = AppUtil::getTimeSecString();
+    // 2018-09-01 11:30:48.mp4
+    t_FilePath.append(
+        m_camId + "/" + t_strTime.substr(0, 4) + t_strTime.substr(5, 2) + "/" +
+        t_strTime.substr(8, 2) + "/");
+    //camIndex-YYYYMMDDHH/
+    string tt = t_strTime;
+    //2018-09-27 14:26:58
+    //#todo 浼樺寲
+    tt.erase(16, 1);
+    tt.erase(13, 1);
+    tt.erase(10, 1);
+    tt.erase(7, 1);
+    tt.erase(4, 1);
+    //20180927142658
+    t_FilePath.append(m_camId + "-" + tt.substr(0, 10) + "/");
+    string t_cmd = "mkdir -p '";
+    t_cmd.append(t_FilePath + "'");
+    //#get path mkdir path
+    system(t_cmd.c_str());
+    //#get time and file name
+    t_FilePath.append(t_strTime + ".mp4");
+    return t_FilePath;
+}
+
+void AppPipeController::setfdfsClient(FastFdsWithLock *p_fdfsClient) {
+    fdfsClient = p_fdfsClient;
+    faceExtractElement.setFdfs(fdfsClient);
+    yoloRpcElement.setFdfs(fdfsClient);
+}
+
+std::string AppPipeController::getRtmp() {
+    std::string ret = "";// = videoPublishElement.getPath();
+    size_t pos = ret.find(".flv");
+    ret = ret.substr(0, pos);
+    INFO(ret);
+    return ret;
+}
+
+void AppPipeController::initPerimeter() {
+    if (!m_json["perimeter.enable"] == "1") {
+        return;
+    }
+    std::string area = m_json["perimeter.area"].asString();
+    //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+    perimeterElement.setMask(area);
+    perimeterElement.setFdfs(fdfsClient);
+    perimeterElement.setProperty("sdkType","perimeter");
+    yoloRpcElement.registerConnector([&] {
+        if (!perimeterElement.isBusy()) {
+
+            perimeterElement.setObjsResults(yoloRpcElement.getObjects());
+            perimeterElement.submit();
+        }
+    });
+//    perimeterElement.registerConnector([&] {
+
+//        peTriggerElement.setState(perimeterElement.getRealNum() > 0);
+//        peTriggerElement.triggerOnce();
+//    });
+//    peTriggerElement.registerConnector([&] {
+
+//        switch (peTriggerElement.getTriggerType()) {
+//            case UP: DBG("peTriggerElement Up");
+//                // startRecord(SdkType_Perimeter);
+//                break;
+//            case DOWN: DBG("peTriggerElement Down");
+//                // endRecord(SdkType_Perimeter);
+//            default:
+//                break;
+//        }
+//    });
+    registerElement(perimeterElement);
+//    registerElement(peTriggerElement);
+}
+
+void AppPipeController::initCrowd() {
+    if (m_json["crowd.enable"] != "1") {
+        return;
+    }
+    std::string area = m_json["crowd.area"].asString();
+    //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+    crowdElement.setMask(area);
+    crowdElement.setFdfs(fdfsClient);
+    crowdElement.setProperty("sdkType","crowd");
+    yoloRpcElement.registerConnector([&] {
+        if (!crowdElement.isBusy()) {
+            crowdElement.setObjsResults(yoloRpcElement.getObjects());
+            crowdElement.submit();
+        }
+    });
+//    crowdElement.registerConnector([&] {
+//        crowdTriggerElement.setState(crowdElement.getRealNum() >= m_json["crowd.num"].asInt());
+//        crowdTriggerElement.triggerOnce();
+//    });
+//    crowdTriggerElement.registerConnector([&] {
+
+//        switch (crowdTriggerElement.getTriggerType()) {
+//            case UP:
+//                //reqRecordMap[SdkType_Perimeter]=true;
+//                // startRecord(SdkType_Perimeter);
+//            DBG("crowdTriggerElement UP");
+//                break;
+//            case DOWN:
+//                // reqRecordMap[SdkType_Perimeter]=false;
+//                //endRecord(SdkType_Perimeter);
+//            DBG("crowdTriggerElement Down");
+//                break;
+//            default:
+//                break;
+//        }
+//    });
+    registerElement(crowdElement);
+//    registerElement(crowdTriggerElement);
+}
+
+void AppPipeController::intKeepRight() {
+    if (m_json["keepRight.enable"] != "1") {
+        return;
+    }
+    std::string leftArea = m_json["keepRight.leftArea"].asString();
+    std::string leftLine = m_json["keepRight.leftLine"].asString();
+    std::string rightArea = m_json["keepRight.rightArea"].asString();
+    std::string rightLine = m_json["keepRight.rightLine"].asString();
+    leftJudgment.init(QString::fromStdString(leftArea), QString::fromStdString(leftLine));
+    rightJudgment.init(QString::fromStdString(rightArea), QString::fromStdString(rightLine));
+    yoloRpcElement.registerConnector([&] {
+        leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+        rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+    });
+    registerElement(leftJudgment);
+    registerElement(rightJudgment);
+
+}
+
+
+//================
+void AppPipeController::recordInit(int videoMin, int videoMax) {
+    sdkTrigger = false;
+    fileMin = videoMin;
+    fileMax = videoMax;
+    triggerDelay = fileMin/2;
+
+    recordStatus = RECORD_STOP;
+    videoLength = 0;
+    recordDelay = 0;
+}
+
+void AppPipeController::setSdkTrigger() {
+    if( faceRpcElement.getTriggerState() ||//TODO
+        yoloRpcElement.getTrigger() ||
+        leftJudgment.getTriggerState()||
+        rightJudgment.getTriggerState() ||
+        perimeterElement.getTriggerState() ||
+        crowdElement.getTriggerState()
+            ){
+        triggerDelay = 0;
+        sdkTrigger = true;
+    } else{
+        if(triggerDelay++ >= fileMin/2) {
+            sdkTrigger = false;
+        }
+        else{
+            sdkTrigger = true;
+        }
+    }
+}
+
+void AppPipeController::doRecord() {
+    switch(recordStatus)
+    {
+        case RECORD_STOP:
+//        DBG("recordDelay:" << recordDelay);
+//        DBG("videoLength:" << videoLength);
+//        DBG("sdkTrigger:" << sdkTrigger);
+            videoLength = 0;
+            recordDelay = 0;
+            if(sdkTrigger){
+                recordStatus = RECORD_DOING;
+                newRecordVideoElement.startRecord();
+            }
+            else
+            {
+                ImgInfo info;
+                newRecordVideoElement.getImg(info);
+            }
+            break;
+
+        case RECORD_DOING:
+            videoLength++;
+            if(sdkTrigger){
+                if(videoLength < fileMax){
+                    newRecordVideoElement.doRecord();
+                }
+                else{
+                    recordStatus = RECORD_STOP;
+                    newRecordVideoElement.endRecord();
+                }
+            }else{
+                recordStatus = RECORD_ENDING;
+                newRecordVideoElement.doRecord();
+            }
+            break;
+
+        case RECORD_ENDING:
+            DBG("recordDelay:" << recordDelay);
+            DBG("videoLength:" << videoLength);
+            DBG("sdkTrigger:" << sdkTrigger);
+            recordDelay++;
+            videoLength++;
+            if(sdkTrigger){
+                if( (recordDelay < fileMin/4) &&
+                    (videoLength < fileMax)){
+                    newRecordVideoElement.doRecord();
+                }else{
+                    recordStatus = RECORD_STOP;
+                    newRecordVideoElement.endRecord();
+                }
+            }else{
+                if( (recordDelay < fileMin/2) &&
+                    (videoLength < fileMax)){
+                    newRecordVideoElement.doRecord();
+                }else{
+                    recordStatus = RECORD_STOP;
+                    newRecordVideoElement.endRecord();
+                }
+            }
+            break;
+
+        default:
+            break;
+    }
+}
+
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.h b/QiaoJiaSystem/StructureApp/AppPipeController.h
new file mode 100644
index 0000000..648b766
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.h
@@ -0,0 +1,116 @@
+#ifndef APPPIPECONTROLLER_H
+#define APPPIPECONTROLLER_H
+
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/util/curl/HttpRequestWithCrul.hpp>
+#include "ImageDrawElement.h"
+#include "FaceRpcElement.h"
+#include "FaceExtractElement.h"
+#include "YoloRpcElement.h"
+#include "RecordVideoElement.h"
+#include <TriggerElement.h>
+#include <QtCore/QDateTime>
+#include "PerimeterElement.h"
+#include "JudgmentRetrogradeTool.h"
+#include "NewRecordVideoElement.h"
+#include <jsoncpp/json/json.h>
+
+
+class AppPipeController : public PipeController {
+public:
+    /***
+     * 鐢ㄤ簬蹇�熻棰戠粨鏋勫寲
+     * @param folderPath 浠诲姟鏍圭洰褰曪紝鐢ㄤ簬鍋氬叡浜唴瀛榠d
+     * @param json 鍙傛暟涓簉tsp娴佸湴鍧� sdk鏄惁鍚敤鐨勬爣璇�
+     */
+    AppPipeController(std::string folderPath, const Json::Value &json);
+
+    AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable = false);
+
+    AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable);
+
+    virtual ~AppPipeController();
+
+    bool resetVideoCapturePath(std::string path);
+
+    bool getRunning();
+
+    std::string getRtmp();
+
+    void setfdfsClient(FastFdsWithLock *p_fdfsClient);
+
+private:
+    void init();
+
+private://Perimete
+    PerimeterElement perimeterElement;
+   // TriggerElement peTriggerElement;
+
+    void initPerimeter();
+
+private://Crowd
+    PerimeterElement crowdElement;
+    //TriggerElement crowdTriggerElement;
+
+    void initCrowd();
+
+private://KeepRight
+    JudgmentRetrogradeTool leftJudgment;
+    JudgmentRetrogradeTool rightJudgment;
+
+//    TriggerElement leftTriggerElement;
+//    TriggerElement rightTriggerElement;
+
+    void intKeepRight();
+
+private:
+    ffmpeg::VideoCaptureElement videoCaptureElement;
+    YoloRpcElement yoloRpcElement;
+    FaceRpcElement faceRpcElement;
+    FaceExtractElement faceExtractElement;
+    ImageDrawElement imageDrawElement;
+    RecordVideoElement recordVideoElement;
+    NewRecordVideoElement newRecordVideoElement;
+
+    int m_index;
+    std::string m_camId;
+    std::string m_folderPath;
+    Json::Value m_json;
+    Json::Value m_json_Record;
+
+    Json::FastWriter m_fastWriter;
+    FastFdsWithLock *fdfsClient;
+
+    bool bRecordVideoEnable;
+    std::map<std::string, bool> recordRetMap;
+
+    TriggerElement triggerElement;
+    std::atomic<bool> bUp;
+
+    QDateTime m_dt;
+
+    std::string getFullFileName();
+
+
+    void recordInit(int videoMin, int videoMax);
+    void setSdkTrigger();
+    void doRecord();
+    int fileMin;
+    int fileMax;
+    bool sdkTrigger;
+    int triggerDelay;
+
+#define RECORD_STOP (0)
+#define RECORD_DOING (1)
+#define RECORD_ENDING (2)
+
+    int recordStatus;
+    int videoLength;
+    int recordDelay;
+
+
+};
+
+#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp b/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp
new file mode 100644
index 0000000..c4b75b3
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/AppPipeControllerTest.cpp
@@ -0,0 +1,93 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <thread>
+//#include "StructureAppI.h"
+//#include "../AppManager/rpc/AppManager.h"
+#include "AppPipeController.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/db/ES/es/ManagerEsDB.h>
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS;
+
+//    ManagerEsDB pManagerEsDB;
+//    bool ret = pManagerEsDB.addDB("facedb233");
+
+//    pManagerEsDB.faceResInsert("facedb","6666666","{\"test222\":\"sdfasdf\"}");
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setIntData("show.image", 1);
+
+    //yolo server
+    appPref.setStringData("yolo.proxy", "yoloServer");
+    //#todo
+    appPref.setStringData("yolo.ip", "");
+    appPref.setIntData("yolo.port", 10003);
+//    rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+    //face detect server
+    appPref.setStringData("faceDete.proxy", "faceServer");
+    //#todo
+    appPref.setStringData("faceDete.ip", "");
+    appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+//    rpcClient("faceServer","",10002,"tcp"),
+
+
+    //fece extern server
+    appPref.setStringData("faceExte.proxy", "faceExtractServer");
+    //#todo
+    appPref.setStringData("faceExte.ip", "");
+    appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+//        "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+    //face search server
+    appPref.setStringData("faceSear.proxy", "faceCmServer");
+    //#todo
+    appPref.setStringData("faceSear.ip", "");
+    appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+//    faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+    appPref.setStringData("ipAdd", "192.168.1.159");
+    appPref.setIntData("ipPort", 9200);
+
+    Json::Value json;
+    json["rtsp"] = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/load/123456/33/201808/27/123456-33-201808-20180827093100/2018-08-27 09:31:00.mp4";
+    json["face.enable"] = "1";
+    json["yolo.enable"] = "1";
+
+    AppPipeController appPipeController(0, json);
+    appPipeController.resetVideoCapturePath(
+        "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/load/123456/33/201808/27/123456-33-201808-20180827093100/2018-08-27 09:31:00.mp4");
+    appPipeController.start();
+    getchar();
+    appPipeController.stop();
+    appPipeController.wait();
+    return 0;
+}
+
+#include "HttpRequestWithCrul.hpp"
+
+int main2() {
+
+
+    HttpRequestWithCrul httpRequestWithCrul;
+
+
+    // test post requery
+    string postUrlStr = "http://192.168.1.159:9200/facedb/external/fffffff";
+    string postParams = "{\"assss\":\"cccc\"}";
+    string postResponseStr;
+    auto res = httpRequestWithCrul.curl_post_req(postUrlStr, postParams, postResponseStr);
+    auto res2 = httpRequestWithCrul.curl_post_req(postUrlStr, postParams, postResponseStr);
+    if (res != CURLE_OK)
+        cerr << "curl_easy_perform() failed: " + string(curl_easy_strerror(res)) << endl;
+    else
+        cout << postResponseStr << endl;
+//    system("pause");
+    return 0;
+}
\ No newline at end of file
diff --git a/QiaoJiaSystem/StructureApp/CMakeLists.txt b/QiaoJiaSystem/StructureApp/CMakeLists.txt
new file mode 100644
index 0000000..901e914
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/CMakeLists.txt
@@ -0,0 +1,127 @@
+cmake_minimum_required(VERSION 3.5)
+project(StructureApp)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -DTESTCODE -fpermissive)
+
+SET(SOURCES
+
+#    HiredisTool.cpp
+    NewRecordVideoElement.cpp
+    JudgmentRetrogradeTool.cpp
+    PerimeterElement.cpp
+
+
+    TrackingTrigger.cpp
+    FaceRpcElement.cpp
+    FaceExtractElement.cpp
+    YoloRpcElement.cpp
+    ImageDrawElement.cpp
+    RecordVideoElement.cpp
+    rpc/StructureApp.cpp
+    AppPipeController.cpp
+    ../YoloServer/rpc/YoloServer.cpp
+    ../FaceDetectServer/rpc/FaceServer.cpp
+    ../FaceSearchServer/rpc/FaceSearchServer.cpp
+    ../RecordVideo/rpc/RecordVideo.cpp
+    ../RapidStructureApp/TriggerElement.cpp
+
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+    ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+    ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+    ../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+    ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+    )
+
+SET(LIBS
+    Ice
+    crypto
+    opencv_world
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+    Qt5Core
+    Qt5Gui
+    pthread
+    jsoncpp
+    cuda
+    cudart
+    cublas
+    curand
+
+    glog
+
+    uuid
+    curl
+    fastcommon
+    fdfsclient
+    )
+
+include_directories(
+    ./rpc
+    ../YoloServer/rpc
+    ../RecordVideo/rpc
+    ../FaceDetectServer/rpc
+    ../FaceSearchServer/rpc
+    ../RapidStructureApp/
+
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+
+    ../../BasicPlatForm/basic/util/net_config/
+    ../../BasicPlatForm/basic/util/fastdfs/
+    ../../BasicPlatForm/libs/FastDFS/include
+    ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+    ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+
+    ../../BasicPlatForm/basic/pipe/
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/basic/util/curl/
+    ../../BasicPlatForm/libs/libuuid/include
+    ../../BasicPlatForm/libs/glog/include
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/FastDFS/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/crul/lib
+)
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    ${SOURCES}
+    )
+
+add_executable(AppPipeControllerTest
+    AppPipeControllerTest.cpp
+    ${SOURCES})
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+target_link_libraries(AppPipeControllerTest
+    ${LIBS}
+    )
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
new file mode 100644
index 0000000..7f6e288
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -0,0 +1,230 @@
+#include "FaceExtractElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/util/app/AppUtil.h>
+#include <basic/util/opencv/CvUtil.h>
+//diao鐢ㄥ搴攅s鏁版嵁灏佽鐨勭被
+//#include <basic/db/ES/es/ManagerEsDB.h>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#define state "state"
+
+void StringReplace(string &strBase, string strSrc, string strDes) {
+    string::size_type pos = 0;
+    string::size_type srcLen = strSrc.size();
+    string::size_type desLen = strDes.size();
+    pos = strBase.find(strSrc, pos);
+    while ((pos != string::npos)) {
+        strBase.replace(pos, srcLen, strDes);
+        pos = strBase.find(strSrc, (pos + desLen));
+    }
+}
+
+FaceExtractElement::FaceExtractElement(std::string shareMemoryName) :
+    TimerElement(1000), sharedMemory(nullptr), fdfsClient(nullptr),
+    //#todo appPref.setStringData
+    faceExtractRpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"),
+                         appPref.getIntData("faceExte.port"), "tcp"),
+//    faceExtractRpcClient(/*appPref.getStringData("face.extract.proxy")*/
+//        "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+    faceSearchRpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"),
+                        appPref.getIntData("faceSear.port"), "tcp")
+//    faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+{
+    sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+    if (!sharedMemory->create(4608 * 2592 * 4)) {
+        sharedMemory->attach();
+    }
+}
+
+FaceExtractElement::~FaceExtractElement() {
+    if (sharedMemory) {
+        delete sharedMemory;
+    }
+}
+
+void FaceExtractElement::submitFaceExtract(FaceToExtract faceToExtract) {
+    std::lock_guard<std::mutex> lg(imageQueueMutex);
+    if (faceExtractQueue.size() >= VECTOR_MAX) {
+        ERR("FaceExtractElement::submitFaceExtract too fast, imageQueue.size()>=QUEUE_MAX")
+        return;
+    }
+    faceExtractQueue.push_back(faceToExtract);
+}
+
+void FaceExtractElement::timerFunc() {
+    std::vector<FaceToExtract> faceExtractQueueTmp;
+    {
+        std::lock_guard<std::mutex> lg(imageQueueMutex);
+        if (faceExtractQueue.empty())return;
+        faceExtractQueueTmp.swap(faceExtractQueue);
+        faceExtractQueue.clear();
+    }
+    try {
+
+        string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+        float t_com_sc =
+            appPref.getFloatData(t_camIdex + "face.cmp") == -1 ? 75 : appPref.getFloatData(t_camIdex + "face.cmp");
+
+        DBG(" TESTCODE getValue" << t_camIdex << "  " << t_com_sc << "  " << t_com_sc / 100);
+
+        t_com_sc = t_com_sc / 100;
+
+        for (int i = 0; i < faceExtractQueueTmp.size(); i++) {
+            auto extractServer = faceExtractRpcClient.getServer();
+            if (!extractServer) {
+                ERR("extractServer is null");
+                return;
+            }
+            auto &image = faceExtractQueueTmp[i].image;
+            auto sharedImage = cv::Mat(image.rows, image.cols, CV_8UC3, sharedMemory->data());
+            image.copyTo(sharedImage);
+
+            unsigned long size = faceExtractQueueTmp[i].facesPos.size();
+            for (int j = 0; j < size; j++) {
+                auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j],
+                                                          sharedMemory->key().toStdString());
+//                {
+//                    //#todo
+//                    string string1(
+//                        AppUtil::getTimeString() + "-ff3" + faceExtractQueueTmp[i].scoredRects[j].properties["time"] +
+//                        ".jpg");
+//                    cv::imwrite(string1, image);
+//                }
+                if (feature.empty()) {
+                    ERR("feature is empty");
+                    continue;
+                }
+                features.clear();
+                features.emplace_back(feature);
+
+                std::string strImgUrl = "http://";
+                if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+                    fdfsClient->rwLock.rdlock();
+                    std::vector<unsigned char> buffer;
+                    CvUtil::cvMat2Buffer(faceExtractQueueTmp[i].faceImages[j], buffer);
+                    std::string strImgUrlTmp = "";
+                    fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+                    strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+                    strImgUrl.clear();
+                    strImgUrl = strImgUrlTmp;
+//                    strImgUrl.append("/").append(strImgUrlTmp);
+                    fdfsClient->rwLock.unlock();
+                }
+
+                //鎷兼帴json
+                string str_uuid;
+                uuid_t t_uuid;
+                char str[36];
+                uuid_generate(t_uuid);
+                uuid_unparse(t_uuid, str);
+                str_uuid = str;
+
+                Json::Value t_json;
+                t_json["Id"] = str_uuid; //涓婚敭
+
+                //#鍦ㄥ姣斾腑娣诲姞鐗瑰緛鍊�
+                t_json["FaceFeature"] = "base64";
+                t_json["personId"] = "wait todo";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+                t_json["BaseName"] = "wait todo";//鍏宠仈搴曞簱琛ㄥ悕
+                //#end
+//                t_json["likePer"] = faceExtractQueueTmp[i].scoredRects[j].score;//浜哄憳鐩镐技搴� Score
+                t_json["likeDate"] = AppUtil::getTimeSecString();//"2018-01-01 01:01:01";//姣旇緝鏃堕棿
+
+                t_json["picName"] = "wait todo";
+
+
+                t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+                t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+                t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+                t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+                t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+                //#todo
+                t_json["picDate"] = faceExtractQueueTmp[i].scoredRects[j].properties["time"];
+//                DBG("timeC ::::B" << t_json["picDate"].asString());
+//                t_json["picDate"] = AppUtil::getTimeSecString();
+
+                t_json["content"] = "wait todo";
+                t_json["viType"] = "1";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+                t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
+
+
+                //faceExtractElement.setProperty("dev_id", str_device_id);
+                //faceExtractElement.setProperty("cg_id", str_ch_id);
+                t_json["videoNum"] = getProperty("dev_id");//Video璁惧缂栧彿//getProperty("path");//Vide缂栧彿 澶栭敭
+                t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+                t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+                t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+                //浜鸿劯灞炴��
+                t_json["Age"] = atoi(
+                    faceExtractQueueTmp[i].scoredRects[j].properties["age"].c_str());//妫�娴嬬殑骞撮緞  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+
+                //#todo 浼樺寲 get vector<string> from json
+                t_json["Gender"] = faceExtractQueueTmp[i].scoredRects[j].properties["gender"];//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
+                switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["gender"].c_str())) {
+                    case 0:
+                        t_json["Gender"] = "濂�";
+                        break;
+                    case 1:
+                        t_json["Gender"] = "鐢�";
+                        break;
+                }
+
+                t_json["BeautyLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["beauty"];//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+                t_json["SimleLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["smile"];//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+                t_json["Race"] = "";//妫�娴嬬殑绉嶆棌  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+                t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+                //#todo 浼樺寲 get vector<string> from json
+                switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["race"].c_str())) {
+                    case 1:
+                        t_json["Race"] = "鐧戒汉";
+                        break;
+                    case 2:
+                        t_json["Race"] = "榛勪汉";
+                        break;
+                    case 3:
+                        t_json["Race"] = "榛戜汉";
+                        break;
+                }
+
+//                DBG(t_json.toStyledString());
+
+                t_json["indeviceid"] = appPref.getStringData("fxDevID");
+                t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+                auto faceSearchServer = faceSearchRpcClient.getServer();
+                if (!faceSearchServer) {
+                    ERR("faceSearchServer is null");
+                    EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+                    bool retface = false;
+                    retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", t_json.toStyledString(),
+                                                      str_uuid);
+//                    if (retface) {
+//                        INFO("facedb success");
+//                    } else {
+//                        ERR("facedb fail");
+//                    }
+                } else {
+                    INFO("send faceSearchTopN ");
+                    auto faceSearchResults = faceSearchServer->faceSearchTopN(feature, t_json.toStyledString(), 2,
+                                                                              t_com_sc);
+                }
+            }
+        }
+    } catch (std::exception &e) {
+        ERR(e.what())
+    }
+    if (!features.empty())fireConnectors();
+}
+
+std::vector<::FaceDetect::Data> FaceExtractElement::getFeatures() const {
+    return features;
+}
+
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.h b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
new file mode 100644
index 0000000..8a1a0fb
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
@@ -0,0 +1,61 @@
+#ifndef FACEEXTRACTELEMENT_H
+#define FACEEXTRACTELEMENT_H
+
+#include <FaceServer.h>
+#include <FaceSearchServer.h>
+#include <basic/pipe/TimerElement.h>
+#include <basic/util/BASE64/Base64.h>
+#include "TrackingTrigger.h"
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <opencv2/opencv.hpp>
+#include <queue>
+#include <mutex>
+#include <jsoncpp/json/json.h>
+
+#define VECTOR_MAX 50
+
+class QSharedMemory;
+
+struct FaceToExtract {
+    string uuid;
+    string time;
+    cv::Mat image;
+    FaceDetect::Faces facesPos;
+    std::vector<ScoredRect> scoredRects;
+    std::vector<cv::Mat> faceImages;
+};
+
+class FaceExtractElement : public TimerElement {
+public:
+    FaceExtractElement(std::string shareMemoryName);
+
+    ~FaceExtractElement();
+
+    void setFdfs(FastFdsWithLock *p_fdfsClient) {
+        fdfsClient = p_fdfsClient;
+    }
+
+    void submitFaceExtract(FaceToExtract faceToExtract);
+
+//    AlarmServerInterface::TableNames getTableNames() const;
+    std::vector<::FaceDetect::Data> getFeatures() const;
+
+private:
+    virtual void timerFunc() override;
+
+    IceRpcClient<FaceDetect::FaceExtractServerPrx> faceExtractRpcClient;
+    IceRpcClient<FaceSearch::FaceFeatureSearchServerPrx> faceSearchRpcClient;
+    FastFdsWithLock *fdfsClient;
+    std::vector<FaceToExtract> faceExtractQueue;
+    std::mutex imageQueueMutex;
+    QSharedMemory *sharedMemory;
+
+//    AlarmServerInterface::TableNames tableNames;
+    std::vector<::FaceDetect::Data> features;
+
+    Base64 base64;
+};
+
+
+#endif // FACEEXTRACTELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
new file mode 100644
index 0000000..ccee428
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
@@ -0,0 +1,168 @@
+#include "FaceRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+#define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT);
+
+//************************************
+// Method:    string_replace
+// FullName:  string_replace
+// Access:    public
+// Returns:   void
+// Qualifier: 鎶婂瓧绗︿覆鐨剆trsrc鏇挎崲鎴恠trdst
+// Parameter: std::string & strBig
+// Parameter: const std::string & strsrc
+// Parameter: const std::string & strdst
+//************************************
+static void string_replace(std::string &strBig, const std::string &strsrc, const std::string &strdst) {
+    std::string::size_type pos = 0;
+    std::string::size_type srclen = strsrc.size();
+    std::string::size_type dstlen = strdst.size();
+
+    while ((pos = strBig.find(strsrc, pos)) != std::string::npos) {
+        strBig.replace(pos, srclen, strdst);
+        pos += dstlen;
+    }
+}
+
+//todo  appPref.getStringData("face.detect.proxy")
+FaceRpcElement::FaceRpcElement(string shareMemoryName) :
+//#todo
+    rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"),
+              appPref.getIntData("faceDete.port"), "tcp"), m_triggerElement(0, 50),
+//    rpcClient("faceServer","",10002,"tcp"),
+    sharedMemory(nullptr), trackingTrigger(nullptr) {
+    sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+    if (!sharedMemory->create(4608 * 2592 * 4)) {
+        sharedMemory->attach();
+        DBG("size is " << sharedMemory->size());
+    }
+
+//    string t_camIdex = getProperty("dev_id");
+    //#todo
+    string t_camIdex;
+    if (shareMemoryName.find("/")) {
+        string_replace(shareMemoryName, "//", "/");
+        auto dev_pos = shareMemoryName.find("/cut/") + 5;
+        auto ch_pos = shareMemoryName.find("/", dev_pos) + 1;
+        auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1);
+        auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos);
+        t_camIdex.append(str_device_id).append(str_ch_id);
+    } else {
+        t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc"));
+    }
+
+    float t_score = GETSCORE(t_camIdex + "face.det");
+
+    DBG(" TESTCODE  getValue" << t_camIdex << "  " << t_score << " " << t_score / 100);
+
+    t_score = t_score / 100;
+
+    trackingTrigger = new TrackingTrigger(t_score);
+}
+
+FaceRpcElement::~FaceRpcElement() {
+    if (sharedMemory) {
+        delete sharedMemory;
+    }
+    if (trackingTrigger) {
+        delete trackingTrigger;
+    }
+}
+
+void FaceRpcElement::threadFunc() {
+//    ClockTimer ct("FaceRpcElement::threadFunc");
+//    {
+//
+//        string string1(AppUtil::getTimeString() + "-ff2" + getProperty("time") + ".jpg");
+//        cv::imwrite(string1, image);
+//    }
+    triggerMats.clear();
+    triggerFaces.clear();
+    triggerScoredRects.clear();
+    try {
+        auto server = rpcClient.getServer();
+        if (!server) ERR("server is null");
+        faces = server->faceDetect(image.cols, image.rows, sharedMemory->key().toStdString());
+//        DBG("faces.size  " << faces.size());
+        for (auto face: faces) {
+            ::FaceDetect::RECT &rect = face.rcFace;
+            ScoredRect scoredRect;
+            int x = face.rcFace.left;
+            int y = face.rcFace.top;
+            int w = face.rcFace.right - face.rcFace.left;
+            int h = face.rcFace.bottom - face.rcFace.top;
+            scoredRect.rect = {x, y, w, h};
+            scoredRect.score = (float) face.fAngle.confidence;
+
+            if (trackingTrigger->triggerOnce(scoredRect)) {
+                auto property = server->faceProperty(image.cols, image.rows, face, sharedMemory->key().toStdString());
+                trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+                trackingTrigger->getLastRect().properties["age"] = to_string(property.age);
+                trackingTrigger->getLastRect().properties["gender"] = to_string(property.gender);
+                trackingTrigger->getLastRect().properties["beauty"] = to_string(property.beauty_level);
+                trackingTrigger->getLastRect().properties["smile"] = to_string(property.smile_level);
+                trackingTrigger->getLastRect().properties["race"] = to_string(property.race);
+                trackingTrigger->getLastRect().properties["time"] = getProperty("time");
+
+                triggerFaces.push_back(face);
+                triggerMats.push_back(image(
+                    CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone());
+                triggerScoredRects.push_back(trackingTrigger->getLastRect());
+            } else {
+//                DBG("trackingTrigger->triggerOnce(scoredRect) is false  ");
+            }
+        }
+        trackingTrigger->triggerLine();
+        //        DBG("faces.size  " << faces.size());
+        if (getLastScoreRects().size() > 0) {
+            m_triggerElement.setState(true);
+        } else {
+            m_triggerElement.setState(false);
+        }
+
+        m_triggerElement.triggerOnce(false);
+        if (triggerMats.size() > 0)fireConnectors("FaceTrigger");
+        fireConnectors();
+    } catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+cv::Mat FaceRpcElement::getImage() const {
+    return image;
+}
+
+::FaceDetect::Faces FaceRpcElement::getTriggerFaces() const {
+    return triggerFaces;
+}
+
+::FaceDetect::Faces FaceRpcElement::getFaces() const {
+    return faces;
+}
+
+std::vector<cv::Mat> FaceRpcElement::getTriggerMats() {
+    return triggerMats;
+}
+
+std::vector<ScoredRect> FaceRpcElement::getTriggerScoreRects() const {
+    return triggerScoredRects;
+}
+
+std::vector<ScoredRect> FaceRpcElement::getLastScoreRects() const {
+    return trackingTrigger->getLastScoreRects();
+}
+
+void FaceRpcElement::setImage(const cv::Mat &value) {
+    if (value.size != image.size) {
+        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+    }
+    value.copyTo(image);
+}
+
+bool FaceRpcElement::getTriggerState() const {
+    return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.h b/QiaoJiaSystem/StructureApp/FaceRpcElement.h
new file mode 100644
index 0000000..4804da4
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.h
@@ -0,0 +1,52 @@
+#ifndef FACERPCELEMENT_H
+#define FACERPCELEMENT_H
+
+#include <FaceServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <RapidStructureApp/TriggerElement.h>
+#include "TrackingTrigger.h"
+
+class QSharedMemory;
+
+class FaceRpcElement : public basic::PipeElement {
+public:
+    FaceRpcElement(string);
+
+    ~FaceRpcElement();
+
+    // PipeElement interface
+    void setImage(const cv::Mat &value);
+
+    ::FaceDetect::Faces getFaces() const;
+
+    std::vector<cv::Mat> getTriggerMats();
+
+    std::vector<ScoredRect> getTriggerScoreRects() const;
+
+    std::vector<ScoredRect> getLastScoreRects() const;
+
+    ::FaceDetect::Faces getTriggerFaces() const;
+
+    bool getTriggerState() const;
+
+    cv::Mat getImage() const;
+
+private:
+    virtual void threadFunc() override;
+
+private:
+    IceRpcClient<FaceDetect::FaceDetectServerPrx> rpcClient;
+    cv::Mat image;
+    QSharedMemory *sharedMemory;
+    ::FaceDetect::Faces faces;
+    TrackingTrigger *trackingTrigger;
+    ::FaceDetect::Faces triggerFaces;
+    std::vector<cv::Mat> triggerMats;
+    std::vector<ScoredRect> triggerScoredRects;
+
+    TriggerElement m_triggerElement;
+};
+
+#endif // FACERPCELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp b/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp
new file mode 100644
index 0000000..44a0088
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/ImageDrawElement.cpp
@@ -0,0 +1,42 @@
+#include "ImageDrawElement.h"
+#include <basic/util/opencv/CvUtil.h>
+
+ImageDrawElement::ImageDrawElement() {
+
+}
+
+void ImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) {
+    cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5,
+                cv::Scalar(255, 255, 0), 2);
+}
+
+void ImageDrawElement::processImage(cv::Mat &image) {
+    auto faceData = faces.getData();
+    auto yoloObjectsData = yoloObjects.getData();
+
+    for (auto face: faceData) {
+        auto rect = CvUtil::zoomRect(face.rect, 1.2, 1.2);
+        cv::rectangle(image, rect, face.id >= 0 ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 255, 255), 2);
+        int i = 0;
+        for (auto &property:face.properties) {
+            darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+        }
+    }
+
+    for (auto yoloObj: yoloObjectsData) {
+        auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1);
+        cv::rectangle(image, rect, yoloObj.id >= 0 ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 255, 255), 2);
+        int i = 0;
+        for (auto &property:yoloObj.properties) {
+            darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+        }
+    }
+}
+
+void ImageDrawElement::setFaces(std::vector<ScoredRect> value) {
+    faces = value;
+}
+
+void ImageDrawElement::setYoloObjects(std::vector<ScoredRect> value) {
+    yoloObjects = value;
+}
diff --git a/QiaoJiaSystem/StructureApp/ImageDrawElement.h b/QiaoJiaSystem/StructureApp/ImageDrawElement.h
new file mode 100644
index 0000000..c3d6d30
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/ImageDrawElement.h
@@ -0,0 +1,30 @@
+#ifndef IMAGEDRAWELEMENT_H
+#define IMAGEDRAWELEMENT_H
+
+#include <YoloServer.h>
+#include <FaceServer.h>
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <basic/core/DoubleBufferedData.h>
+#include "TrackingTrigger.h"
+
+class ImageDrawElement : public ImageFactoryElement {
+public:
+    ImageDrawElement();
+
+    // ImageFactoryElement interface
+    void setFaces(std::vector<ScoredRect> value);
+
+    void setYoloObjects(std::vector<ScoredRect> value);
+
+private:
+    virtual void processImage(cv::Mat &) override;
+
+    void darwProperty(cv::Mat &image, string key, string value, int x, int y);
+
+private:
+    DoubleBufferedData<std::vector<ScoredRect>> faces;
+    DoubleBufferedData<std::vector<ScoredRect>> yoloObjects;
+};
+
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp
new file mode 100644
index 0000000..1dca1a6
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp
@@ -0,0 +1,194 @@
+//
+// Created by basic on 18-8-24.
+//
+
+#include "JudgmentRetrogradeTool.h"
+#include <basic/util/opencv/CvMath.hpp>
+#include <QtCore/QDebug>
+
+JudgmentRetrogradeTool::JudgmentRetrogradeTool():
+TimerElement(1000),
+m_triggerElement(0,50)
+{
+
+}
+
+JudgmentRetrogradeTool::~JudgmentRetrogradeTool() {
+
+}
+
+bool JudgmentRetrogradeTool::init(QString area,QString line) {
+    //#todo string ->json
+    QJsonArray arrayAreas = getJsonArrayFromQString(area);
+    if(arrayAreas.isEmpty())
+    {
+        return false;//do not detect
+    }
+    QVector<QPoint> vec;
+    for(int i = 0;i < arrayAreas.size();++i){
+        QJsonValue jsonValue = arrayAreas[i];
+        QJsonObject obj = jsonValue.toObject();
+        int x = obj.value("x").toInt()*2 ;
+        int y = obj.value("y").toInt()*2 ;
+        vec.push_back(QPoint(x,y));
+    }
+
+
+    m_polygon = std::move(QPolygon(vec));
+//    QPoint left[]={QPoint(100,6),QPoint(100,1200),QPoint(850,1200),QPoint(850,6)} ;
+//    QPoint right[]={QPoint(850,6),QPoint(1800,6),QPoint(1800,1200),QPoint(850,1200)} ;
+//    for(auto &item:left)
+//    {
+//          m_UpPolygon<<(item);
+//    }
+//    for(auto &item:right)
+//    {
+//          m_DownPolygon<<(item);
+//    }
+
+    cv::Point start, end;
+    QJsonArray arrayLine = getJsonArrayFromQString(line);
+    if(arrayLine.size() == 2){
+        QJsonValue jsonValue = arrayLine[0];
+        QJsonObject obj = jsonValue.toObject();
+        start.x = obj.value("x").toInt() ;
+        start.y = obj.value("y").toInt() ;
+
+
+        QJsonValue jsonValue2 = arrayLine[1];
+        QJsonObject obj2 = jsonValue2.toObject();
+        end.x = obj2.value("x").toInt() ;
+        end.y = obj2.value("y").toInt() ;
+
+    }else{
+        return false;
+    }
+    setUpBaseline(start,end);
+
+    //setDownBaseline(start,end);
+    //    setUpBaseline();
+    //    setUpDetectionArea();
+    return true;
+}
+
+void JudgmentRetrogradeTool::setYoloObjects(std::vector<ScoredRect> value)
+{
+    mObjs=value;
+    for(auto & item :value){
+        setPerRect(item.id,item.rect);
+    }
+}
+
+
+void JudgmentRetrogradeTool::setPerRect(const long& id,cv::Rect rect){
+    setPerPoint(id,getCenterPoint(rect));
+}
+
+void JudgmentRetrogradeTool::setPerPoint(const long &id, cv::Point2f result) {
+    auto &listCache = m_mapPerPoint[id];
+    cv::Point2f vp;
+    vp.x = result.x;
+    vp.y = result.y;
+    listCache.push_back(vp);
+    if (listCache.size() >= 2) {
+        VectorPoint tt;
+        tt.start_Point = listCache.front();
+        tt.end_Point = listCache.back();
+        auto &temp = m_mapPerDirection[id];
+        //#TODO tt.end_Point in UP Area
+        QPoint center(tt.end_Point.x,tt.end_Point.y);
+        if(m_polygon.containsPoint(center,Qt::OddEvenFill)){
+            temp.push_back(JRTOOL::low_filter(temp.back(), getTheta(m_UpBaseLine, tt)));
+           //DBG("ID="<<id<<" left getTheta="<<getTheta(m_DownBaseLine, tt));
+        }
+        else
+        {
+            temp.clear();
+        }
+        listCache.clear();
+    }
+}
+
+bool JudgmentRetrogradeTool::getPerRet(const long &id) {
+    bool ret = (m_mapPerRet.find(id) == m_mapPerRet.end()) ? true : m_mapPerRet[id];
+    return ret;
+}
+
+void JudgmentRetrogradeTool::setUpBaseline(cv::Point start, cv::Point end) {
+    m_UpBaseLine.start_Point = start;
+    m_UpBaseLine.end_Point = end;
+}
+
+
+void JudgmentRetrogradeTool::setDownBaseline(cv::Point start, cv::Point end) {
+    m_DownBaseLine.start_Point = start;
+    m_DownBaseLine.end_Point = end;
+}
+
+float JudgmentRetrogradeTool::getTheta(BaseLine &directionVectorPoint, VectorPoint &point) {
+    return JRTOOL::getAngelOfTwoVector(directionVectorPoint, point);
+}
+
+void JudgmentRetrogradeTool::timerFunc()
+{
+    func();
+    fireConnectors();
+}
+
+void JudgmentRetrogradeTool::func() {
+    for (auto &item : m_mapPerDirection) {
+        int a = 0;
+        int b = 0;
+        auto &temp = item.second;
+        for (auto &item2 : temp) {
+            if (item2 > 100) {
+                b++;
+            } else if (item2 < 80) {
+                a++;
+            }
+        }
+       // DBG("id="<<item.first<<" a="<<a<<"  b="<<b);
+        bool ret = a >= b ? true : false;
+        m_mapPerRet[item.first] = ret;
+        if (temp.size() > 9) {
+            temp.pop_front();
+        }
+    }
+
+    for (auto scoredRect:mObjs) {
+        if (!getPerRet(scoredRect.id))//judgment.bool
+        {
+            m_triggerElement.setState(true);
+            break;
+        }
+        else
+        {
+            m_triggerElement.setState(false);
+
+        }
+    }
+    m_triggerElement.triggerOnce();
+}
+
+QJsonArray JudgmentRetrogradeTool::getJsonArrayFromQString(const QString strJson)
+{
+    QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+    if( jsonDocument.isNull() ){
+        qDebug()<< "please check the string"<< strJson.toLocal8Bit();
+        return QJsonArray();
+    }
+    QJsonArray jsonArray = jsonDocument.array();
+    return jsonArray;
+}
+
+void JudgmentRetrogradeTool::setUpDetectionArea()
+{
+
+}
+void JudgmentRetrogradeTool::setDownDetectionArea()
+{
+
+}
+bool JudgmentRetrogradeTool::getTriggerState() const {
+    return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h
new file mode 100644
index 0000000..c2bb157
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h
@@ -0,0 +1,118 @@
+//
+// Created by basic on 18-8-24.
+//
+
+#ifndef JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
+#define JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
+
+#include <iostream>
+#include <map>
+#include <list>
+#include <opencv2/opencv.hpp>
+#include <basic/pipe/TimerElement.h>
+#include "YoloRpcElement.h"
+#include <QSharedMemory>
+#include <QString>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QJsonDocument>
+#include <QtGui/QPolygon>
+
+struct VectorPoint{
+    cv::Point2f start_Point;
+    cv::Point2f end_Point;
+};
+
+typedef VectorPoint BaseLine;
+namespace JRTOOL{
+//浠t1涓哄熀鍑�
+//璁$畻涓や釜鍚戦噺鐨勫す瑙�,0~90涔嬮棿涓烘甯�,90~180涓洪�嗚
+static float getAngelOfTwoVector(VectorPoint &pt1, VectorPoint &pt2){
+    float theta = atan2(pt1.end_Point.x - pt1.start_Point.x, pt1.end_Point.y - pt1.start_Point.y)
+            - atan2(pt2.end_Point.x - pt2.start_Point.x, pt2.end_Point.y - pt2.start_Point.y);
+    if (theta > CV_PI)
+        theta -= 2 * CV_PI;
+    if (theta < -CV_PI)
+        theta += 2 * CV_PI;
+    theta = theta * 180.0 / CV_PI;
+    return abs(theta);
+}
+
+//婊ゆ尝
+static float low_filter(float a, float b){
+    float sample_value;
+    float X=0.1;
+    sample_value=(1-X)*b+X*a;
+    return(sample_value);
+}
+}
+
+
+class JudgmentRetrogradeTool :public TimerElement {
+public:
+    JudgmentRetrogradeTool();
+
+    virtual ~JudgmentRetrogradeTool();
+
+    bool init(QString area,QString line);
+
+    void setYoloObjects(std::vector<ScoredRect> value);
+
+    bool getPerRet(const long&);
+
+     bool getTriggerState() const;
+
+private:
+    void setPerPoint(const long&,cv::Point2f);
+    void setPerRect(const long&,cv::Rect rect);
+
+    //璁剧疆涓婅鐨勮繍鍔ㄥ熀鍑嗙嚎
+    void setUpBaseline(cv::Point start,cv::Point end);
+
+    //璁剧疆涓婅妫�娴嬪尯鍩�
+    void setUpDetectionArea();
+
+    //璁剧疆涓嬭鐨勮繍鍔ㄥ熀鍑嗙嚎
+    void setDownBaseline(cv::Point start,cv::Point end);
+
+    //璁剧疆涓嬭妫�娴嬪尯鍩�
+    void setDownDetectionArea();
+
+
+    void func();
+
+    float getTheta(BaseLine&,VectorPoint&);
+
+    QJsonArray getJsonArrayFromQString(const QString strJson);
+
+
+private:
+    //    virtual void threadInitial() override;
+    virtual void timerFunc()override;
+    //    virtual void threadClosing()override;
+
+private:
+
+    //鍩哄噯绾垮悜閲�
+    BaseLine m_UpBaseLine;
+    BaseLine m_DownBaseLine;
+
+    //浜哄憳杩愬姩杞ㄨ抗
+    //璺熻釜id,杩愬姩涓績鐐�
+    std::map<long,std::vector<cv::Point2f>> m_mapPerPoint;
+
+    //璺熻釜id,涓庡熀鍑嗙嚎鐨勫す瑙掑垪琛�
+    std::map<long,std::list<float>> m_mapPerDirection;
+
+    //璺熻釜id,閫嗚鐘舵��
+    std::map<long,bool> m_mapPerRet;
+
+    QPolygon m_polygon;
+
+    TriggerElement m_triggerElement;
+
+    std::vector<ScoredRect> mObjs;
+};
+
+
+#endif //JUDGINGRETROGRADE_JUDGMENTRETROGRADETOOL_H
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
new file mode 100644
index 0000000..dda7544
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -0,0 +1,112 @@
+#include "NewRecordVideoElement.h"
+#include <basic/util/app/AppPreference.hpp>
+
+//#todo index int -> string
+NewRecordVideoElement::NewRecordVideoElement(std::string camid) :
+videoEncoderElement(cv::Size(1920, 1080), 9, 0),
+camID(camid)
+{
+
+   // basicPath();
+    m_cutPath= appPref.getStringData("user.loop.absolute.path");
+}
+
+NewRecordVideoElement::~NewRecordVideoElement() {
+m_imgBufQue.clear();
+}
+
+std::string NewRecordVideoElement::startRecord() {
+
+//    ImgInfo info=m_HiredisTool.getImage(camID);
+     ImgInfo info;
+     getImg(info);
+    std::string srcPath= getFileName(info.time);
+
+
+    try {
+        videoEncoderElement.threadInitial(srcPath, info.img);
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+    }
+    return srcPath;
+}
+
+void NewRecordVideoElement::endRecord() {
+    ImgInfo info;
+    getImg(info);
+    videoEncoderElement.threadClosing();
+}
+
+void NewRecordVideoElement::doRecord() {
+
+
+//    ImgInfo info=m_HiredisTool.getImage(camID);
+     ImgInfo info;
+     getImg(info);
+     DBG(" time="<<info.time);
+    videoEncoderElement.doFunc(info.img);
+}
+
+ std::string NewRecordVideoElement::getFileName(std::string timeStamp)
+{
+    std::string dirPath=makeDir();
+
+    char szDateTime[256] = {0};
+    sprintf(szDateTime, "%s%s.mp4", dirPath.c_str(), timeStamp.c_str());
+    DBG(szDateTime);
+    return szDateTime;
+}
+
+
+std::string NewRecordVideoElement::makeDir() {
+
+    //# ./camIndex/YYYYMM/DD/YYYYMMDDHH/
+    std::string t_FilePath = m_cutPath;
+
+    if (t_FilePath.back() != '/') {
+        t_FilePath.push_back('/');
+    }
+    char buf[24];
+
+     time_t t=time(nullptr);
+     // 20180901113048 2018-09-01 11:30:48
+     strftime(buf,24,"%Y%m%d%H",localtime(&t));
+      std::string t_strTime(buf);
+       //# ./camIndex/YYYYMM/DD/
+     t_FilePath.append(camID + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/");
+     //YYYYMMDDHH
+      t_FilePath.append(t_strTime.substr(0,10) + "/");
+     std::string t_cmd = "mkdir -p '";
+    t_cmd.append(t_FilePath + "'");
+    //#get path mkdir path
+    system(t_cmd.c_str());
+
+    return t_FilePath;
+}
+void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat img)
+{
+     ImgInfo info;
+     info.img=img;
+     info.time=time;
+     m_imgBufQue.push_front(info);
+//     int size=m_imgBufQue.size();
+//     DBG("m_imgBufQue size="<<size);
+}
+ void NewRecordVideoElement::getImg(ImgInfo& info)
+ {
+        //todo
+        int len=10;
+         info=m_imgBufQue.back();
+        int size=m_imgBufQue.size();
+        //DBG("m_imgBufQue size="<<size<<" time="<<info.time);
+        if(size>len)
+        {
+             m_imgBufQue.pop_back();
+
+
+        }
+
+
+
+ }
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
new file mode 100644
index 0000000..8da45c7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
@@ -0,0 +1,38 @@
+#ifndef NEWRECORDVIDEOELEMENT_H
+#define NEWRECORDVIDEOELEMENT_H
+
+#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
+struct ImgInfo
+{
+    std::string time;
+    cv::Mat img;
+};
+class NewRecordVideoElement {
+
+public:
+
+    NewRecordVideoElement(){}
+    NewRecordVideoElement(std::string camid);
+
+    ~NewRecordVideoElement();
+
+    std::string startRecord();
+
+    void doRecord();
+
+    void endRecord();
+
+    void pushImgBuf(const std::string& time,cv::Mat img);
+
+    void getImg(ImgInfo& info);
+
+private:
+    std::string getFileName(std::string timeStamp);
+    std::string makeDir();
+    ffmpeg::VideoEncodeElement videoEncoderElement;
+    std::string camID;
+    std::string m_cutPath;
+    std::list<ImgInfo> m_imgBufQue;
+};
+
+#endif // RECORDVIDEOELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp
new file mode 100644
index 0000000..df68f9a
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp
@@ -0,0 +1,241 @@
+#include "PerimeterElement.h"
+#include <basic/event/EventBus.hpp>
+#include <basic/debug/Debug.h>
+#include <iostream>
+#include <opencv2/opencv.hpp>
+#include <basic/timer_counter/Clocktimer.h>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QString>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <basic/util/opencv/CvUtil.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+PerimeterElement::PerimeterElement(int alarm_people_num):
+m_nAlarmPeopleNum(alarm_people_num),
+PipeElement(true),
+trackingTrigger(nullptr),
+mRealNum(0),
+m_triggerElement(0,50)
+{
+
+    trackingTrigger= new TrackingTrigger(0.5);
+
+
+}
+
+PerimeterElement::~PerimeterElement()
+{
+    if(trackingTrigger)
+    {
+        delete trackingTrigger;
+        trackingTrigger=nullptr;
+    }
+}
+
+
+
+void PerimeterElement::threadInitial()
+{
+
+}
+
+
+void PerimeterElement::threadFunc()
+{
+
+    int num=0;
+    string detKey = getProperty("dev_id") + getProperty("ch_id")+getProperty("sdkType")+".det";
+     float t_det_sc =0.75;
+
+     t_det_sc= appPref.getFloatData(detKey) == -1 ? 0.75 : appPref.getFloatData(detKey);
+
+
+//           t_det_sc= appPref.getFloatData(t_camIdex + "perimeter.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "perimeter.det");
+
+
+    for(auto obj:m_objs){
+            if(obj.type!=0) continue;
+            //todo
+            if(obj.prob < ((1-0.5)/2+0.5))continue;
+
+//            ScoredRect scoredRect;
+
+            int x = obj.rcObj.left * image.cols;
+            int y = obj.rcObj.top * image.rows;
+            int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+            int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+//            scoredRect.rect = cv::Rect(x, y, w, h);
+//            scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+           // cv::Rect rec=obj.rect;
+            QRect rect(x,y,w,h);
+            QPoint center = rect.center();
+            if(mPolygon.containsPoint(center,Qt::OddEvenFill))
+            {
+               // scoredRect.isMask=true;
+                //if(bInWeekTime)
+                   num++;
+                  auto t_image = image(cv::Rect(x, y, w, h)& cv::Rect(0, 0, image.cols, image.rows)).clone();
+                 std::string imgUrl=uploadImgToFdfs(t_image);
+                 saveInfoToEs(imgUrl,obj);
+            }
+//            if(trackingTrigger->triggerOnce(scoredRect))
+//            {
+//                trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+//                trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+//            }
+
+    }
+    trackingTrigger->triggerLine();
+    if(num>=m_nAlarmPeopleNum)
+    {
+        m_triggerElement.setState(true);
+
+    }
+    else
+    {
+        m_triggerElement.setState(false);
+    }
+    m_triggerElement.triggerOnce();
+    mRealNum=num;
+
+    fireConnectors();
+}
+
+
+
+
+
+
+void PerimeterElement::setSensitivity(float value)
+{
+    sensitivity = value;
+}
+
+
+
+void PerimeterElement::setObjsResults(const YoloDetect::ObjInfos &value)
+{
+    m_objs = value;
+}
+
+std::vector<ScoredRect> PerimeterElement::getLastScoreRects() const {
+    return trackingTrigger->getLastScoreRects();
+}
+
+void PerimeterElement::setYoloObjects(std::vector<ScoredRect> value)
+{
+    mObjs=value;
+}
+
+int PerimeterElement::getRealNum() const
+{
+    //DBG("getRealNum "<<mRealNum);
+    return mRealNum;
+}
+void PerimeterElement::setMask(std::string mask)
+{
+    QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask));
+    if(arrayAreas.isEmpty())
+    {
+        return;//do not detect
+    }
+    for(int i = 0;i < arrayAreas.size();++i)
+    {
+        QJsonValue jsonValue = arrayAreas[i];
+        QJsonObject obj = jsonValue.toObject();
+        int x = obj.value("x").toInt()*2;
+        int y = obj.value("y").toInt()*2;
+        mPolygon<<(QPoint(x,y));
+
+    }
+}
+QJsonArray PerimeterElement::getJsonArrayFromQString(const QString& strJson)
+{
+    QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+    if( jsonDocument.isNull() ){
+        //DBG("please check the string"<< strJson.toLocal8Bit());
+        return QJsonArray();
+    }
+    QJsonArray jsonArray = jsonDocument.array();
+    return jsonArray;
+}
+
+void PerimeterElement::setImage(const cv::Mat &value)
+{
+//    if (value.size != image.size) {
+//        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+//    }
+//    value.copyTo(image);
+}
+bool PerimeterElement::getTriggerState() const {
+    return m_triggerElement.getTriggerState();
+}
+std::string PerimeterElement::uploadImgToFdfs(cv::Mat& image)
+{
+    std::string strImgUrl = "http://";
+    if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+        fdfsClient->rwLock.rdlock();
+        std::vector<unsigned char> buffer;
+        CvUtil::cvMat2Buffer(image, buffer);
+        std::string strImgUrlTmp = "";
+        fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+        strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+        strImgUrl.clear();
+        strImgUrl = strImgUrlTmp;
+//                    strImgUrl.append("/").append(strImgUrlTmp);
+        fdfsClient->rwLock.unlock();
+    }
+    return strImgUrl;
+}
+bool PerimeterElement::saveInfoToEs(const std::string& imgUrl,const ::YoloDetect::ObjInfo& obj)
+{
+
+        //#todo
+        EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+        string str_uuid;
+        uuid_t t_uuid;
+        char str[36];
+        uuid_generate(t_uuid);
+        uuid_unparse(t_uuid, str);
+        str_uuid = str;
+
+
+        Json::Value t_json;
+        t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+        t_json["picName"] = "wait todo";
+        t_json["DataType"] = cocoData[obj.type];
+        t_json["Score"] = obj.prob;
+
+        t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+        t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+        t_json["picSmUrl"] = imgUrl;//浜哄憳鎶撳皬鍥�
+        t_json["picDate"] = getProperty("time");
+        t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+        t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
+        t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+        t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+        t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+        t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+        t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+        t_json["indeviceid"] = appPref.getStringData("fxDevID");
+        t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+        bool retface = false;
+        std::string name=getProperty("sdkType")+"det";
+        retface = pManagerEsDB.insertData(name, "info", t_json.toStyledString(), str_uuid);
+        if (retface)
+        {
+            INFO(name<<"db success");
+        }
+        else
+        {
+            ERR(name<<"db fail");
+        }
+}
diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.h b/QiaoJiaSystem/StructureApp/PerimeterElement.h
new file mode 100644
index 0000000..b6fbd88
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/PerimeterElement.h
@@ -0,0 +1,82 @@
+#ifndef PERIMETERELEMENT
+#define PERIMETERELEMENT
+#include <basic/pipe/PipeElement.h>
+#include <basic/event/EventHandler.hpp>
+#include <opencv2/opencv.hpp>
+#include <Ice/Ice.h>
+#include <YoloServer.h>
+#include <QtGui/qpolygon.h>
+#include "TrackingTrigger.h"
+#include <QJsonArray>
+#include <RapidStructureApp/TriggerElement.h>
+#include <basic/util/fastdfs/FastFds.hpp>
+class PerimeterElement : public basic::PipeElement
+{
+public:
+    PerimeterElement(int alarm_people_num=1);
+public:
+    ~PerimeterElement();
+
+    //鏄惁鏈夌煩褰�
+    bool hasRects();
+    //璁剧疆ROI鍖哄煙
+    void setMask(std::string mask);
+
+    void setImage(const cv::Mat &value);
+
+    void setYoloObjects(std::vector<ScoredRect> value);
+
+    //灏嗘娴嬬粨鏋滄斁鍒版鍗曞厓涓�
+    //void setVptResults(const vector<VPT_ObjInfo> &value);
+    void setObjsResults(const ::YoloDetect::ObjInfos &value);
+
+    //璁剧疆缃俊搴�
+    void setSensitivity(float value);
+
+    //鑾峰彇鐭╁舰妗�
+    std::vector<cv::Rect2f> getRects() const;
+
+    //鑾峰彇YOLO妫�娴嬬殑缁撴灉
+    std::vector<ScoredRect> getLastScoreRects() const;
+
+    int getRealNum() const;
+
+    bool getTriggerState() const;
+
+    void setFdfs(FastFdsWithLock *p_fdfsClient) {
+        fdfsClient = p_fdfsClient;
+    }
+
+
+private:
+
+
+    virtual void threadInitial()override;
+
+    virtual void threadFunc()override;
+
+    QJsonArray getJsonArrayFromQString(const QString& strJson);
+
+    std::string uploadImgToFdfs(cv::Mat& image);
+
+    bool saveInfoToEs(const std::string& imgUrl,const ::YoloDetect::ObjInfo& obj);
+
+
+
+private:
+    cv::Mat image;
+    cv::Mat mask;
+    //vector<VPT_ObjInfo> vptResults;
+    ::YoloDetect::ObjInfos m_objs;
+    float sensitivity;
+    QPolygon mPolygon;
+    TrackingTrigger *trackingTrigger;
+    ::YoloDetect::stringData cocoData;
+    int mRealNum;
+    int m_nAlarmPeopleNum;
+    std::vector<ScoredRect> mObjs;
+    TriggerElement m_triggerElement;
+    FastFdsWithLock* fdfsClient;
+};
+
+#endif // PAELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp
new file mode 100644
index 0000000..a4ced8a
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/RecordVideoElement.cpp
@@ -0,0 +1,63 @@
+#include "RecordVideoElement.h"
+#include <basic/util/app/AppPreference.hpp>
+
+RecordVideoElement::RecordVideoElement(int index, std::string rtsp)
+    : m_nIndex(std::to_string(index)), m_strRtsp(rtsp),
+      loopRecordClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"),
+                       appPref.getIntData("loopRecord.port"), "tcp") {
+
+}
+
+//#todo index int -> string
+RecordVideoElement::RecordVideoElement(std::string index, std::string rtsp)
+    : m_nIndex(index), m_strRtsp(rtsp),
+      loopRecordClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"),
+                       appPref.getIntData("loopRecord.port"), "tcp") {
+
+}
+
+RecordVideoElement::~RecordVideoElement() {
+
+}
+
+std::string RecordVideoElement::startRecord() {
+    return callStartRecord(m_strRtsp);
+}
+
+std::string RecordVideoElement::callStartRecord(std::string jsonValue) {
+    try {
+        auto server = loopRecordClient.getServer();
+        return server->addCamera(m_nIndex, jsonValue);
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+        return "";
+    }
+}
+
+std::string RecordVideoElement::startRecord(std::string json) {
+    return callStartRecord(json);
+}
+
+void RecordVideoElement::endRecord() {
+    try {
+        auto server = loopRecordClient.getServer();
+        server->removeCamera(m_nIndex);
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+void RecordVideoElement::feedDog() {
+    try {
+        auto server = loopRecordClient.getServer();
+        server->feedDog(m_nIndex);
+        //INFO("feedDog:" + m_nIndex);
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+
diff --git a/QiaoJiaSystem/StructureApp/RecordVideoElement.h b/QiaoJiaSystem/StructureApp/RecordVideoElement.h
new file mode 100644
index 0000000..c036246
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/RecordVideoElement.h
@@ -0,0 +1,33 @@
+#ifndef RECORDVIDEOELEMENT_H
+#define RECORDVIDEOELEMENT_H
+
+#include "TimerElement.h"
+#include <basic/rpc/IceRpc.hpp>
+#include "RecordVideo.h"
+
+class RecordVideoElement {
+
+public:
+    RecordVideoElement(int index, std::string rtsp);
+
+    RecordVideoElement(std::string index, std::string rtsp);
+
+    ~RecordVideoElement();
+
+    std::string startRecord();
+
+    std::string startRecord(std::string json);
+
+    void endRecord();
+
+    void feedDog();
+
+private:
+    std::string m_nIndex;
+    std::string m_strRtsp;
+    IceRpcClient<RecordVideo::LoopRecorderPrx> loopRecordClient;
+
+    std::string callStartRecord(std::string jsonValue);
+};
+
+#endif // RECORDVIDEOELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/StructureAppI.cpp b/QiaoJiaSystem/StructureApp/StructureAppI.cpp
new file mode 100644
index 0000000..c501d76
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/StructureAppI.cpp
@@ -0,0 +1,90 @@
+#include "StructureAppI.h"
+Ice::Int StructureAppI::addCamera(Ice::Int index, const std::string &json, const Ice::Current &current)
+{
+    if(controllers.find(index)==controllers.end()){
+        if(currentCount>=maxCount){
+            ERR("addCamera faild, camera's num is full!")
+            return -1;
+        }
+        Json::CharReaderBuilder builder;
+        auto reader = builder.newCharReader();
+        Json::Value value;
+        reader->parse(json.data(), json.data() + json.size(), &value, nullptr);
+        controllers[index] = new AppPipeController(index,std::move(value));
+        controllers[index]->start();
+        currentCount++;
+        return 0;
+    }else{
+        removeCamera(index,current);
+        DBG("removeCamera "<<index)
+        return addCamera(index,json,current);
+    }
+}
+
+Ice::Int StructureAppI::removeCamera(Ice::Int index, const Ice::Current &)
+{
+    if(controllers.find(index)==controllers.end())return -1;
+    auto controller = controllers[index];
+    controller->stop();
+    controller->wait();
+    delete controller;
+    controllers.erase(index);
+    currentCount--;
+    return 0;
+}
+
+Ice::Int StructureAppI::removeAll(const Ice::Current &)
+{
+    for(auto controller: controllers){
+        controller.second->stop();
+    }
+    for(auto controller: controllers){
+        controller.second->wait();
+        delete controller.second;
+    }
+    controllers.clear();
+    currentCount = 0;
+    return 0;
+}
+
+Ice::Int StructureAppI::getMaxCamCount(const Ice::Current &)
+{
+    return maxCount;
+}
+
+Ice::Int StructureAppI::getCurrentCamCount(const Ice::Current &)
+{
+    return currentCount;
+}
+
+int StructureAppI::addVedio(int index, string path,string state)
+{
+    if(controllers.find(index)==controllers.end()){
+        if(currentCount>=maxCount){
+            ERR("addCamera faild, camera's num is full!")
+            return -1;
+        }
+        Json::Value json;
+        json["rtsp"] = path;
+        json["state"] = state;
+        controllers[index] = new AppPipeController(index,json);
+        controllers[index]->start();
+        currentCount++;
+        return 0;
+    }/*else
+    {
+        removeCamera(index,current);
+        DBG("removeCamera "<<index)
+        return addCamera(index,json,current);
+    }*/
+}
+
+string StructureAppI::getRtmp(Ice::Int index, const Ice::Current &)
+{
+    if(controllers.find(index)==controllers.end())return "";
+    auto controller = controllers[index];
+    return controller->getRtmp();
+}
+
+
+
diff --git a/QiaoJiaSystem/StructureApp/StructureAppI.h b/QiaoJiaSystem/StructureApp/StructureAppI.h
new file mode 100644
index 0000000..b09efdd
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/StructureAppI.h
@@ -0,0 +1,50 @@
+#ifndef STRUCTUREAPPI_H
+#define STRUCTUREAPPI_H
+#include "AppPipeController.h"
+#include <atomic>
+#include <Ice/Ice.h>
+#include "rpc/StructureApp.h"
+
+class StructureAppI : public Structure::StructureApp{
+
+public:
+
+    StructureAppI(int maxCount):currentCount(0),maxCount(maxCount)
+    {}
+    ~StructureAppI(){
+        for(auto controller: controllers){
+            delete controller.second;
+        }
+        controllers.clear();
+    }
+    // StructureApp interface
+public:
+    virtual Ice::Int addCamera(Ice::Int, const std::string &, const Ice::Current &) override;
+    virtual Ice::Int removeCamera(Ice::Int, const Ice::Current &) override;
+    virtual Ice::Int removeAll(const Ice::Current &) override;
+    virtual Ice::Int getMaxCamCount(const Ice::Current &) override;
+    virtual Ice::Int getCurrentCamCount(const Ice::Current &) override;
+    int addVedio(int index, std::string path, string state);
+
+private:
+    std::map<int, AppPipeController*> controllers;
+    std::atomic<int> currentCount;
+    int maxCount;
+    // StructureApp interface
+public:
+    virtual string getRtmp(Ice::Int, const Ice::Current &) override;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif // STRUCTUREAPPI_H
diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp b/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp
new file mode 100644
index 0000000..c35472c
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.cpp
@@ -0,0 +1 @@
+#include "TrackingTrigger.h"
diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.h b/QiaoJiaSystem/StructureApp/TrackingTrigger.h
new file mode 100644
index 0000000..8fe9509
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.h
@@ -0,0 +1,69 @@
+#ifndef TRACKINGTRIGGER_H
+#define TRACKINGTRIGGER_H
+
+#include <vector>
+#include <opencv2/opencv.hpp>
+#include <functional>
+#include <atomic>
+
+using namespace std;
+
+struct ScoredRect {
+    ScoredRect() : id(-1) ,isMask(false){}
+    bool isMask;
+    float score;
+    cv::Rect rect;
+    long id;
+    map<string, string> properties;
+};
+
+class TrackingTrigger {
+public:
+    TrackingTrigger(float threshold) :
+        threshold(threshold), faceTrackingId(0) {}
+
+    bool triggerOnce(ScoredRect &rect) {
+        bool found = false;
+        for (auto lastRect: lastScoreRects) {
+            if (lastRect.id >= 0 && (rect.rect & lastRect.rect).area() > lastRect.rect.area() * 0.4) {
+                found = true;
+                rect.id = lastRect.id;
+                rect.properties = lastRect.properties;
+                tempScoreRects.push_back(rect);
+                break;
+            }
+        }
+        if (!found) {
+            if (rect.score < threshold) {
+//                tempScoreRects.push_back(rect);
+                return false;
+            } else {
+                rect.id = faceTrackingId++;
+                tempScoreRects.push_back(rect);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    void triggerLine() {
+        lastScoreRects = tempScoreRects;
+        tempScoreRects.clear();
+    }
+
+    ScoredRect &getLastRect() {
+        return tempScoreRects[tempScoreRects.size() - 1];
+    }
+
+    std::vector<ScoredRect> getLastScoreRects() const {
+        return lastScoreRects;
+    }
+
+private:
+    float threshold;
+    std::vector<ScoredRect> lastScoreRects;
+    std::vector<ScoredRect> tempScoreRects;
+    std::atomic<long> faceTrackingId;
+};
+
+#endif // TRACKINGTRIGGER_H
diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
new file mode 100644
index 0000000..7f660d7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
@@ -0,0 +1,199 @@
+#include "YoloRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#include <basic/util/opencv/CvUtil.h>
+
+
+#include <basic/db/Elasticsearch/EsDBTool.h>
+#include <uuid/uuid.h>
+#include <jsoncpp/json/json.h>
+
+#include <basic/db/ES/es/ManagerEsDB.h>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
+YoloRpcElement::YoloRpcElement(string shareMemoryName) :
+    rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
+              appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
+    m_triggerElement(0, 50), trackingTrigger(nullptr) {
+    sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
+//    DBG(shareMemoryName);
+    //1520 x 2688   1080 x 1920 //2560 * 1440 * 4
+    if (!sharedMemory->create(4608 * 2592 * 4)) {
+        sharedMemory->attach();
+    }
+    trackingTrigger = new TrackingTrigger(0.5);
+    try {
+        auto server = rpcClient.getServer();
+        cocoData = server->getCocoData();
+    }
+    catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+YoloRpcElement::~YoloRpcElement() {
+    if (sharedMemory) {
+        delete sharedMemory;
+    }
+    if (trackingTrigger) {
+        delete trackingTrigger;
+    }
+}
+
+void YoloRpcElement::threadFunc() {
+//    ClockTimer ct("YoloRpcElement::threadFunc");.
+    triggerMats.clear();
+    try {
+        auto server = rpcClient.getServer();
+        if (!server) {
+            ERR("server is null");
+            return;
+        }
+        objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
+        if (objs.size() <= 0) {
+            m_triggerElement.setState(false);
+            m_triggerElement.triggerOnce(false);
+            trackingTrigger->triggerLine();
+            return;
+        } else {
+            m_triggerElement.setState(true);
+        }
+        string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+        float t_det_sc =
+            appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+
+        for (auto &obj: objs) {
+            if (obj.type != 0)
+                continue;
+            if (obj.prob < t_det_sc) {
+                continue;
+            }
+            ScoredRect scoredRect;
+
+            int x = obj.rcObj.left * image.cols;
+            int y = obj.rcObj.top * image.rows;
+            int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
+            int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
+            scoredRect.rect = cv::Rect(x, y, w, h);
+
+            scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
+            if (trackingTrigger->triggerOnce(scoredRect)) {
+                trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
+                trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
+                auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone();
+                triggerMats.push_back(t_image);
+
+                std::string strImgUrl = "http://";
+                if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
+                    fdfsClient->rwLock.rdlock();
+                    std::vector<unsigned char> buffer;
+                    CvUtil::cvMat2Buffer(t_image, buffer);
+                    std::string strImgUrlTmp = "";
+                    fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
+                    strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
+                    strImgUrl.clear();
+                    strImgUrl = strImgUrlTmp;
+//                    strImgUrl.append("/").append(strImgUrlTmp);
+                    fdfsClient->rwLock.unlock();
+                }
+
+                //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture
+                {
+                    //#todo
+                    EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+
+                    string str_uuid;
+                    uuid_t t_uuid;
+                    char str[36];
+                    uuid_generate(t_uuid);
+                    uuid_unparse(t_uuid, str);
+                    str_uuid = str;
+
+//                jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d  锛燂紵锛熸嬁涓嶅埌
+//                jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("Image","");//蹇収  锛燂紵锛� 鎷夸笉鍒�
+//                jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷
+//                jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎
+
+                    Json::Value t_json;
+                    t_json["Id"] = str_uuid; //涓婚敭
+//#todo
+
+                    t_json["picName"] = "wait todo";
+                    t_json["DataType"] = cocoData[obj.type];
+                    t_json["Score"] = obj.prob;
+
+                    t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
+                    t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
+                    t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+                    t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
+                    t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
+                    t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+
+//                    faceRpcElement.setProperty("frame_number", frame_number);
+                    t_json["picDate"] = getProperty("time");
+                    t_json["content"] = "wait todo";
+                    t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+                    t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
+                    t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+
+                    t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
+                    t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+                    t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+                    t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+                    t_json["indeviceid"] = appPref.getStringData("fxDevID");
+                    t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+                    DBG(t_json.toStyledString());
+                    bool retface = false;
+                    retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid);
+                    if (retface) {
+                        INFO("facedb success");
+                    } else {
+                        ERR("facedb fail");
+                    }
+                }
+            }
+        }
+        trackingTrigger->triggerLine();
+        m_triggerElement.triggerOnce(false);
+        if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+        fireConnectors();
+    } catch (std::exception &e) {
+        ERR(e.what())
+    }
+}
+
+::YoloDetect::ObjInfos YoloRpcElement::getObjects() const {
+    return objs;
+}
+
+bool YoloRpcElement::getTrigger() const {
+    return (objs.size() > 0 ? true : false);
+}
+
+std::vector<cv::Mat> YoloRpcElement::getTriggerMats() {
+    return triggerMats;
+}
+
+std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const {
+    return trackingTrigger->getLastScoreRects();
+}
+
+void YoloRpcElement::setImage(const cv::Mat &value) {
+    if (value.size != image.size) {
+        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+    }
+    value.copyTo(image);
+}
+
+bool YoloRpcElement::getTriggerState() const {
+    return m_triggerElement.getTriggerState();
+}
diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.h b/QiaoJiaSystem/StructureApp/YoloRpcElement.h
new file mode 100644
index 0000000..857f2d7
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.h
@@ -0,0 +1,52 @@
+#ifndef YOLORPCELEMENT_H
+#define YOLORPCELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <RapidStructureApp/TriggerElement.h>
+#include "TrackingTrigger.h"
+
+class QSharedMemory;
+
+class YoloRpcElement : public basic::PipeElement {
+public:
+    YoloRpcElement(string);
+
+    ~YoloRpcElement();
+
+    void setImage(const cv::Mat &value);
+
+    ::YoloDetect::ObjInfos getObjects() const;
+
+    std::vector<cv::Mat> getTriggerMats();
+
+    std::vector<ScoredRect> getLastScoreRects() const;
+
+    void setFdfs(FastFdsWithLock *p_fdfsClient) {
+        fdfsClient = p_fdfsClient;
+    }
+
+    bool getTriggerState() const;
+
+    bool getTrigger() const;
+
+private:
+    virtual void threadFunc() override;
+
+private:
+    IceRpcClient<YoloDetect::YoloDetectServerPrx> rpcClient;
+    cv::Mat image;
+    QSharedMemory *sharedMemory;
+    ::YoloDetect::ObjInfos objs;
+    TrackingTrigger *trackingTrigger;
+    std::vector<cv::Mat> triggerMats;
+    ::YoloDetect::stringData cocoData;
+    FastFdsWithLock *fdfsClient;
+
+    TriggerElement m_triggerElement;
+};
+
+#endif // YOLORPCELEMENT_H
diff --git a/QiaoJiaSystem/StructureApp/main.cpp b/QiaoJiaSystem/StructureApp/main.cpp
new file mode 100644
index 0000000..c820521
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/main.cpp
@@ -0,0 +1,120 @@
+#include <thread>
+#include "AppPipeController.h"
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/debug/Debug.h>
+
+using namespace std;
+
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS;
+
+#ifdef GLOG
+    ENABLEGLOG("./log/");
+#endif
+
+//    std::string src_path = "/home/bsk/development/c++/Qt/QiaoJiaSystem/build/cut/123456/34/201808/28/123456-34-201808-20180828090100";
+    std::string src_path = "/home/basic/瑙嗛/test";
+
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setIntData("show.image", 0);
+
+    //yolo server
+    appPref.setStringData("yolo.proxy", "yoloServer");
+    //#todo
+    appPref.setStringData("yolo.ip", "");
+    appPref.setIntData("yolo.port", 10003);
+//    rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+    //face detect server
+    appPref.setStringData("faceDete.proxy", "faceServer");
+    //#todo
+    appPref.setStringData("faceDete.ip", "");
+    appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+//    rpcClient("faceServer","",10002,"tcp"),
+
+
+    //fece extern server
+    appPref.setStringData("faceExte.proxy", "faceExtractServer");
+    //#todo
+    appPref.setStringData("faceExte.ip", "");
+    appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+//        "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+    //face search server
+    appPref.setStringData("faceSear.proxy", "faceCmServer");
+    //#todo
+    appPref.setStringData("faceSear.ip", "");
+    appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+//    faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+    //loopRecord server
+    appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+    //#todo
+    appPref.setStringData("loopRecord.ip", "");
+    appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+    appPref.setStringData("ipAdd", "192.168.1.185");
+    appPref.setIntData("ipPort", 9200);
+    Json::Value json;
+
+    //split sdks enable
+    //#todo other sdk
+
+    json["face.enable"] = "1";
+    json["yolo.enable"] = "0";
+    json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+//    json["rtsp"] = "rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream";
+//    json["rtsp"] = "/home/bsk/test/realtime/test123/201809/27/test123-2018092717/2018-09-27 17:20:57.mp4";
+
+
+    FastFdsWithLock fdfsClient;
+//    fdfsClient.fastFds = new FastFds;
+
+    //#todo from path get file list
+    file_filter_type filter = [](const char *dirName, const char *dirent) {
+        return (strstr(dirent, ".mp4") != nullptr);// add format
+    };
+    std::vector<std::string> vec = for_each_file(src_path, filter);
+//    while (true) {
+    auto size = vec.size();
+//    int size = 1;
+    int pos = 0;
+    AppPipeController _AppPipeController("test12344", json, true);
+//    AppPipeController _AppPipeController(src_path, json);
+    _AppPipeController.setfdfsClient(&fdfsClient);
+//    for (; pos < size;) {
+//
+//        //#todo
+//        _AppPipeController.resetVideoCapturePath(vec[pos++]);
+//        _AppPipeController.resetVideoCapturePath(
+//            "/home/basic/work/qiaojia/cut/DS-7808N-SN0820161208AARR691369356WCVU/34/201810/11/DS-7808N-SN0820161208AARR691369356WCVU-34-20181011090000/2018-10-11 09:48:05.mp4");
+    _AppPipeController.start();
+    while (_AppPipeController.getRunning()) {
+        usleep(40000);
+    }
+    _AppPipeController.stop();
+    _AppPipeController.wait();
+    DBG("finish file");
+//    }
+//    }
+
+//    _AppPipeController.start();
+//    while (_AppPipeController.getRunning()) {
+//        usleep(40000);
+//    }
+//    _AppPipeController.stop();
+//    _AppPipeController.wait();
+//
+    getchar();
+
+    return 0;
+}
diff --git a/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py b/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py
new file mode 100644
index 0000000..caeef8c
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/Basic/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("Basic")
+
+# Modules:
+import StructureApp_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py b/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py
new file mode 100644
index 0000000..04e7326
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/Structure/__init__.py
@@ -0,0 +1,10 @@
+# Generated by slice2py - DO NOT EDIT!
+#
+
+import Ice
+Ice.updateModule("Structure")
+
+# Modules:
+import StructureApp_ice
+
+# Submodules:
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp b/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp
new file mode 100644
index 0000000..7fbdcb5
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.cpp
@@ -0,0 +1,854 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `StructureApp.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <StructureApp.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+#   pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+#   pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_Structure_StructureApp_ids[2] =
+{
+    "::Ice::Object",
+    "::Structure::StructureApp"
+};
+const ::std::string iceC_Structure_StructureApp_ops[] =
+{
+    "addCamera",
+    "getCurrentCamCount",
+    "getMaxCamCount",
+    "getRtmp",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "removeAll",
+    "removeCamera"
+};
+const ::std::string iceC_Structure_StructureApp_addCamera_name = "addCamera";
+const ::std::string iceC_Structure_StructureApp_removeCamera_name = "removeCamera";
+const ::std::string iceC_Structure_StructureApp_removeAll_name = "removeAll";
+const ::std::string iceC_Structure_StructureApp_getMaxCamCount_name = "getMaxCamCount";
+const ::std::string iceC_Structure_StructureApp_getCurrentCamCount_name = "getCurrentCamCount";
+const ::std::string iceC_Structure_StructureApp_getRtmp_name = "getRtmp";
+
+}
+
+bool
+Structure::StructureApp::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_Structure_StructureApp_ids, iceC_Structure_StructureApp_ids + 2, s);
+}
+
+::std::vector<::std::string>
+Structure::StructureApp::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_Structure_StructureApp_ids[0], &iceC_Structure_StructureApp_ids[2]);
+}
+
+::std::string
+Structure::StructureApp::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+Structure::StructureApp::ice_staticId()
+{
+    static const ::std::string typeId = "::Structure::StructureApp";
+    return typeId;
+}
+
+bool
+Structure::StructureApp::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_index;
+    ::std::string iceP_jsonConfig;
+    istr->readAll(iceP_index, iceP_jsonConfig);
+    inS.endReadParams();
+    int ret = this->addCamera(iceP_index, ::std::move(iceP_jsonConfig), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_index;
+    istr->readAll(iceP_index);
+    inS.endReadParams();
+    int ret = this->removeCamera(iceP_index, current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeAll(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    inS.readEmptyParams();
+    int ret = this->removeAll(current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getMaxCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    inS.readEmptyParams();
+    int ret = this->getMaxCamCount(current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getCurrentCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    inS.readEmptyParams();
+    int ret = this->getCurrentCamCount(current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getRtmp(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_index;
+    istr->readAll(iceP_index);
+    inS.endReadParams();
+    ::std::string ret = this->getRtmp(iceP_index, current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_Structure_StructureApp_ops, iceC_Structure_StructureApp_ops + 10, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_Structure_StructureApp_ops)
+    {
+        case 0:
+        {
+            return _iceD_addCamera(in, current);
+        }
+        case 1:
+        {
+            return _iceD_getCurrentCamCount(in, current);
+        }
+        case 2:
+        {
+            return _iceD_getMaxCamCount(in, current);
+        }
+        case 3:
+        {
+            return _iceD_getRtmp(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 6:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 7:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 8:
+        {
+            return _iceD_removeAll(in, current);
+        }
+        case 9:
+        {
+            return _iceD_removeCamera(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+Structure::StructureAppPrx::_iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_addCamera_name);
+    outAsync->invoke(iceC_Structure_StructureApp_addCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index, iceP_jsonConfig);
+        },
+        nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, int iceP_index, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_removeCamera_name);
+    outAsync->invoke(iceC_Structure_StructureApp_removeCamera_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index);
+        },
+        nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_removeAll(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_removeAll_name);
+    outAsync->invoke(iceC_Structure_StructureApp_removeAll_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        nullptr,
+        nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getMaxCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getMaxCamCount_name);
+    outAsync->invoke(iceC_Structure_StructureApp_getMaxCamCount_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        nullptr,
+        nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getCurrentCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>& outAsync, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getCurrentCamCount_name);
+    outAsync->invoke(iceC_Structure_StructureApp_getCurrentCamCount_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        nullptr,
+        nullptr);
+}
+
+void
+Structure::StructureAppPrx::_iceI_getRtmp(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>& outAsync, int iceP_index, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getRtmp_name);
+    outAsync->invoke(iceC_Structure_StructureApp_getRtmp_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_index);
+        },
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+Structure::StructureAppPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<StructureAppPrx>();
+}
+
+const ::std::string&
+Structure::StructureAppPrx::ice_staticId()
+{
+    return Structure::StructureApp::ice_staticId();
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_Structure_StructureApp_addCamera_name = "addCamera";
+
+const ::std::string iceC_Structure_StructureApp_removeCamera_name = "removeCamera";
+
+const ::std::string iceC_Structure_StructureApp_removeAll_name = "removeAll";
+
+const ::std::string iceC_Structure_StructureApp_getMaxCamCount_name = "getMaxCamCount";
+
+const ::std::string iceC_Structure_StructureApp_getCurrentCamCount_name = "getCurrentCamCount";
+
+const ::std::string iceC_Structure_StructureApp_getRtmp_name = "getRtmp";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::Structure::upCast(::IceProxy::Structure::StructureApp* p) { return p; }
+
+void
+::IceProxy::Structure::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::Structure::StructureApp;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_addCamera_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_addCamera_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_addCamera_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        ostr->write(iceP_jsonConfig);
+        result->endWriteParams();
+        result->invoke(iceC_Structure_StructureApp_addCamera_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_addCamera(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_addCamera_name);
+    ::Ice::Int ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_removeCamera_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_removeCamera_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_removeCamera_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        result->endWriteParams();
+        result->invoke(iceC_Structure_StructureApp_removeCamera_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_removeCamera(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_removeCamera_name);
+    ::Ice::Int ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_removeAll(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_removeAll_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_removeAll_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_removeAll_name, ::Ice::Normal, context);
+        result->writeEmptyParams();
+        result->invoke(iceC_Structure_StructureApp_removeAll_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_removeAll(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_removeAll_name);
+    ::Ice::Int ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getMaxCamCount(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getMaxCamCount_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getMaxCamCount_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_getMaxCamCount_name, ::Ice::Normal, context);
+        result->writeEmptyParams();
+        result->invoke(iceC_Structure_StructureApp_getMaxCamCount_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_getMaxCamCount(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getMaxCamCount_name);
+    ::Ice::Int ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getCurrentCamCount(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getCurrentCamCount_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getCurrentCamCount_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_getCurrentCamCount_name, ::Ice::Normal, context);
+        result->writeEmptyParams();
+        result->invoke(iceC_Structure_StructureApp_getCurrentCamCount_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::Ice::Int
+IceProxy::Structure::StructureApp::end_getCurrentCamCount(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getCurrentCamCount_name);
+    ::Ice::Int ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::Structure::StructureApp::_iceI_begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_Structure_StructureApp_getRtmp_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_Structure_StructureApp_getRtmp_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_Structure_StructureApp_getRtmp_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_index);
+        result->endWriteParams();
+        result->invoke(iceC_Structure_StructureApp_getRtmp_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::std::string
+IceProxy::Structure::StructureApp::end_getRtmp(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_Structure_StructureApp_getRtmp_name);
+    ::std::string ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::Structure::StructureApp::_newInstance() const
+{
+    return new StructureApp;
+}
+
+const ::std::string&
+IceProxy::Structure::StructureApp::ice_staticId()
+{
+    return ::Structure::StructureApp::ice_staticId();
+}
+
+Structure::StructureApp::~StructureApp()
+{
+}
+
+::Ice::Object* Structure::upCast(::Structure::StructureApp* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_Structure_StructureApp_ids[2] =
+{
+    "::Ice::Object",
+    "::Structure::StructureApp"
+};
+
+}
+
+bool
+Structure::StructureApp::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_Structure_StructureApp_ids, iceC_Structure_StructureApp_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+Structure::StructureApp::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_Structure_StructureApp_ids[0], &iceC_Structure_StructureApp_ids[2]);
+}
+
+const ::std::string&
+Structure::StructureApp::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+Structure::StructureApp::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::Structure::StructureApp";
+    return typeId;
+#else
+    return iceC_Structure_StructureApp_ids[1];
+#endif
+}
+
+bool
+Structure::StructureApp::_iceD_addCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_index;
+    ::std::string iceP_jsonConfig;
+    istr->read(iceP_index);
+    istr->read(iceP_jsonConfig);
+    inS.endReadParams();
+    ::Ice::Int ret = this->addCamera(iceP_index, iceP_jsonConfig, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeCamera(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_index;
+    istr->read(iceP_index);
+    inS.endReadParams();
+    ::Ice::Int ret = this->removeCamera(iceP_index, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_removeAll(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    inS.readEmptyParams();
+    ::Ice::Int ret = this->removeAll(current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getMaxCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    inS.readEmptyParams();
+    ::Ice::Int ret = this->getMaxCamCount(current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getCurrentCamCount(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    inS.readEmptyParams();
+    ::Ice::Int ret = this->getCurrentCamCount(current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+Structure::StructureApp::_iceD_getRtmp(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_index;
+    istr->read(iceP_index);
+    inS.endReadParams();
+    ::std::string ret = this->getRtmp(iceP_index, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_Structure_StructureApp_all[] =
+{
+    "addCamera",
+    "getCurrentCamCount",
+    "getMaxCamCount",
+    "getRtmp",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping",
+    "removeAll",
+    "removeCamera"
+};
+
+}
+
+bool
+Structure::StructureApp::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_Structure_StructureApp_all, iceC_Structure_StructureApp_all + 10, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_Structure_StructureApp_all)
+    {
+        case 0:
+        {
+            return _iceD_addCamera(in, current);
+        }
+        case 1:
+        {
+            return _iceD_getCurrentCamCount(in, current);
+        }
+        case 2:
+        {
+            return _iceD_getMaxCamCount(in, current);
+        }
+        case 3:
+        {
+            return _iceD_getRtmp(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 6:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 7:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        case 8:
+        {
+            return _iceD_removeAll(in, current);
+        }
+        case 9:
+        {
+            return _iceD_removeCamera(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+Structure::StructureApp::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::Structure::StructureApp, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+Structure::StructureApp::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::Structure::StructureApp, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+Structure::_icePatchObjectPtr(StructureAppPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::Structure::StructureAppPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::Structure::StructureApp::ice_staticId(), v);
+    }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.h b/QiaoJiaSystem/StructureApp/rpc/StructureApp.h
new file mode 100644
index 0000000..0ee68df
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.h
@@ -0,0 +1,1268 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `StructureApp.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __StructureApp_h__
+#define __StructureApp_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace Structure
+{
+
+class StructureApp;
+class StructureAppPrx;
+
+}
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = StructureAppPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual int addCamera(int, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual int removeCamera(int, const ::Ice::Current&) = 0;
+    bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual int removeAll(const ::Ice::Current&) = 0;
+    bool _iceD_removeAll(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual int getMaxCamCount(const ::Ice::Current&) = 0;
+    bool _iceD_getMaxCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual int getCurrentCamCount(const ::Ice::Current&) = 0;
+    bool _iceD_getCurrentCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::std::string getRtmp(int, const ::Ice::Current&) = 0;
+    bool _iceD_getRtmp(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace Structure
+{
+
+class StructureAppPrx : public virtual ::Ice::Proxy<StructureAppPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    int addCamera(int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto addCameraAsync(int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<int>>().get_future())
+    {
+        return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context);
+    }
+
+    ::std::function<void()>
+    addCameraAsync(int iceP_index, const ::std::string& iceP_jsonConfig,
+                   ::std::function<void(int)> response,
+                   ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                   ::std::function<void(bool)> sent = nullptr,
+                   const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_addCamera, iceP_index, iceP_jsonConfig, context);
+    }
+
+    void _iceI_addCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, int, const ::std::string&, const ::Ice::Context&);
+
+    int removeCamera(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto removeCameraAsync(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<int>>().get_future())
+    {
+        return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context);
+    }
+
+    ::std::function<void()>
+    removeCameraAsync(int iceP_index,
+                      ::std::function<void(int)> response,
+                      ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                      ::std::function<void(bool)> sent = nullptr,
+                      const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_removeCamera, iceP_index, context);
+    }
+
+    void _iceI_removeCamera(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, int, const ::Ice::Context&);
+
+    int removeAll(const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_removeAll, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto removeAllAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<int>>().get_future())
+    {
+        return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_removeAll, context);
+    }
+
+    ::std::function<void()>
+    removeAllAsync(::std::function<void(int)> response,
+                   ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                   ::std::function<void(bool)> sent = nullptr,
+                   const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_removeAll, context);
+    }
+
+    void _iceI_removeAll(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+    int getMaxCamCount(const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto getMaxCamCountAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<int>>().get_future())
+    {
+        return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context);
+    }
+
+    ::std::function<void()>
+    getMaxCamCountAsync(::std::function<void(int)> response,
+                        ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                        ::std::function<void(bool)> sent = nullptr,
+                        const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getMaxCamCount, context);
+    }
+
+    void _iceI_getMaxCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+    int getCurrentCamCount(const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<int>(true, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto getCurrentCamCountAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<int>>().get_future())
+    {
+        return _makePromiseOutgoing<int, P>(false, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context);
+    }
+
+    ::std::function<void()>
+    getCurrentCamCountAsync(::std::function<void(int)> response,
+                            ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                            ::std::function<void(bool)> sent = nullptr,
+                            const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<int>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getCurrentCamCount, context);
+    }
+
+    void _iceI_getCurrentCamCount(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<int>>&, const ::Ice::Context&);
+
+    ::std::string getRtmp(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::std::string>(true, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto getRtmpAsync(int iceP_index, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::std::string>>().get_future())
+    {
+        return _makePromiseOutgoing<::std::string, P>(false, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context);
+    }
+
+    ::std::function<void()>
+    getRtmpAsync(int iceP_index,
+                 ::std::function<void(::std::string)> response,
+                 ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                 ::std::function<void(bool)> sent = nullptr,
+                 const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::std::string>(response, ex, sent, this, &Structure::StructureAppPrx::_iceI_getRtmp, iceP_index, context);
+    }
+
+    void _iceI_getRtmp(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::std::string>>&, int, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    StructureAppPrx() = default;
+    friend ::std::shared_ptr<StructureAppPrx> IceInternal::createProxy<StructureAppPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace Structure
+{
+
+using StructureAppPtr = ::std::shared_ptr<StructureApp>;
+using StructureAppPrxPtr = ::std::shared_ptr<StructureAppPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace Structure
+{
+
+class StructureApp;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::Structure::StructureApp*);
+
+}
+
+}
+
+namespace Structure
+{
+
+class StructureApp;
+::Ice::Object* upCast(::Structure::StructureApp*);
+typedef ::IceInternal::Handle< ::Structure::StructureApp> StructureAppPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::Structure::StructureApp> StructureAppPrx;
+typedef StructureAppPrx StructureAppPrxPtr;
+void _icePatchObjectPtr(StructureAppPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace Structure
+{
+
+class Callback_StructureApp_addCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_addCamera_Base> Callback_StructureApp_addCameraPtr;
+
+class Callback_StructureApp_removeCamera_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_removeCamera_Base> Callback_StructureApp_removeCameraPtr;
+
+class Callback_StructureApp_removeAll_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_removeAll_Base> Callback_StructureApp_removeAllPtr;
+
+class Callback_StructureApp_getMaxCamCount_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getMaxCamCount_Base> Callback_StructureApp_getMaxCamCountPtr;
+
+class Callback_StructureApp_getCurrentCamCount_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getCurrentCamCount_Base> Callback_StructureApp_getCurrentCamCountPtr;
+
+class Callback_StructureApp_getRtmp_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_StructureApp_getRtmp_Base> Callback_StructureApp_getRtmpPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Proxy<StructureApp, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::Ice::Int addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_addCamera(_iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Structure::Callback_StructureApp_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_addCamera(::Ice::Int iceP_index, const ::std::string& iceP_jsonConfig, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_addCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_addCamera(iceP_index, iceP_jsonConfig, context, del, cookie);
+    }
+
+    ::Ice::Int end_addCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_addCamera(::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::Ice::Int removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_removeCamera(_iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Structure::Callback_StructureApp_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeCamera(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_removeCameraPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeCamera(iceP_index, context, del, cookie);
+    }
+
+    ::Ice::Int end_removeCamera(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_removeCamera(::Ice::Int, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::Ice::Int removeAll(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_removeAll(_iceI_begin_removeAll(context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_removeAll(context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeAll(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeAll(context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeAll(const ::Structure::Callback_StructureApp_removeAllPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeAll(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_removeAll(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_removeAllPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_removeAll(context, del, cookie);
+    }
+
+    ::Ice::Int end_removeAll(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_removeAll(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::Ice::Int getMaxCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_getMaxCamCount(_iceI_begin_getMaxCamCount(context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_getMaxCamCount(context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getMaxCamCount(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getMaxCamCount(context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Structure::Callback_StructureApp_getMaxCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getMaxCamCount(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getMaxCamCount(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getMaxCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getMaxCamCount(context, del, cookie);
+    }
+
+    ::Ice::Int end_getMaxCamCount(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_getMaxCamCount(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::Ice::Int getCurrentCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_getCurrentCamCount(_iceI_begin_getCurrentCamCount(context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_getCurrentCamCount(context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCurrentCamCount(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCurrentCamCount(context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Structure::Callback_StructureApp_getCurrentCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCurrentCamCount(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCurrentCamCount(const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getCurrentCamCountPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCurrentCamCount(context, del, cookie);
+    }
+
+    ::Ice::Int end_getCurrentCamCount(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_getCurrentCamCount(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::std::string getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_getRtmp(_iceI_begin_getRtmp(iceP_index, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_getRtmp(iceP_index, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getRtmp(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getRtmp(iceP_index, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Structure::Callback_StructureApp_getRtmpPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getRtmp(iceP_index, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getRtmp(::Ice::Int iceP_index, const ::Ice::Context& context, const ::Structure::Callback_StructureApp_getRtmpPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getRtmp(iceP_index, context, del, cookie);
+    }
+
+    ::std::string end_getRtmp(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_getRtmp(::Ice::Int, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace Structure
+{
+
+class StructureApp : public virtual ::Ice::Object
+{
+public:
+
+    typedef StructureAppPrx ProxyType;
+    typedef StructureAppPtr PointerType;
+
+    virtual ~StructureApp();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::Ice::Int addCamera(::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_addCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::Ice::Int removeCamera(::Ice::Int, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_removeCamera(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::Ice::Int removeAll(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_removeAll(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::Ice::Int getMaxCamCount(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_getMaxCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::Ice::Int getCurrentCamCount(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_getCurrentCamCount(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::std::string getRtmp(::Ice::Int, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_getRtmp(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const StructureApp& lhs, const StructureApp& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const StructureApp& lhs, const StructureApp& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+}
+
+namespace Structure
+{
+
+template<class T>
+class CallbackNC_StructureApp_addCamera : public Callback_StructureApp_addCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(::Ice::Int);
+
+    CallbackNC_StructureApp_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_addCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_addCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_addCamera : public Callback_StructureApp_addCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(::Ice::Int, const CT&);
+
+    Callback_StructureApp_addCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_addCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_addCameraPtr
+newCallback_StructureApp_addCamera(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_addCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_removeCamera : public Callback_StructureApp_removeCamera_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(::Ice::Int);
+
+    CallbackNC_StructureApp_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_removeCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_removeCamera<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_removeCamera : public Callback_StructureApp_removeCamera_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(::Ice::Int, const CT&);
+
+    Callback_StructureApp_removeCamera(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_removeCamera(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_removeCameraPtr
+newCallback_StructureApp_removeCamera(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_removeCamera<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_removeAll : public Callback_StructureApp_removeAll_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(::Ice::Int);
+
+    CallbackNC_StructureApp_removeAll(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_removeAll(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_removeAll<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_removeAll<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_removeAll : public Callback_StructureApp_removeAll_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(::Ice::Int, const CT&);
+
+    Callback_StructureApp_removeAll(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_removeAll(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_removeAll<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_removeAllPtr
+newCallback_StructureApp_removeAll(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_removeAll<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getMaxCamCount : public Callback_StructureApp_getMaxCamCount_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(::Ice::Int);
+
+    CallbackNC_StructureApp_getMaxCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_getMaxCamCount(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getMaxCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getMaxCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getMaxCamCount : public Callback_StructureApp_getMaxCamCount_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(::Ice::Int, const CT&);
+
+    Callback_StructureApp_getMaxCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_getMaxCamCount(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getMaxCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getMaxCamCountPtr
+newCallback_StructureApp_getMaxCamCount(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getMaxCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getCurrentCamCount : public Callback_StructureApp_getCurrentCamCount_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(::Ice::Int);
+
+    CallbackNC_StructureApp_getCurrentCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_getCurrentCamCount(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getCurrentCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(T* instance, void (T::*cb)(::Ice::Int), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getCurrentCamCount<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getCurrentCamCount : public Callback_StructureApp_getCurrentCamCount_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(::Ice::Int, const CT&);
+
+    Callback_StructureApp_getCurrentCamCount(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::Ice::Int ret;
+        try
+        {
+            ret = proxy->end_getCurrentCamCount(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(const IceUtil::Handle<T>& instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getCurrentCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getCurrentCamCountPtr
+newCallback_StructureApp_getCurrentCamCount(T* instance, void (T::*cb)(::Ice::Int, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getCurrentCamCount<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_StructureApp_getRtmp : public Callback_StructureApp_getRtmp_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::std::string&);
+
+    CallbackNC_StructureApp_getRtmp(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_getRtmp(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getRtmp<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(T* instance, void (T::*cb)(const ::std::string&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_StructureApp_getRtmp<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_StructureApp_getRtmp : public Callback_StructureApp_getRtmp_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::std::string&, const CT&);
+
+    Callback_StructureApp_getRtmp(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::Structure::StructureAppPrx proxy = ::Structure::StructureAppPrx::uncheckedCast(result->getProxy());
+        ::std::string ret;
+        try
+        {
+            ret = proxy->end_getRtmp(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getRtmp<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_StructureApp_getRtmpPtr
+newCallback_StructureApp_getRtmp(T* instance, void (T::*cb)(const ::std::string&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_StructureApp_getRtmp<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice b/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice
new file mode 100644
index 0000000..30f62cc
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp.ice
@@ -0,0 +1,17 @@
+module Structure
+{
+	interface StructureApp
+	{
+		int addCamera(int index, string jsonConfig);
+		
+		int removeCamera(int index);
+		
+        int removeAll();
+		
+		int getMaxCamCount();
+		
+		int getCurrentCamCount();
+		
+		string getRtmp(int index);
+	}
+}
diff --git a/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py b/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py
new file mode 100644
index 0000000..e49a565
--- /dev/null
+++ b/QiaoJiaSystem/StructureApp/rpc/StructureApp_ice.py
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+# **********************************************************************
+#
+# Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+#
+# Ice version 3.7.1
+#
+# <auto-generated>
+#
+# Generated from file `StructureApp.ice'
+#
+# Warning: do not edit this file.
+#
+# </auto-generated>
+#
+
+from sys import version_info as _version_info_
+import Ice, IcePy
+
+# Start of module Structure
+_M_Structure = Ice.openModule('Structure')
+__name__ = 'Structure'
+
+_M_Structure._t_StructureApp = IcePy.defineValue('::Structure::StructureApp', Ice.Value, -1, (), False, True, None, ())
+
+if 'StructureAppPrx' not in _M_Structure.__dict__:
+    _M_Structure.StructureAppPrx = Ice.createTempClass()
+    class StructureAppPrx(Ice.ObjectPrx):
+
+        def addCamera(self, index, jsonConfig, context=None):
+            return _M_Structure.StructureApp._op_addCamera.invoke(self, ((index, jsonConfig), context))
+
+        def addCameraAsync(self, index, jsonConfig, context=None):
+            return _M_Structure.StructureApp._op_addCamera.invokeAsync(self, ((index, jsonConfig), context))
+
+        def begin_addCamera(self, index, jsonConfig, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_addCamera.begin(self, ((index, jsonConfig), _response, _ex, _sent, context))
+
+        def end_addCamera(self, _r):
+            return _M_Structure.StructureApp._op_addCamera.end(self, _r)
+
+        def removeCamera(self, index, context=None):
+            return _M_Structure.StructureApp._op_removeCamera.invoke(self, ((index, ), context))
+
+        def removeCameraAsync(self, index, context=None):
+            return _M_Structure.StructureApp._op_removeCamera.invokeAsync(self, ((index, ), context))
+
+        def begin_removeCamera(self, index, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_removeCamera.begin(self, ((index, ), _response, _ex, _sent, context))
+
+        def end_removeCamera(self, _r):
+            return _M_Structure.StructureApp._op_removeCamera.end(self, _r)
+
+        def removeAll(self, context=None):
+            return _M_Structure.StructureApp._op_removeAll.invoke(self, ((), context))
+
+        def removeAllAsync(self, context=None):
+            return _M_Structure.StructureApp._op_removeAll.invokeAsync(self, ((), context))
+
+        def begin_removeAll(self, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_removeAll.begin(self, ((), _response, _ex, _sent, context))
+
+        def end_removeAll(self, _r):
+            return _M_Structure.StructureApp._op_removeAll.end(self, _r)
+
+        def getMaxCamCount(self, context=None):
+            return _M_Structure.StructureApp._op_getMaxCamCount.invoke(self, ((), context))
+
+        def getMaxCamCountAsync(self, context=None):
+            return _M_Structure.StructureApp._op_getMaxCamCount.invokeAsync(self, ((), context))
+
+        def begin_getMaxCamCount(self, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_getMaxCamCount.begin(self, ((), _response, _ex, _sent, context))
+
+        def end_getMaxCamCount(self, _r):
+            return _M_Structure.StructureApp._op_getMaxCamCount.end(self, _r)
+
+        def getCurrentCamCount(self, context=None):
+            return _M_Structure.StructureApp._op_getCurrentCamCount.invoke(self, ((), context))
+
+        def getCurrentCamCountAsync(self, context=None):
+            return _M_Structure.StructureApp._op_getCurrentCamCount.invokeAsync(self, ((), context))
+
+        def begin_getCurrentCamCount(self, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_getCurrentCamCount.begin(self, ((), _response, _ex, _sent, context))
+
+        def end_getCurrentCamCount(self, _r):
+            return _M_Structure.StructureApp._op_getCurrentCamCount.end(self, _r)
+
+        def getRtmp(self, index, context=None):
+            return _M_Structure.StructureApp._op_getRtmp.invoke(self, ((index, ), context))
+
+        def getRtmpAsync(self, index, context=None):
+            return _M_Structure.StructureApp._op_getRtmp.invokeAsync(self, ((index, ), context))
+
+        def begin_getRtmp(self, index, _response=None, _ex=None, _sent=None, context=None):
+            return _M_Structure.StructureApp._op_getRtmp.begin(self, ((index, ), _response, _ex, _sent, context))
+
+        def end_getRtmp(self, _r):
+            return _M_Structure.StructureApp._op_getRtmp.end(self, _r)
+
+        @staticmethod
+        def checkedCast(proxy, facetOrContext=None, context=None):
+            return _M_Structure.StructureAppPrx.ice_checkedCast(proxy, '::Structure::StructureApp', facetOrContext, context)
+
+        @staticmethod
+        def uncheckedCast(proxy, facet=None):
+            return _M_Structure.StructureAppPrx.ice_uncheckedCast(proxy, facet)
+
+        @staticmethod
+        def ice_staticId():
+            return '::Structure::StructureApp'
+    _M_Structure._t_StructureAppPrx = IcePy.defineProxy('::Structure::StructureApp', StructureAppPrx)
+
+    _M_Structure.StructureAppPrx = StructureAppPrx
+    del StructureAppPrx
+
+    _M_Structure.StructureApp = Ice.createTempClass()
+    class StructureApp(Ice.Object):
+
+        def ice_ids(self, current=None):
+            return ('::Ice::Object', '::Structure::StructureApp')
+
+        def ice_id(self, current=None):
+            return '::Structure::StructureApp'
+
+        @staticmethod
+        def ice_staticId():
+            return '::Structure::StructureApp'
+
+        def addCamera(self, index, jsonConfig, current=None):
+            raise NotImplementedError("servant method 'addCamera' not implemented")
+
+        def removeCamera(self, index, current=None):
+            raise NotImplementedError("servant method 'removeCamera' not implemented")
+
+        def removeAll(self, current=None):
+            raise NotImplementedError("servant method 'removeAll' not implemented")
+
+        def getMaxCamCount(self, current=None):
+            raise NotImplementedError("servant method 'getMaxCamCount' not implemented")
+
+        def getCurrentCamCount(self, current=None):
+            raise NotImplementedError("servant method 'getCurrentCamCount' not implemented")
+
+        def getRtmp(self, index, current=None):
+            raise NotImplementedError("servant method 'getRtmp' not implemented")
+
+        def __str__(self):
+            return IcePy.stringify(self, _M_Structure._t_StructureAppDisp)
+
+        __repr__ = __str__
+
+    _M_Structure._t_StructureAppDisp = IcePy.defineClass('::Structure::StructureApp', StructureApp, (), None, ())
+    StructureApp._ice_type = _M_Structure._t_StructureAppDisp
+
+    StructureApp._op_addCamera = IcePy.Operation('addCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0), ((), IcePy._t_string, False, 0)), (), ((), IcePy._t_int, False, 0), ())
+    StructureApp._op_removeCamera = IcePy.Operation('removeCamera', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0),), (), ((), IcePy._t_int, False, 0), ())
+    StructureApp._op_removeAll = IcePy.Operation('removeAll', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+    StructureApp._op_getMaxCamCount = IcePy.Operation('getMaxCamCount', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+    StructureApp._op_getCurrentCamCount = IcePy.Operation('getCurrentCamCount', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (), (), ((), IcePy._t_int, False, 0), ())
+    StructureApp._op_getRtmp = IcePy.Operation('getRtmp', Ice.OperationMode.Normal, Ice.OperationMode.Normal, False, None, (), (((), IcePy._t_int, False, 0),), (), ((), IcePy._t_string, False, 0), ())
+
+    _M_Structure.StructureApp = StructureApp
+    del StructureApp
+
+# End of module Structure
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp
new file mode 100644
index 0000000..593b0ce
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.cpp
@@ -0,0 +1,5 @@
+//
+// Created by basic on 18-8-22.
+//
+
+#include "BaiscSDKAnalysVideo.h"
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h
new file mode 100644
index 0000000..a742fb6
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h
@@ -0,0 +1,158 @@
+//
+// Created by basic on 18-8-22.
+//
+
+#ifndef VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
+#define VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
+
+#include "myThread.h"
+#include <vector>
+#include <basic/io/io.h>
+#include <basic/debug/Debug.h>
+#include <basic/util/file/FileUtil.h>
+#include "../StructureApp/AppPipeController.h"
+#include "dispathdatatype.hpp"
+
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/http_server/HttpSrvRetRecieve.hpp>
+#include <basic/util/net_config/net_config.h>
+
+#define SETSCORE(VEC, POS, IDENT) appPref.setFloatData(IDENT, POS >= VEC.size() ? 80 : VEC[POS]);
+
+class BaiscSDKAnalysVideo : public mythread<getsdkHdlManage> {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<finishSdkHdlManage> &, int)>;
+public:
+    BaiscSDKAnalysVideo(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {
+        resetFdfs();
+        {
+            std::thread httpServer([&]() {
+                HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 9090, 1);
+                httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&BaiscSDKAnalysVideo::resetFdfs, this,
+                                                                            std::placeholders::_1,
+                                                                            std::placeholders::_2,
+                                                                            std::placeholders::_3));
+                httpSrvRetRecieve.start();
+                httpSrvRetRecieve.waitForShutDown();
+            });
+            httpServer.detach();
+        }
+    }
+
+    ~BaiscSDKAnalysVideo() {
+    }
+
+    std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "") {
+
+        std::thread reset([&]() {
+            fdfsClient.rwLock.rdlock();
+            if (fdfsClient.fastFds != nullptr) {
+                delete fdfsClient.fastFds;
+            }
+            fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+            fdfsClient.rwLock.unlock();
+        });
+        reset.detach();
+
+        return "";
+    }
+
+private:
+    virtual void doFunc(std::shared_ptr<getsdkHdlManage> spPacket) {
+
+//        DBG("do func sdk");
+        Json::Value json;
+
+        //split sdks enable
+        //#todo other sdk
+        vector<int> sdkVec = chnString2Vec(spPacket->en_sdk);
+        //璁剧疆妫�娴嬪緱鍒�
+//            std::string s_d = str_det_thr;
+//            std::string s_c = str_cmp_thr;
+        vector<int> sdkDetCoVec = chnString2Vec(spPacket->str_det_thr);
+        vector<int> sdkComCoVec = chnString2Vec(spPacket->str_cmp_thr);
+
+        int t_size = sdkVec.size();
+        std::string str_pre(spPacket->strDevID);
+        str_pre.append(to_string(spPacket->nChannelID));
+        for (int i = 0; i < t_size; i++) {
+            switch (sdkVec[i]) {
+                case 1: {
+                    json["face.enable"] = "1";
+                    DBG("" << str_pre);
+                    DBG(" TESTCODE setValue" << str_pre << "  " << sdkDetCoVec[i] << "  " << sdkComCoVec[i]);
+                    SETSCORE(sdkDetCoVec, i, str_pre + "face.det");
+                    SETSCORE(sdkComCoVec, i, str_pre + "face.cmp");
+                    break;
+                }
+                case 2: {
+                    DBG("XX.enable    " << "1");
+                    DBG(" TESTCODE setValue" << str_pre << "  " << sdkDetCoVec[i] << "  " << sdkComCoVec[i]);
+                    SETSCORE(sdkDetCoVec, i, str_pre + "XX.det");
+                    SETSCORE(sdkComCoVec, i, str_pre + "XX.cmp");
+                    break;
+                }
+                case 3: {
+                    json["yolo.enable"] = "1";
+                    DBG(" TESTCODE setValue" << str_pre << "  " << sdkDetCoVec[i] << "  " << sdkComCoVec[i]);
+                    SETSCORE(sdkDetCoVec, i, str_pre + "yolo.det");
+                    SETSCORE(sdkComCoVec, i, str_pre + "yolo.cmp");
+                    break;
+                }
+            }
+        }
+        json["addr"] = spPacket->str_addr;
+        INFO("cam add is " << spPacket->str_addr);
+
+        //#todo get address
+
+        AppPipeController _AppPipeController(spPacket->src_path, json);
+        _AppPipeController.setfdfsClient(&fdfsClient);
+        //#todo from path get file list
+        file_filter_type filter = [](const char *dirName, const char *dirent) {
+            return (strstr(dirent, ".mp4") != nullptr);// add format
+        };
+        std::vector<std::string> vec = for_each_file(spPacket->src_path, filter);
+        auto size = vec.size();
+        int pos = spPacket->pos;
+        if (size == 0 || spPacket->total == 0) {
+            if (m_task_function != nullptr) {
+                auto fp_task(
+                    std::make_shared<finishSdkHdlManage>(
+                        finishSdkHdlManage{spPacket->src_path, 0}));
+                m_task_function(fp_task, 0);
+                return;
+            } else {
+                ERR("m_task_function == nullptr");
+                return;
+            }
+        }
+        for (; pos < size;) {
+            //#todo
+            _AppPipeController.resetVideoCapturePath(vec[pos]);
+            _AppPipeController.start();
+            while (_AppPipeController.getRunning()) {
+                usleep(40000);
+            }
+            _AppPipeController.stop();
+            _AppPipeController.wait();
+            if (m_task_function != nullptr) {
+                auto fp_task(
+                    std::make_shared<finishSdkHdlManage>(
+                        finishSdkHdlManage{spPacket->src_path, pos}));
+                m_task_function(fp_task, size - pos - 1);
+            } else {
+                ERR("m_task_function == nullptr");
+                return;
+            }
+            pos++;
+        }
+        _AppPipeController;
+    }
+
+private:
+    TASK_FUNCTION m_task_function;
+    FastFdsWithLock fdfsClient;
+};
+
+
+#endif //VIDEOANALYSFROMHC_BAISCSDKANALYSVIDEO_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt
new file mode 100644
index 0000000..9654ae7
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt
@@ -0,0 +1,228 @@
+#cmake_minimum_required(VERSION 2.8)
+
+#project(VideoAnalysFromHC)
+#add_executable(${PROJECT_NAME} "main.cpp")
+cmake_minimum_required(VERSION 3.5)
+project(VideoAnalysFromHC)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_compile_options(-fPIC)
+add_definitions(-DGLOG)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive)
+SET(SOURCES
+
+    #
+    ../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+
+    #浠诲姟璋冨害妯″潡    
+    ../VideoServer/QiaoJia/DB/LDBTool.cpp
+    ../VideoServer/QiaoJia/dispatchTool/loadManage.cpp
+    ../VideoServer/QiaoJia/dispatchTool/cutManage.cpp
+    ../VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
+    ../VideoServer/QiaoJia/DB/LDBTool.h
+    ../VideoServer/QiaoJia/dispatchTool/loadManage.h
+    ../VideoServer/QiaoJia/dispatchTool/cutManage.h
+    ../VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
+
+
+    #蹇�熻棰戠粨鏋勫寲
+    ../RapidStructureApp/AppController.cpp
+    ../RapidStructureApp/AppController.h
+    ../RapidStructureApp/RapidAppPipeController.cpp
+    ../RapidStructureApp/RapidAppPipeController.h
+    ../RapidStructureApp/TriggerElement.cpp
+    ../RapidStructureApp/TriggerElement.h
+    ../RapidStructureApp/VideoChangeScore.cpp
+    ../RapidStructureApp/VideoChangeScore.h
+    ../RapidStructureApp/VideoMoveCaptureElement.cpp
+    ../RapidStructureApp/VideoMoveCaptureElement.h
+
+
+    #sdk鍒嗘瀽妯″潡
+    #    ../StructureApp/rpc/StructureApp.cpp
+    #    ../StructureApp/StructureAppI.cpp
+    ../StructureApp/AppPipeController.cpp
+    ../StructureApp/AppPipeController.h
+    ../StructureApp/TrackingTrigger.cpp
+    ../StructureApp/YoloRpcElement.cpp
+    ../StructureApp/FaceRpcElement.cpp
+    ../StructureApp/FaceExtractElement.cpp
+    ../StructureApp/ImageDrawElement.cpp
+    ../StructureApp/RecordVideoElement.cpp
+    ../StructureApp/JudgmentRetrogradeTool.cpp
+    ../StructureApp/PerimeterElement.cpp
+
+    ../StructureApp/NewRecordVideoElement.cpp
+
+    ../YoloServer/rpc/YoloServer.cpp
+    ../FaceDetectServer/rpc/FaceServer.cpp
+    ../FaceSearchServer/rpc/FaceSearchServer.cpp
+    ../RecordVideo/rpc/RecordVideo.cpp
+
+
+    #閫氱敤妯″潡
+    ../../BasicPlatForm/basic/io/io.cpp
+    ../../BasicPlatForm/basic/io/io.h
+    ../../BasicPlatForm/basic/pipe/TimerElement.cpp
+    ../../BasicPlatForm/basic/pipe/PipeElement.cpp
+    ../../BasicPlatForm/basic/pipe/PipeElement.h
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.cpp
+    ../../BasicPlatForm/basic/pipe_element/ffmpeg/ffmpegRecoder/FileRecorder.h
+    #todo fix bug
+    #    ../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+    ../../BasicPlatForm/basic/util/BASE64/Base64.cpp
+    ../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+    ../../BasicPlatForm/basic/db/ES/es/ManagerEsDB.cpp
+
+    #绾跨▼姹�
+    myThread.cpp
+    myThread.h
+    mySem.hpp
+
+    #sdk鍒嗘瀽浠诲姟姹�
+    BaiscSDKAnalysVideo.cpp
+    BaiscSDKAnalysVideo.h
+
+    #蹇�熻棰戠粨鏋勫寲浠诲姟姹�
+    HcAnalysVideo.cpp
+    HcAnalysVideo.h
+
+    #娴峰悍纭洏褰曞儚鏈轰笅杞戒换鍔℃睜
+    HcDowloadElement.cpp
+    HcDowloadElement.h
+    HcRecord.cpp
+    HcRecord.h
+
+    #瀹炴椂瑙嗛娴佸垎鏋�
+    RtspAnalysElement.cpp
+
+
+
+    ../../BasicPlatForm/basic/util/net_config/net_config.cpp
+
+    main.cpp
+    DBManageClass.cpp DBManageClass.h
+    )
+SET(LIBS
+    glog
+    #Ice
+    Ice
+    crypto
+
+    #娴峰悍
+    AudioRender
+    HCCore
+    hcnetsdk
+    hpr
+    PlayCtrl
+    SuperRender
+    analyzedata
+    HCAlarm
+    HCCoreDevCfg
+    HCDisplay
+    HCGeneralCfgMgr
+    HCIndustry
+    HCPlayBack
+    HCPreview
+    HCVoiceTalk
+    iconv2
+    StreamTransClient
+    SystemTransform
+
+    #ffmpeg
+    avformat
+    avcodec
+    swresample
+    swscale
+    avutil
+    bz2 dl z
+
+    #QT5
+    Qt5Core
+    Qt5Sql
+    Qt5Gui
+
+    #fastfds
+    fastcommon
+    fdfsclient
+
+    boost_system
+    boost_thread
+    boost_filesystem
+    #
+    cuda jsoncpp
+    #    cudart
+    #    cublas
+    opencv_world
+    jsoncpp
+    curl
+    uuid
+    pthread
+    )
+include_directories(
+
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+    ./
+    ../VideoServer
+    ../RapidStructureApp
+    ../VideoServer/QiaoJia/DB
+    ../VideoServer/QiaoJia/dispatchTool
+
+    ../RecordVideo/rpc
+    ../StructureApp/rpc
+    ../YoloServer/rpc
+    ../FaceDetectServer/rpc
+    ../FaceSearchServer/rpc
+
+    ../../BasicPlatForm/
+
+    ../../BasicPlatForm/basic/pipe/
+    ../../BasicPlatForm/basic/util/fastdfs
+    ../../BasicPlatForm/basic/util/curl/
+    #webServer
+    ../../BasicPlatForm/basic/http_server/
+    ../../BasicPlatForm/basic/util/net_config/
+
+    ../../BasicPlatForm/libs/FastDFS/include/fastdfs
+    ../../BasicPlatForm/libs/FastDFS/include/fastcommon
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/crul/include
+    ../../BasicPlatForm/libs/libuuid/include
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/incCn
+    ../../BasicPlatForm/libs/libboost/include
+
+
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+)
+
+link_directories(
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/openssl/lib
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/crul/lib
+    ../../BasicPlatForm/libs/libuuid/lib
+    ../../BasicPlatForm/libs/FastDFS/lib
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/
+    ../../BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom/
+    ../../BasicPlatForm/libs/libboost/lib
+)
+
+add_executable(${PROJECT_NAME}
+    ${SOURCES}
+    )
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp
new file mode 100644
index 0000000..5313085
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.cpp
@@ -0,0 +1,192 @@
+//
+// Created by basic on 18-8-23.
+//
+
+#include <basic/util/app/AppConfig.h>
+#include "DBManageClass.h"
+#include <iostream>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+DBManageClass::DBManageClass(LDBTool *_dbTool) :
+    m_fileManage(_dbTool), m_downloadFileRet(true), m_cutManage(_dbTool), m_cutVideoRet(true),
+    m_sdkHdlManage(_dbTool), m_sdkHdlRet(true),
+    //#todo
+    m_HcDowloadElement(std::bind(&DBManageClass::downFileFuncFinish, this, std::placeholders::_1)),
+    m_HcAnalysVideo(std::bind(&DBManageClass::cutVideoFuncFinish, this, std::placeholders::_1)),
+    m_BasicSDKAnalysVideo(
+        std::bind(&DBManageClass::sdkhlVideoFuncFinish, this, std::placeholders::_1, std::placeholders::_2)) {}
+
+DBManageClass::~DBManageClass() {
+    stop();
+}
+
+void DBManageClass::addDevice(const std::string strDevID, const char *ip, const unsigned short port,
+                              const char *usrname, const char *passwd) {
+    m_HcDowloadElement.addDevice(strDevID, ip, port, usrname, passwd);
+}
+
+void DBManageClass::start(int fileManagePSize, int cutManagePSize, int sdkHdlManagePSize) {
+    //#todo init threads num
+    init(fileManagePSize, cutManagePSize, sdkHdlManagePSize);
+}
+
+void DBManageClass::testSdk() {
+    m_BasicSDKAnalysVideo.beginThreads(1);
+    std::thread tpf_sdkHlVideoFile(sdkHlVideo, this);
+    tpf_sdkHlVideoFile.detach();
+}
+
+void DBManageClass::stop() {
+    //Ret =false
+    m_downloadFileRet = false;
+    m_cutVideoRet = false;
+    m_sdkHdlRet = false;
+}
+
+void DBManageClass::downFileFuncFinish(std::shared_ptr<ChannelLoadFileManage> &spPacket) {
+    m_fileManage.finishTask(spPacket.get());
+}
+
+void DBManageClass::cutVideoFuncFinish(std::shared_ptr<finishCutFileManage> &spPacket) {
+    if (m_cutManage.finishTask(spPacket.get())) {
+        //#todo delete src_file
+        string cmd = "rm -rf ";
+        cmd.append(spPacket->src_path).append(" & ");
+        system(cmd.c_str());
+        //#todo have bug
+//        IOOperate::RemoveDir(spPacket->src_path.c_str());
+    } else {
+        ERR("m_cutManage.finishTask err");
+    }
+}
+
+void DBManageClass::sdkhlVideoFuncFinish(std::shared_ptr<finishSdkHdlManage> &spPacket, int listSize) {
+    bool ret = false;
+    if (listSize == 0) {
+        ret = m_sdkHdlManage.finishTask(spPacket.get());
+    } else {
+        ret = m_sdkHdlManage.updateSdkHdlPos(spPacket.get());
+    }
+    if (!ret) ERR("sdkhlVideoFuncFinish err ; listSize is " << listSize);
+}
+
+
+void DBManageClass::init(int fileManagePSize, int cutManagePSize, int sdkHdlManagePSize) {
+    m_fileManagePSize = fileManagePSize;
+    m_cutManagePSize = cutManagePSize;
+    m_sdkHdlManagePSize = sdkHdlManagePSize;
+
+    m_HcDowloadElement.beginThreads(m_fileManagePSize);
+    m_HcAnalysVideo.beginThreads(m_cutManagePSize);
+    m_BasicSDKAnalysVideo.beginThreads(m_sdkHdlManagePSize);
+    //Thread(start)
+    std::thread tpf_downloadFile(downloadFile, this);
+    std::thread tpf_cutVideoFile(cutVideoFile, this);
+    std::thread tpf_sdkHlVideoFile(sdkHlVideo, this);
+    tpf_downloadFile.detach();
+    tpf_cutVideoFile.detach();
+    tpf_sdkHlVideoFile.detach();
+}
+
+std::string getCmdResult(const std::string &strCmd) {
+    char buf[10240] = {0};
+    FILE *pf = NULL;
+
+    if ((pf = popen(strCmd.c_str(), "r")) == NULL) {
+        return "";
+    }
+
+    std::string strResult;
+    while (fgets(buf, sizeof buf, pf)) {
+        strResult += buf;
+    }
+
+    pclose(pf);
+
+    unsigned int iSize = strResult.size();
+    if (iSize > 0 && strResult[iSize - 1] == '\n')  // linux
+    {
+        strResult = strResult.substr(0, iSize - 1);
+    }
+
+    return strResult;
+}
+
+void DBManageClass::downloadFile(DBManageClass *dbManageClass) {
+    while (dbManageClass->m_downloadFileRet) {
+        //#todo sdkhl size
+        bool t_ret = true;
+        std::string loadPath = appConfig.getStringProperty("loadPath");
+        std::string loadMaxSize_auto = appConfig.getStringProperty("TotalLoadSize");
+        long int loadMaxSize = atol(loadMaxSize_auto.c_str());
+        char cmd[100] = {0};
+        sprintf(cmd, "du -s %s | awk '{print $1}'", loadPath.c_str());
+        std::string str_cmd(cmd);
+        std::string cmd_result = getCmdResult(str_cmd);
+        int currentSize = atol(cmd_result.c_str());
+
+        //瓒呭嚭缁欏畾涓嬭浇鐨勫瓨鍌ㄧ┖闂寸殑80%锛宻leep 10鍒嗛挓
+        if (currentSize >= (loadMaxSize * 1024 * 1024 * 80 / 100)) {
+            INFO(" 瓒呭嚭缁欏畾涓嬭浇鐨勫瓨鍌ㄧ┖闂寸殑80%锛宻leep 10鍒嗛挓 ");
+            sleep(10 * 60);
+        }
+
+        if (dbManageClass->m_HcDowloadElement.get_taskListSize() < dbManageClass->m_fileManagePSize) {
+            auto sp_task(std::make_shared<ChannelLoadFileManage>(dbManageClass->m_fileManage.getTask()));
+            if (sp_task->strDevID.size() <= 0) {
+                sleep(WAITTASKTIME);
+            } else {
+                INFO(" channel " << sp_task->nChannelID
+                                 << "   Month " << sp_task->startTime.Month
+                                 << "   Day " << sp_task->startTime.Day
+                                 << "   Hour " << sp_task->startTime.Hour
+                                 << "   Minute " << sp_task->startTime.Minute
+                                 << "   Second " << sp_task->startTime.Second
+                );
+                dbManageClass->m_HcDowloadElement.put_task(sp_task);
+            }
+        } else {
+            sleep(WAITTASKPOOLTIME);
+        }
+    }
+}
+
+void DBManageClass::cutVideoFile(DBManageClass *dbManageClass) {
+    while (dbManageClass->m_cutVideoRet) {
+        //#todo sdkhl size
+        if (dbManageClass->m_HcAnalysVideo.get_taskListSize() < dbManageClass->m_cutManagePSize) {
+            auto sp_task(std::make_shared<getCutFileManage>(dbManageClass->m_cutManage.getTask()));
+            if (sp_task->src_path.size() <= 0) {
+                sleep(WAITTASKTIME);
+            } else {
+                dbManageClass->m_HcAnalysVideo.put_task(sp_task);
+            }
+        } else {
+            sleep(WAITTASKPOOLTIME);
+        }
+    }
+}
+
+void DBManageClass::sdkHlVideo(DBManageClass *dbManageClass) {
+    while (dbManageClass->m_sdkHdlRet) {
+        //#todo sdkhl size
+//        DBG("???????");
+        if (dbManageClass->m_BasicSDKAnalysVideo.get_taskListSize() <= dbManageClass->m_sdkHdlManagePSize) {
+            auto sp_task(std::make_shared<getsdkHdlManage>(dbManageClass->m_sdkHdlManage.getTask()));
+            if (sp_task->src_path.size() <= 0) {
+//                DBG("??????? size <0");
+                sleep(WAITTASKTIME);
+            } else {
+                DBG("sdk work " << sp_task->src_path);
+                dbManageClass->m_BasicSDKAnalysVideo.put_task(sp_task);
+            }
+        } else {
+//            DBG("??????? get_taskListSize < m_sdkHdlManagePSize");
+            sleep(WAITTASKPOOLTIME);
+        }
+
+    }
+}
+
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h
new file mode 100644
index 0000000..0e606f8
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/DBManageClass.h
@@ -0,0 +1,73 @@
+//
+// Created by basic on 18-8-23.
+//
+
+#ifndef VIDEOANALYSFROMHC_DBMANAGECLASS_H
+#define VIDEOANALYSFROMHC_DBMANAGECLASS_H
+
+#define WAITTASKTIME 10
+
+#define WAITTASKPOOLTIME 10
+
+#include <basic/io/io.h>
+
+#include "HcDowloadElement.h"
+#include "HcAnalysVideo.h"
+#include "BaiscSDKAnalysVideo.h"
+
+#include <VideoServer/QiaoJia/dispatchTool/loadManage.h>
+#include <VideoServer/QiaoJia/dispatchTool/cutManage.h>
+#include <VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h>
+
+class DBManageClass {
+public:
+    DBManageClass(LDBTool *_dbTool);
+
+    virtual ~DBManageClass();
+
+    void start(int fileManagePSize = 1, int cutManagePSize = 1, int sdkHdlManagePSize = 1);
+
+    void addDevice(const std::string strDevID, const char *ip, const unsigned short port, const char *usrname,
+                   const char *passwd);
+
+    void testSdk();
+
+    void stop();
+
+    void downFileFuncFinish(std::shared_ptr<ChannelLoadFileManage> &spPacket);
+
+    void cutVideoFuncFinish(std::shared_ptr<finishCutFileManage> &spPacket);
+
+    void sdkhlVideoFuncFinish(std::shared_ptr<finishSdkHdlManage> &spPacket, int listSize);
+
+private:
+
+    void init(int fileManagePSize = 1, int cutManagePSize = 1, int sdkHdlManagePSize = 1);
+
+    static void downloadFile(DBManageClass *dbManageClass);
+
+    static void cutVideoFile(DBManageClass *dbManageClass);
+
+    static void sdkHlVideo(DBManageClass *dbManageClass);
+
+private:
+    std::atomic_bool m_downloadFileRet;
+    int m_fileManagePSize = 0;
+    loadFileManage m_fileManage;
+
+    std::atomic_bool m_cutVideoRet;
+    int m_cutManagePSize = 0;
+    cutManage m_cutManage;
+
+    std::atomic_bool m_sdkHdlRet;
+    int m_sdkHdlManagePSize = 0;
+    sdkHdlManage m_sdkHdlManage;
+
+    HcDowloadElement m_HcDowloadElement;
+    HcAnalysVideo m_HcAnalysVideo;
+    //#todo sdk
+    BaiscSDKAnalysVideo m_BasicSDKAnalysVideo;
+};
+
+
+#endif //VIDEOANALYSFROMHC_DBMANAGECLASS_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.cpp
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h
new file mode 100644
index 0000000..ec8e948
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcAnalysVideo.h
@@ -0,0 +1,43 @@
+#ifndef HCANALYSVIDEO_H_XZL_201808131611
+#define HCANALYSVIDEO_H_XZL_201808131611
+
+#include "myThread.h"
+#include "AppController.h"
+#include <vector>
+#include <basic/io/io.h>
+#include "dispathdatatype.hpp"
+
+//struct AnalysSrcInfo {
+//    std::string strPath;
+//};
+
+class HcAnalysVideo : public mythread<getCutFileManage> {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<finishCutFileManage> &)>;
+public:
+    HcAnalysVideo(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+    ~HcAnalysVideo() {
+
+    }
+
+private:
+    virtual void doFunc(std::shared_ptr<getCutFileManage> spPacket) {
+        AppController _AppController(spPacket->src_path, 5000);
+        auto str_Path = _AppController.startController();
+        if (m_task_function != nullptr) {
+            auto fp_task(
+                std::make_shared<finishCutFileManage>(
+                    finishCutFileManage{spPacket->src_path, str_Path,
+                                        IOOperate::GetFileNum(str_Path.c_str(), ".mp4")}));
+            m_task_function(fp_task);
+        } else {
+            ERR("m_task_function == nullptr");
+            return;
+        }
+    }
+
+private:
+    TASK_FUNCTION m_task_function;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.cpp
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h
new file mode 100644
index 0000000..52add24
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcDowloadElement.h
@@ -0,0 +1,92 @@
+#ifndef HCDOWNLOADELEMENT_XZL_201808091137
+#define HCDOWNLOADELEMENT_XZL_201808091137
+
+#include "myThread.h"
+#include "HCNetSDK.h"
+#include "HcRecord.h"
+#include "HcAnalysVideo.h"
+#include <mutex>
+
+
+class HcDowloadElement : public mythread<ChannelLoadFileManage> {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<ChannelLoadFileManage> &)>;
+public:
+    HcDowloadElement(const TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+//    HcDowloadElement(LDBTool* dbTool) : m_fileManage(dbTool) {
+//        m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123");
+//    }
+
+//    HcDowloadElement(HcAnalysVideo *p) : m_HcAnalysVideo(p) {
+//        m_HcRecord.init("192.168.1.4", 8000, "admin", "basic123");
+//    }
+
+    void addDevice(const std::string strDevID, const char *ip,
+                   const unsigned short port,
+                   const char *usrname,
+                   const char *passwd) {
+        //#todo
+        if (m_mapHcRecord.find(strDevID) == m_mapHcRecord.end()) {
+            m_mapHcRecord[strDevID] = new HcRecord;
+            m_mapHcRecord[strDevID]->init(ip, port, usrname, passwd);
+        } else {
+            ERR("璁惧宸插瓨鍦�");
+        }
+
+    }
+
+    ~HcDowloadElement() {
+//        m_HcRecord.unInit();
+        for (auto item : m_mapHcRecord) {
+            item.second->unInit();
+            delete (item.second);
+        }
+    }
+
+
+private:
+
+    virtual void doFunc(std::shared_ptr<ChannelLoadFileManage> spPacket) {
+        if (m_mapHcRecord.find(spPacket->strDevID) == m_mapHcRecord.end()) {
+            ERR("璁惧涓嶅凡瀛樺湪");
+            return;
+        }
+//        std::vector<int> ret = m_HcRecord.getUsefulChans();
+        std::vector<int> ret = m_mapHcRecord[spPacket->strDevID]->getUsefulChans();
+        NET_DVR_TIME startTime;
+        startTime.dwYear = spPacket->startTime.Year;
+        startTime.dwMonth = spPacket->startTime.Month;
+        startTime.dwDay = spPacket->startTime.Day;
+        startTime.dwHour = spPacket->startTime.Hour;
+        startTime.dwMinute = spPacket->startTime.Minute;
+        startTime.dwSecond = spPacket->startTime.Second;
+        NET_DVR_TIME endTime;
+        endTime.dwYear = spPacket->endTime.Year;
+        endTime.dwMonth = spPacket->endTime.Month;
+        endTime.dwDay = spPacket->endTime.Day;
+        endTime.dwHour = spPacket->endTime.Hour;
+        endTime.dwMinute = spPacket->endTime.Minute;
+        endTime.dwSecond = spPacket->endTime.Second;
+        std::string filePath;
+        //#todo 浠诲姟鎸夌収30min鐨勯绮掑害鎷嗗垎銆�
+        m_mapHcRecord[spPacket->strDevID]->downloadfiles(spPacket->strDevID.c_str(), spPacket->nChannelID, &startTime,
+                                                         &endTime, filePath);
+        if (m_task_function != nullptr) {
+            auto str = filePath.substr(0, filePath.rfind('/'));
+            spPacket->srcPath = filePath.substr(0, filePath.rfind('/'));
+            DBG(spPacket->srcPath);
+            m_task_function(spPacket);
+        } else {
+            ERR("m_task_function == nullptr");
+            return;
+        }
+    }
+
+private:
+//    HcRecord m_HcRecord;
+    std::map<std::string, HcRecord *> m_mapHcRecord;
+    TASK_FUNCTION m_task_function;
+//    HcAnalysVideo *m_HcAnalysVideo;
+//    loadFileManage m_fileManage;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp
new file mode 100644
index 0000000..aa36988
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.cpp
@@ -0,0 +1,356 @@
+#include "HcRecord.h"
+#include <cstring>
+#include <unistd.h>
+#include <basic/io/io.h>
+#include <string>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <basic/util/app/AppConfig.h>
+
+int HcRecord::init(const char *ip, unsigned short port, const char *usrname, const char *passwd) {
+    NET_DVR_Init();
+    //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
+    NET_DVR_SetConnectTime(2000, 1);
+    NET_DVR_SetReconnect(10000, true);
+
+    NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
+    struLoginInfo.bUseAsynLogin = 0; //鍚屾鐧诲綍鏂瑰紡
+    strcpy(struLoginInfo.sDeviceAddress, ip); //璁惧IP鍦板潃
+    struLoginInfo.wPort = port; //璁惧鏈嶅姟绔彛
+    strcpy(struLoginInfo.sUserName, usrname); //璁惧鐧诲綍鐢ㄦ埛鍚�
+    strcpy(struLoginInfo.sPassword, passwd); //璁惧鐧诲綍瀵嗙爜
+
+    //璁惧淇℃伅, 杈撳嚭鍙傛暟
+    NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};
+
+    m_lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
+    if (m_lUserID < 0) {
+//        printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
+        NET_DVR_Cleanup();
+        return -1;
+    }
+    devSerialNumber = (char *) struDeviceInfoV40.struDeviceV30.sSerialNumber;
+    UsefulChans();
+    return 0;
+}
+
+int HcRecord::unInit() {
+    //娉ㄩ攢鐢ㄦ埛
+    NET_DVR_Logout(m_lUserID);
+    //閲婃斁SDK璧勬簮
+    NET_DVR_Cleanup();
+    return 0;
+}
+
+int HcRecord::saveRecordFile(int userId, char *srcfile, char *destfile) {
+    int bRes = 1;
+    int hPlayback = 0;
+    if ((hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0) {
+        printf("GetFileByName failed. error[%d]\n", NET_DVR_GetLastError());
+        bRes = -1;
+        return bRes;
+    }
+
+    if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+        printf("play back control failed [%d]\n", NET_DVR_GetLastError());
+        bRes = -1;
+        return bRes;
+    }
+
+    int nPos = 0;
+    for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+        //printf("Be downloading...%d %%\n", nPos);
+        usleep(5000);  //millisecond
+    }
+    printf("have got %d\n", nPos);
+
+    if (!NET_DVR_StopGetFile(hPlayback)) {
+        printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+        bRes = -1;
+        return bRes;
+    }
+    printf("%s\n", srcfile);
+
+    if (nPos < 0 || nPos > 100) {
+        printf("download err [%d]\n", NET_DVR_GetLastError());
+        bRes = -1;
+        return bRes;
+    } else {
+        return 0;
+    }
+}
+
+std::vector<int> HcRecord::getUsefulChans() const {
+    return m_vecUsefulChans;
+}
+
+std::string HcRecord::getSerialNumber() const {
+    return devSerialNumber;
+}
+
+void HcRecord::UsefulChans() {
+    m_vecUsefulChans.clear();
+    NET_DVR_IPPARACFG_V40 ipOut;
+    long len;
+    BOOL bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_IPPARACFG_V40, 33, &ipOut, sizeof(NET_DVR_IPPARACFG_V40),
+                                     (LPDWORD) &len);
+    NET_DVR_PICCFG_V40 picOut;
+    bret = NET_DVR_GetDVRConfig(m_lUserID, NET_DVR_GET_PICCFG_V40, 33, &picOut, sizeof(NET_DVR_PICCFG_V40),
+                                (LPDWORD) &len);
+    DWORD dErr = NET_DVR_GetLastError();
+
+    BYTE byIPID, byIPIDHigh;
+    int iDevInfoIndex, iGroupNO;
+
+
+    for (int i = 0; i < ipOut.dwDChanNum; i++) {
+        switch (ipOut.struStreamMode[i].byGetStreamType) {
+            case 0: //鐩存帴浠庤澶囧彇娴�
+                if (ipOut.struStreamMode[i].uGetStream.struChanInfo.byEnable) {
+                    byIPID = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPID;
+                    byIPIDHigh = ipOut.struStreamMode[i].uGetStream.struChanInfo.byIPIDHigh;
+                    iDevInfoIndex = byIPIDHigh * 256 + byIPID - 1 - iGroupNO * 64;
+                    printf("IP channel no.%d is online, IP: %s\n", i + 1,
+                           ipOut.struIPDevInfo[iDevInfoIndex].struIP.sIpV4);
+                    m_vecUsefulChans.push_back(i + 33);
+                }
+                break;
+            case 1: //浠庢祦濯掍綋鍙栨祦
+                if (ipOut.struStreamMode[i].uGetStream.struPUStream.struStreamMediaSvrCfg.byValid) {
+                    printf("IP channel %d connected with the IP device by stream server.\n", i + 1);
+                    printf("IP of stream server: %s, IP of IP device: %s\n", ipOut.struStreamMode[i].uGetStream.\
+                struPUStream.struStreamMediaSvrCfg.struDevIP.sIpV4, ipOut.struStreamMode[i].uGetStream.\
+                struPUStream.struDevChanInfo.struIP.sIpV4);
+                }
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+std::string HcRecord::makeDirs(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+                               const LPNET_DVR_TIME pEndTime) {
+    auto cutpath = appConfig.getStringProperty("cutPath");
+    if (cutpath.back() != '/') {
+        cutpath.append("/");
+    }
+    auto loadPath = appConfig.getStringProperty("loadPath");
+    if (loadPath.back() != '/') {
+        loadPath.append("/");
+    }
+    makeDir(cutpath, strDevID, nChannel, pStartTime, pEndTime);
+    return makeDir(loadPath, strDevID, nChannel, pStartTime, pEndTime);
+}
+
+std::string HcRecord::makeDir(const std::string &strType, const std::string &strDevID, const int nChannel,
+                              const LPNET_DVR_TIME pStartTime,
+                              const LPNET_DVR_TIME pEndTime) {
+//    char szPath[MAX_PATH] = {0};
+//    getcwd(szPath, MAX_PATH);
+//    std::string strFinalPath(szPath);
+    std::string strFinalPath = strType;
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    strFinalPath = strFinalPath + "/" + strDevID;
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    strFinalPath = strFinalPath + "/" + toString(nChannel);
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    strFinalPath = strFinalPath + "/" + std::to_string(pStartTime->dwYear) + toString(pStartTime->dwMonth);
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    strFinalPath = strFinalPath + "/" + toString(pStartTime->dwDay);
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    strFinalPath = strFinalPath + "/" + strDevID + "-" + toString(nChannel) + "-" +
+                   std::to_string(pStartTime->dwYear) + toString(pStartTime->dwMonth) +
+                   toString(pStartTime->dwDay) +
+                   toString(pStartTime->dwHour) + toString(pStartTime->dwMinute) +
+                   toString(pStartTime->dwSecond);
+    if (!IOOperate::IsFolderExist(strFinalPath.c_str())) IOOperate::MakeDir(strFinalPath.c_str());
+    //2018-08-08 14:00:00.mp4
+    std::string filepath = strFinalPath + "/" + std::to_string(pStartTime->dwYear) + "-" +
+                           toString(pStartTime->dwMonth) + "-" +
+                           toString(pStartTime->dwDay) + " " +
+                           toString(pStartTime->dwHour) + ":" + toString(pStartTime->dwMinute) + ":" +
+                           toString(pStartTime->dwSecond) + ".mp4";
+    return filepath;
+}
+
+std::string HcRecord::toString(const int src) {
+    std::stringstream ss;
+    ss << std::setw(2) << std::setfill('0') << src;
+    return ss.str();
+}
+
+int HcRecord::downloadfiles(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+                            const LPNET_DVR_TIME pEndTime, std::string &filePath) {
+
+    //鑾峰彇璺緞
+    filePath = makeDirs(strDevID, nChannel, pStartTime, pEndTime);
+
+    //灏嗘椂闂磋浆鍖栦负QDateTime绫诲瀷锛屼究浜庢椂闂存瘮杈�
+    //#todo寰呬紭鍖�
+//    string str_StringStartTime(
+//        to_string(pStartTime->dwYear) + "-" + to_string(pStartTime->dwMonth) + "-" + to_string(pStartTime->dwDay) + " "
+//        + to_string(pStartTime->dwHour) + ":" + to_string(pStartTime->dwMinute) + ":" +
+//        to_string(pStartTime->dwSecond));
+
+    char ch_StringStartTime[128];
+    sprintf(ch_StringStartTime, "%04d-%02d-%02d %02d:%02d:%02d", pStartTime->dwYear, pStartTime->dwMonth,
+            pStartTime->dwDay, pStartTime->dwHour, pStartTime->dwMinute, pStartTime->dwSecond);
+    string str_StringStartTime(ch_StringStartTime);
+
+    QDateTime taskStartTime = QDateTime::fromString(QString::fromStdString(str_StringStartTime), "yyyy-MM-dd hh:mm:ss");
+
+//    string str_StringEndTime(
+//        to_string(pEndTime->dwYear) + "-" + to_string(pEndTime->dwMonth) + "-" + to_string(pEndTime->dwDay) + " "
+//        + to_string(pEndTime->dwHour) + ":" + to_string(pEndTime->dwMinute) + ":" + to_string(pEndTime->dwSecond));
+
+    char ch_StringEndTime[128];
+    sprintf(ch_StringEndTime, "%04d-%02d-%02d %02d:%02d:%02d", pEndTime->dwYear, pEndTime->dwMonth, pEndTime->dwDay,
+            pEndTime->dwHour, pEndTime->dwMinute, pEndTime->dwSecond);
+    string str_StringEndTime(ch_StringEndTime);
+
+    QDateTime taskEndTime = QDateTime::fromString(QString::fromStdString(str_StringEndTime), "yyyy-MM-dd hh:mm:ss");
+    //鏃堕棿杞寲-------------end----------------------
+
+    //閫掑綊锛屽皢鏃堕棿鎸夌収15min鍒嗗壊,鑻ユ渶鍚庡皬浜�15min,鍒欐寜鍓╀綑鏃堕棿褰曞埗骞剁粨鏉熼�掑綊
+    RecursiveByTimeDownloadfiles(strDevID, nChannel, taskStartTime, taskEndTime, filePath);
+
+    return 0;
+}
+
+int
+HcRecord::RecursiveByTimeDownloadfiles(const std::string &strDevID, const int nChannel, QDateTime pStartTime,
+                                       QDateTime pEndTime, std::string &filePath) {
+
+    NET_DVR_TIME startTime;
+    startTime.dwYear = pStartTime.date().year();
+    startTime.dwMonth = pStartTime.date().month();
+    startTime.dwDay = pStartTime.date().day();
+    startTime.dwHour = pStartTime.time().hour();
+    startTime.dwMinute = pStartTime.time().minute();
+    startTime.dwSecond = pStartTime.time().second();
+
+    std::string tmp_filepath = std::to_string(startTime.dwYear) + "-" + toString(startTime.dwMonth) + "-" +
+                               toString(startTime.dwDay) + " " + toString(startTime.dwHour) + ":" +
+                               toString(startTime.dwMinute) + ":" + toString(startTime.dwSecond) + ".mp4";
+    auto pos = filePath.rfind("/");
+
+//    cout << filePath << endl;
+
+    filePath.replace(pos+1, filePath.size() - pos, tmp_filepath);
+
+//    cout << filePath << endl;
+
+    QDateTime tmp_EndTime = pStartTime.addSecs(1 * 60 * 15);
+    if (tmp_EndTime < pEndTime) {
+        NET_DVR_TIME endTime;
+        endTime.dwYear = tmp_EndTime.date().year();
+        endTime.dwMonth = tmp_EndTime.date().month();
+        endTime.dwDay = tmp_EndTime.date().day();
+        endTime.dwHour = tmp_EndTime.time().hour();
+        endTime.dwMinute = tmp_EndTime.time().minute();
+        endTime.dwSecond = tmp_EndTime.time().second();
+
+
+        Downloadfile(strDevID, nChannel, &startTime, &endTime, filePath);
+
+        RecursiveByTimeDownloadfiles(strDevID, nChannel, tmp_EndTime, pEndTime, filePath);
+    } else {
+
+        NET_DVR_TIME endTime;
+        endTime.dwYear = pEndTime.date().year();
+        endTime.dwMonth = pEndTime.date().month();
+        endTime.dwDay = pEndTime.date().day();
+        endTime.dwHour = pEndTime.time().hour();
+        endTime.dwMinute = pEndTime.time().minute();
+        endTime.dwSecond = pEndTime.time().second();
+
+        Downloadfile(strDevID, nChannel, &startTime, &endTime, filePath);
+        return 0;
+    }
+}
+
+int
+HcRecord::Downloadfile(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+                       const LPNET_DVR_TIME pEndTime, std::string &filePath) {
+//    NET_DVR_TIME startTime;
+//    startTime.dwYear = pStartTime.date().year();
+//    startTime.dwMonth = pStartTime.date().month();
+//    startTime.dwDay = pStartTime.date().day();
+//    startTime.dwHour = pStartTime.time().hour();
+//    startTime.dwMinute = pStartTime.time().minute();
+//    startTime.dwSecond = pStartTime.time().second();
+//
+//    NET_DVR_TIME endTime;
+//    endTime.dwYear = pEndTime.date().year();
+//    endTime.dwMonth = pEndTime.date().month();
+//    endTime.dwDay = pEndTime.date().day();
+//    endTime.dwHour = pEndTime.time().hour();
+//    endTime.dwMinute = pEndTime.time().minute();
+//    endTime.dwSecond = pEndTime.time().second();
+
+
+    NET_DVR_PLAYCOND struDownloadCond = {0};
+    struDownloadCond.dwChannel = nChannel;
+
+    struDownloadCond.struStartTime.dwYear = pStartTime->dwYear;
+    struDownloadCond.struStartTime.dwMonth = pStartTime->dwMonth;
+    struDownloadCond.struStartTime.dwDay = pStartTime->dwDay;
+    struDownloadCond.struStartTime.dwHour = pStartTime->dwHour;
+    struDownloadCond.struStartTime.dwMinute = pStartTime->dwMinute;
+    struDownloadCond.struStartTime.dwSecond = pStartTime->dwSecond;
+
+    struDownloadCond.struStopTime.dwYear = pEndTime->dwYear;
+    struDownloadCond.struStopTime.dwMonth = pEndTime->dwMonth;
+    struDownloadCond.struStopTime.dwDay = pEndTime->dwDay;
+    struDownloadCond.struStopTime.dwHour = pEndTime->dwHour;
+    struDownloadCond.struStopTime.dwMinute = pEndTime->dwMinute;
+    struDownloadCond.struStopTime.dwSecond = pEndTime->dwSecond;
+
+//    filePath = makeDirs(strDevID, nChannel, pStartTime, pEndTime);
+
+
+
+    //std::cout << filePath << std::endl;
+
+    //---------------------------------------
+    //鎸夋椂闂翠笅杞�
+    int hPlayback;
+    hPlayback = NET_DVR_GetFileByTime_V40(m_lUserID, (char *) filePath.c_str(), &struDownloadCond);
+    if (hPlayback < 0) {
+        printf("NET_DVR_GetFileByTime_V40 fail,last error %d\n", NET_DVR_GetLastError());
+        NET_DVR_Logout(m_lUserID);
+        NET_DVR_Cleanup();
+        return -1;
+    }
+
+    //---------------------------------------
+    //寮�濮嬩笅杞�
+    if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)) {
+        printf("Play back control failed [%d]\n", NET_DVR_GetLastError());
+        NET_DVR_Logout(m_lUserID);
+        NET_DVR_Cleanup();
+        return -1;
+    }
+
+    int nPos = 0;
+    for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback)) {
+        //printf("Be downloading... %d %%\n",nPos);
+        usleep(5000);  //millisecond
+    }
+    if (!NET_DVR_StopGetFile(hPlayback)) {
+        printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
+        NET_DVR_Logout(m_lUserID);
+        NET_DVR_Cleanup();
+        return -1;
+    }
+    if (nPos < 0 || nPos > 100) {
+        printf("download err [%d]\n", NET_DVR_GetLastError());
+        NET_DVR_Logout(m_lUserID);
+        NET_DVR_Cleanup();
+        return -1;
+    }
+    //printf("Be downloading... %d %%\n",nPos);
+    return 0;
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h
new file mode 100644
index 0000000..a592d68
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/HcRecord.h
@@ -0,0 +1,52 @@
+#ifndef HCRECORD_H_XZL_201808081648
+#define HCRECORD_H_XZL_201808081648
+
+#include "HCNetSDK.h"
+#include <QDateTime>
+#include <string>
+#include <vector>
+
+class HcRecord {
+public:
+    HcRecord() : m_lUserID(-1) {}
+
+    ~HcRecord() {}
+
+    int init(const char *ip, unsigned short port, const char *usrname, const char *passwd);
+
+    int unInit();
+
+    int downloadfiles(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME,
+                      const LPNET_DVR_TIME, std::string &);
+
+    int saveRecordFile(int userId, char *srcfile, char *destfile);
+
+    std::vector<int> getUsefulChans() const;
+
+    std::string getSerialNumber() const;
+
+private:
+    void UsefulChans();
+
+    std::string makeDirs(const std::string &strDevID, const int nChannel, const LPNET_DVR_TIME pStartTime,
+                         const LPNET_DVR_TIME pEndTime);
+
+    std::string makeDir(const std::string &strType, const std::string &strDevID, const int nChannel,
+                        const LPNET_DVR_TIME pStartTime,
+                        const LPNET_DVR_TIME pEndTime);
+
+    std::string toString(const int src);
+
+    int Downloadfile(const std::string &, const int nChannel, const LPNET_DVR_TIME, const LPNET_DVR_TIME,
+                     std::string &);
+
+    int
+    RecursiveByTimeDownloadfiles(const std::string &, const int nChannel, QDateTime, QDateTime, std::string &);
+
+private:
+    LONG m_lUserID;
+    std::vector<int> m_vecUsefulChans;
+    std::string devSerialNumber;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp
new file mode 100644
index 0000000..bcd62e6
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.cpp
@@ -0,0 +1,185 @@
+#include "PerimeterAlarmManager.h"
+#include <basic/core/JsonFile.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <map>
+#include <mutex>
+#include <sys/time.h>
+#include "../VideoServer/QiaoJia/DB/LDBTool.h"
+#include <basic/util/fastdfs/FastFds.hpp>
+PerimeterAlarmManager::PerimeterAlarmManager(LDBTool *lDBTool):
+m_lDBTool(lDBTool)
+{
+   init();
+}
+
+PerimeterAlarmManager::~PerimeterAlarmManager()
+{
+   PA_removeAll();
+}
+
+
+void PerimeterAlarmManager::printConfigInfo(const ControllerConfig& config)
+{
+    //INFO("nFps "<<config.camInfo.nFps);
+
+//    INFO("strRtsp "<<config.camInfo.strRtsp);
+//    INFO("nTriggerDelay "<<config.paAlarmInfo.nTriggerDelay);
+//    INFO("nAlarmDelay "<<config.paAlarmInfo.nAlarmDelay);
+//    INFO("fSensitivity "<<config.paAlarmInfo.fSensitivity);
+//    INFO("strMaskPath "<<config.paAlarmInfo.strMaskPath);
+//    INFO("nAssembleCount "<<config.paAlarmInfo.nAssembleCount);
+
+
+//    for(auto ele:config.assembleInfo.sounds)
+//    {
+//        INFO("soundPlayInfo.nID "<<ele.strIP);
+//        INFO("soundPlayInfo.nSoundDuration "<<ele.nSoundDuration);
+//        INFO("soundPlayInfo.strPath "<<ele.strPath);
+//    }
+}
+
+
+int PerimeterAlarmManager::PA_addCamera(int index, const ControllerConfig& config)
+{
+    static int gpucount = 0;
+
+    gpucount++;
+
+    if(g_mapControls[index] == nullptr)
+    {
+        auto control = new AppPaController(index,config);
+        g_mapControls[index] = control;
+        control->start();
+        return 0;
+    }else{
+        PA_removeCamera(index);
+        return PA_addCamera(index, config);
+    }
+}
+
+int PerimeterAlarmManager::PA_removeCamera(int index)
+{
+    INFO("PA_removeCamera remove_index : "<<index);
+    if(g_mapControls[index] != nullptr)
+    {
+        AppPaController* control = g_mapControls[index];
+        control->stop();
+        control->wait();
+        delete control;
+        g_mapControls[index] = nullptr;
+        g_mapControls.erase(index);
+        return 0;
+    }
+    return -1;
+}
+
+int PerimeterAlarmManager::PA_removeAll()
+{
+    INFO("PA_removeAll");
+    for(auto iter = g_mapControls.begin();iter!=g_mapControls.end();iter++){
+        AppPaController* control = iter->second;
+        if(nullptr!=control)
+        {
+            control->stop();
+            control->wait();
+            delete control;
+        }
+        control = nullptr;
+    }
+    g_mapControls.clear();
+    return 0;
+}
+
+
+
+
+bool PerimeterAlarmManager::PA_hasIndex(int index)
+{
+    return g_mapControls[index] != nullptr;
+}
+
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+                                 std::string passwd, std::string brand) {
+    std::string rtsp_url;
+    if (brand == "haikang") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/h264/ch1/main/av_stream";
+    } else if (brand == "dahua") {
+        //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/cam/realmonitor?channel=1&subtype=0";
+        //TODO
+    } else if (brand == "yushi") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/video1";
+    } else {
+        //TODO
+    }
+
+    return rtsp_url;
+}
+
+void PerimeterAlarmManager::init()
+{
+    auto lst = m_lDBTool->searchCamDevTableAll();
+    auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+
+    appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
+
+    if (lst.size() > 0)
+    {
+        Json::Value json;
+        Json::Value rules;
+        for (auto item : lst)
+        {
+           int camId=item.str_cam_dev_id.toInt();
+           AlarmRule rule=m_lDBTool->searchCameraRuleByCamId(camId);
+           QVector<LActRuleWeekRecord> vec=m_lDBTool->searchCameraWeekRuleByCamId(camId);
+           ControllerConfig config;
+           for(int i=0;i<vec.size();++i)
+           {
+               RuleWeekInfo info;
+               info.m_nType=vec[i].m_nType;
+               info.m_strBegin=vec[i].m_strBegin;
+               info.m_strEnd=vec[i].m_strEnd;
+               config.ruleWeekInfoVec.push_back(info);
+           }
+
+
+           config.camInfo.strCamId= item.str_cam_dev_id.toStdString();
+
+
+            config.camInfo.strRtsp= rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
+                                                 item.str_password.toStdString(), item.str_brand.toStdString());
+
+            config.camInfo.strAdrr = item.str_addr.toStdString();
+
+            config.paAlarmInfo.fSensitivity=rule.sensitivity;
+            config.paAlarmInfo.nAlarmDelay=rule.alarm_delay;
+            config.paAlarmInfo.nTriggerDelay=rule.trigger_delay;
+            config.paAlarmInfo.strMaskPath=rule.str_mask_path;
+            config.paAlarmInfo.nAssembleCount=rule.assemble_count;
+
+            PA_addCamera(camId, config);
+        }
+    }
+    else
+    {
+        ERR("searchCamDevTableAll size is 0");
+    }
+}
+std::string PerimeterAlarmManager::resetFdfs(std::string ip, unsigned int port, std::string content) {
+
+    std::thread reset([&]() {
+        fdfsClient.rwLock.rdlock();
+        if (fdfsClient.fastFds != nullptr) {
+            delete fdfsClient.fastFds;
+        }
+        fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+        fdfsClient.rwLock.unlock();
+    });
+    reset.detach();
+
+    return "";
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h
new file mode 100644
index 0000000..a88ec11
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/PerimeterAlarmManager.h
@@ -0,0 +1,42 @@
+#ifndef PERIMETERALARMMANAGER_H
+#define PERIMETERALARMMANAGER_H
+#include "../PerimeterAlarm/AppPaController.h"
+class ControllerConfig;
+class LDBTool;
+class FastFdsWithLock;
+class PerimeterAlarmManager
+{
+public:
+    PerimeterAlarmManager(LDBTool *_dbTool);
+    virtual ~PerimeterAlarmManager();
+private:
+
+    int PA_addCamera(int index, const ControllerConfig& config);
+
+    int PA_removeCamera(int index);
+
+
+    int PA_removeAll();
+
+    /* 鍔熻兘锛氬垽鏂煇涓猧ndex鏄惁鍦ㄦ杩涚▼涓�
+    params:
+        index 鎽勫儚澶磇ndex
+    return value:
+        true琛ㄧず鍦ㄦ杩涚▼涓紝false琛ㄧず涓嶅湪
+    */
+    bool PA_hasIndex(int index);
+
+    void printConfigInfo(const ControllerConfig& config);
+
+    void init();
+
+    std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "");
+
+    //static std::vector<int> chnString2Vec(std::string str_list);
+private:
+     LDBTool* m_lDBTool;
+     FastFdsWithLock fdfsClient;
+     std::map<int, AppPaController*> g_mapControls;
+};
+
+#endif // PERIMETERALARMMANAGER_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
new file mode 100644
index 0000000..b96f6bd
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -0,0 +1,304 @@
+//
+// Created by ps on 18-9-26.
+//
+
+#include "RtspAnalysElement.h"
+
+#include <basic/http_server/HttpSrvRetRecieve.hpp>
+
+using std::string;
+
+//RtspAnalysElement::RtspAnalysElement() {}
+
+std::string RtspAnalysElement::resetFdfs(std::string ip, unsigned int port, std::string content) {
+
+    std::thread reset([&]() {
+        fdfsClient.rwLock.rdlock();
+        if (fdfsClient.fastFds != nullptr) {
+            delete fdfsClient.fastFds;
+        }
+        fdfsClient.fastFds = new FastFds("fastDfsClient.conf");
+        fdfsClient.rwLock.unlock();
+    });
+    reset.detach();
+
+    return "";
+}
+
+RtspAnalysElement::RtspAnalysElement(LDBTool *_dbTool) : m_lDBTool(_dbTool), maxCount(50), currentCount(0) {
+    init();
+    resetFdfs();
+    {
+//        std::thread httpServer([&]() {
+//            //#todo port
+//            HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 12306, 1);
+//            httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&RtspAnalysElement::resetFdfs, this,
+//                                                                        std::placeholders::_1,
+//                                                                        std::placeholders::_2,
+//                                                                        std::placeholders::_3));
+//            httpSrvRetRecieve.start();
+//            httpSrvRetRecieve.waitForShutDown();
+//        });
+//        httpServer.detach();
+    }
+}
+
+#define SETSCORE(VEC, POS, IDENT) appPref.setFloatData(IDENT, POS >= VEC.size() ? 80 : VEC[POS]);
+//#define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 0.1 : appPref.getFloatData(IDENT);
+
+static std::string rtspAddrBuild(std::string ip, const int port, std::string username,
+                                 std::string passwd, std::string brand) {
+    std::string rtsp_url;
+    if (brand == "haikang") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/h264/ch1/main/av_stream";
+    } else if (brand == "dahua") {
+        //rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/cam/realmonitor?channel=1&subtype=0";
+        //TODO
+    } else if (brand == "yushi") {
+        rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+                   "/video1";
+    } else {
+        //TODO
+    }
+
+    return rtsp_url;
+}
+
+void RtspAnalysElement::init() {
+    auto lst = m_lDBTool->searchCamDevTableAll();
+    auto lst_dev = m_lDBTool->searchConfigTableWithinServerInfo();
+
+    appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration);
+
+    if (lst.size() > 0) {
+        Json::Value json;
+        for (auto item : lst) {
+            string t_camIdex = item.str_cam_dev_id.toStdString();
+//            std::string rtsp_url;
+//            if (item.str_brand.toStdString() == "haikang") {
+//                //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+//                int port = 554;//TODO
+//                string username =;
+//                DBG("username:" << username << "!!!");
+//                string passwd = item.str_password.toStdString();
+//                string ip = item.str_ip.toStdString();
+//
+//                rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
+//                           "/h264/ch1/main/av_stream";
+//
+//            }//else if(){}
+
+            std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(),
+                                                 item.str_password.toStdString(), item.str_brand.toStdString());
+
+
+//            lRec.str_det_thr = rec.value("det_thr").toString();
+//            lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+            auto en_sdk = m_lDBTool->searchCamSdkTableByCamId(item.str_cam_dev_id);
+            vector<int> sdkVec = chnString2Vec(en_sdk.str_sdks.toStdString());
+
+            //璁剧疆妫�娴嬪緱鍒�
+//            std::string s_d = str_det_thr;
+//            std::string s_c = str_cmp_thr;
+            vector<int> sdkDetCoVec = chnString2Vec(en_sdk.str_det_thr.toStdString());
+            vector<int> sdkComCoVec = chnString2Vec(en_sdk.str_cmp_thr.toStdString());
+
+            int camId=item.str_cam_dev_id.toInt();
+            int t_size = sdkVec.size();
+            for (int i = 0; i < t_size; i++) {
+                switch (sdkVec[i]) {
+                    case 1: {
+//                        INFO("face.enable");
+                        json["face.enable"] = "1";
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "face.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "face.cmp");
+                        DBG(" TESTCODE " << sdkDetCoVec[i] << " " << sdkComCoVec[i]);
+
+                        break;
+                    }
+                    case 2: {
+                        DBG("XX.enable    " << "1");
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "XX.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "XX.cmp");
+                        break;
+                    }
+                    case 3: {
+//                        INFO("face.enable");
+                        json["yolo.enable"] = "1";
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "yolo.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "yolo.cmp");
+                        break;
+                    }
+                    case 4: {
+
+                        json["perimeter.enable"] = "1";
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "perimeter.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "perimeter.cmp");
+                        setDataByType(4,json,camId);
+                        break;
+                      }
+                    case 5: {
+
+                        json["crowd.enable"] = "1";
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "crowd.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "crowd.cmp");
+                        setDataByType(5,json,camId);
+                        break;
+                    }
+                    case 6: {
+
+                        json["keepRight.enable"] = "1";
+                        SETSCORE(sdkDetCoVec, i, t_camIdex + "keepRight.det");
+                        SETSCORE(sdkComCoVec, i, t_camIdex + "keepRight.cmp");
+                        setDataByType(6,json,camId);
+                        break;
+                    }
+                }
+            }
+            json["rtsp"] = rtsp_url;
+            json["addr"] = item.str_addr.toStdString();
+
+            INFO("cam add is " << item.str_addr.toStdString());
+
+//            DBG(t_camIdex);
+
+            appPref.getLongData("gpu.index");
+            addCamera(t_camIdex, json.toStyledString());
+        }
+    } else {
+        ERR("searchCamDevTableAll size is 0");
+    }
+
+}
+
+RtspAnalysElement::~RtspAnalysElement() {
+    for (auto controller: controllers) {
+        delete controller.second;
+    }
+    controllers.clear();
+}
+
+int RtspAnalysElement::addCamera(const std::string &index, const std::string &json) {
+    if (controllers.find(index) == controllers.end()) {
+        if (currentCount >= maxCount) {
+            ERR("addCamera faild, camera's num is full!")
+            return -1;
+        }
+        Json::Reader reader;
+        Json::Value value;
+
+        if (reader.parse(json, value)) {
+
+            controllers[index] = new AppPipeController(index, std::move(value), true);
+//            controllers[index] = new AppPipeController(index, std::move(value), false);
+
+            controllers[index]->setfdfsClient(&fdfsClient);
+            controllers[index]->start();
+            currentCount++;
+            return 0;
+        }
+        return -1;
+    } else {
+        removeCamera(index);
+        DBG("removeCamera " << index)
+        return addCamera(index, json);
+    }
+}
+
+int RtspAnalysElement::removeCamera(const std::string &index) {
+    if (controllers.find(index) == controllers.end())return -1;
+    auto controller = controllers[index];
+    controller->stop();
+    controller->wait();
+    delete controller;
+    controllers.erase(index);
+    currentCount--;
+    return 0;
+}
+
+int RtspAnalysElement::removeAll() {
+    for (auto controller: controllers) {
+        controller.second->stop();
+    }
+    for (auto controller: controllers) {
+        controller.second->wait();
+        delete controller.second;
+    }
+    controllers.clear();
+    currentCount = 0;
+    return 0;
+}
+
+int RtspAnalysElement::getMaxCamCount() {
+    return maxCount;
+}
+
+int RtspAnalysElement::getCurrentCamCount() {
+    return currentCount;
+}
+
+std::string RtspAnalysElement::getRtmp(std::string &index) {
+    if (controllers.find(index) == controllers.end())return "";
+    auto controller = controllers[index];
+    return controller->getRtmp();
+}
+
+
+std::vector<int> RtspAnalysElement::chnString2Vec(std::string str_list) {
+    std::vector<int> result;
+    char *property_list = const_cast<char *>(str_list.c_str());
+    const char *c_Analyse = ",";
+    char *t_property;
+
+    char *t_save = NULL;
+    t_property = strtok_r(property_list, c_Analyse, &t_save);
+
+    while (t_property) {
+        std::string str_pro(t_property);
+
+        result.push_back(atoi(str_pro.c_str()));
+
+        t_property = strtok_r(t_save, c_Analyse, &t_save);
+
+    }
+    return result;
+}
+void RtspAnalysElement::setDataByType(int type,Json::Value& json,int camId)
+{
+    switch (type) {
+    case 4:
+    {
+        auto rule=m_lDBTool->searchPerimeterRuleByCamId(camId);
+        json["perimeter.area"]=rule.strAreas.toStdString();
+        json["perimeter.num"]=rule.nAlarmPeopleNum;
+        json["perimeter.delay"]=rule.nTriggerDelay;
+        json["perimeter.tolerance"]=rule.nTriggertolerance;
+        break;
+    }
+    case 5:
+    {
+        auto rule=m_lDBTool->searchCrowdRuleByCamId(camId);
+        json["crowd.area"]=rule.strAreas.toStdString();
+        json["crowd.num"]=rule.nAlarmPeopleNum;
+        json["crowd.delay"]=rule.nTriggerDelay;
+        json["crowd.tolerance"]=rule.nTriggertolerance;
+        break;
+    }
+    case 6:
+    {
+         auto rule=m_lDBTool->searchActRuleByCamId(camId);
+         json["keepRight.leftArea"]=rule.strAreas.toStdString();
+         json["keepRight.leftLine"]=rule.strLine.toStdString();
+         json["keepRight.rightArea"]=rule.strExAreas.toStdString();
+         json["keepRight.rightLine"]=rule.strExLine.toStdString();
+         json["keepRight.delay"]=rule.nTriggerDelay;
+         json["keepRight.tolerance"]=rule.nTriggertolerance;
+        break;
+    }
+    default:
+        break;
+    }
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
new file mode 100644
index 0000000..890e317
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h
@@ -0,0 +1,56 @@
+//
+// Created by ps on 18-9-26.
+//
+
+#ifndef VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
+#define VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
+
+#include <iostream>
+#include <map>
+#include <StructureApp/AppPipeController.h>
+#include <VideoServer/QiaoJia/DB/LDBTool.h>
+#include <basic/util/app/AppPreference.hpp>
+
+
+class RtspAnalysElement {
+
+public:
+//    RtspAnalysElement();
+
+    RtspAnalysElement(LDBTool *_dbTool);
+
+    virtual ~RtspAnalysElement();
+
+    int addCamera(const std::string &, const std::string &);
+
+    int removeCamera(const std::string &);
+
+    int removeAll();
+
+    int getMaxCamCount();
+
+    int getCurrentCamCount();
+
+    std::string getRtmp(std::string &);
+
+private:
+    void init();
+
+    std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "");
+
+    static std::vector<int> chnString2Vec(std::string str_list);
+
+    void setDataByType(int type,Json::Value& json,int camId);
+
+private:
+    LDBTool *m_lDBTool;
+
+    std::map<std::string, AppPipeController *> controllers;
+    std::atomic<int> currentCount;
+    int maxCount;
+
+    FastFdsWithLock fdfsClient;
+};
+
+
+#endif //VIDEOANALYSFROMHC_RTSPANALYSELEMENT_H
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp
new file mode 100644
index 0000000..268ab71
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.cpp
@@ -0,0 +1,17 @@
+#include "TestThreads.h"
+//TestThreads::TestThreads()
+//{
+
+//}
+
+//TestThreads::~TestThreads()
+//{
+
+//}
+
+//void TestThreads::doFunc(std::shared_ptr<int>&)
+//{
+//    static int a = 0;
+//    a++;
+//    printf("Testcode [%d]",a);
+//}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h
new file mode 100644
index 0000000..800bc53
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/TestThreads.h
@@ -0,0 +1,19 @@
+#ifndef TESTTHREADS_XZL201808091501
+#define TESTTHREADS_XZL201808091501
+
+#include <myThread.h>
+
+class TestThreads : public mythread<int> {
+public:
+    TestThreads();
+
+    ~TestThreads();
+
+    virtual void doFunc(std::shared_ptr<int> &) {
+        static int a = 0;
+        a++;
+        printf("Testcode [%d]", a);
+    }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
new file mode 100644
index 0000000..98df593
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
@@ -0,0 +1,182 @@
+#include <stdio.h>
+#include <iostream>
+#include <unistd.h>
+#include "HCNetSDK.h"
+#include <cstring>
+#include "HcRecord.h"
+#include "TestThreads.h"
+#include "AppController.h"
+#include "DBManageClass.h"
+#include "RtspAnalysElement.h"
+#include <basic/debug/Debug.h>
+//#include "PerimeterAlarmManager.h"
+//#include "KeepRightManager.h"
+//"192.168.1.4", 8000, "admin", "basic123"
+
+using namespace std;
+
+#include <basic/util/file/FileUtil.h>
+#include <basic/util/app/AppPreference.hpp>
+#include <basic/util/app/AppConfig.h>
+
+
+static void startDBManageClass(LDBTool *_dbTool) {
+    DBManageClass _DBManageClass(_dbTool);
+    //from DEV_table get DEV config  DS-7808N-SN0820161208AARR691369356WCVU
+    auto lst = _dbTool->searchDeviceTableAll();
+    if (lst.size() > 0) {
+        for (auto item : lst) {
+            _DBManageClass.addDevice(item.str_storage_dev_id.toStdString(), item.str_ip.toStdString().c_str(),
+                                     item.n_port, item.str_username.toStdString().c_str(),
+                                     item.str_password.toStdString().c_str());
+        }
+        _DBManageClass.start(4, 8, 16);
+    } else {
+        ERR("searchDeviceTableAll size is 0");
+    }
+    while (1) {
+        sleep(1 * 60 * 60 * 12);
+    }
+}
+
+static void startRtspAnalysElement(LDBTool *_dbTool) {
+    RtspAnalysElement rtspAnalysElement(_dbTool);
+    while (1) {
+        sleep(1 * 60 * 60 * 12);
+    }
+}
+
+//static void startPerimeterAlarmManager(LDBTool *_dbTool) {
+//    PerimeterAlarmManager perimeterAlarmManager(_dbTool);
+//    while (1) {
+//        sleep(1 * 60 * 60 * 12);
+//    }
+//}
+//static void startKeepRightManager(LDBTool *_dbTool) {
+//    KeepRightManager keepRightManager(_dbTool);
+//    while (1) {
+//        sleep(1 * 60 * 60 * 12);
+//    }
+//}
+
+#include <basic/util/app/AppConfig.h>
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+    appPref.setLongData("gpu.index", 0);
+    appPref.setIntData("show.image", 0);
+
+    //#todo get from config File
+//    appPref.setStringData("ipAdd", "192.168.1.185");
+//    appPref.setIntData("ipPort", 9200);
+
+    appPref.setStringData("ipAdd", appConfig.getStringProperty("ES_IP"));
+    appPref.setIntData("ipPort", appConfig.getIntProperty("ES_PORT"));
+
+    //yolo server
+    appPref.setStringData("yolo.proxy", "yoloServer");
+    //#todo
+    appPref.setStringData("yolo.ip", "");
+    appPref.setIntData("yolo.port", 10003);
+//    rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+
+    //face detect server
+    appPref.setStringData("faceDete.proxy", "faceServer");
+    //#todo
+    appPref.setStringData("faceDete.ip", "");
+    appPref.setIntData("faceDete.port", 10002);
+//rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getLongData("faceDete.port"),"tcp"),
+//    rpcClient("faceServer","",10002,"tcp"),
+
+
+    //fece extern server
+    appPref.setStringData("faceExte.proxy", "faceExtractServer");
+    //#todo
+    appPref.setStringData("faceExte.ip", "");
+    appPref.setIntData("faceExte.port", 10008);
+//rpcClient(appPref.getStringData("faceExte.proxy"), appPref.getStringData("faceExte.ip"), appPref.getLongData("faceExte.port"),"tcp"),
+//        "faceExtractServer", "", 10008, "tcp"),//浜鸿劯鐗瑰緛鎻愬彇 淇敼鎴愮偣瀵圭偣閫氳
+
+
+    //face search server
+    appPref.setStringData("faceSear.proxy", "faceCmServer");
+    appPref.setStringData("faceSear.ip", "");
+    appPref.setIntData("faceSear.port", 10004);
+//rpcClient(appPref.getStringData("faceSear.proxy"), appPref.getStringData("faceSear.ip"), appPref.getLongData("faceSear.port"),"tcp"),
+//    faceSearchRpcClient("faceCmServer", "", 10004, "tcp")
+
+    //loopRecord server
+    appPref.setStringData("loopRecord.proxy", "LoopRecordVideoServer");
+    //#todo
+    appPref.setStringData("loopRecord.ip", "");
+    appPref.setIntData("loopRecord.port", 10010);
+//rpcClient(appPref.getStringData("loopRecord.proxy"), appPref.getStringData("loopRecord.ip"), appPref.getLongData("loopRecord.port"),"tcp"),
+
+    LDBTool _dbTool;
+    //"192.168.1.4", 8000, "admin", "basic123"
+
+    auto rec = _dbTool.searchConfigTableWithinServerInfo();
+
+    appPref.setStringData("fxDevID", rec.dev_id.toStdString());
+    appPref.setStringData("fxDevNAME", rec.dev_name.toStdString());
+    appPref.setStringData("user.loop.absolute.path", appConfig.getStringProperty("cutPath"));
+
+
+    bool loopRet = true;
+    while (loopRet) {
+        switch (_dbTool.searchDevTypeFromConfigTable()) {
+            case 0: {
+                DBG("case 0");
+                sleep(5);
+                break;
+            }
+            case 1: {
+                DBG("case 1");
+                //#todo add if
+                thread startDBManage(startDBManageClass, &_dbTool);
+                startDBManage.detach();
+                loopRet = false;
+                break;
+            }
+            case 2: {
+                DBG("case 2");
+                //#todo add 瀹炴椂娴佸湴鍧�
+                thread startRtspAnalys(startRtspAnalysElement, &_dbTool);
+                startRtspAnalys.detach();
+                loopRet = false;
+                break;
+            }
+//            case 3: {
+//                   DBG("case 3");
+//                   //#todo add 鍛ㄧ晫鎶ヨ
+//                   thread startPAManager(startPerimeterAlarmManager, &_dbTool);
+//                   startPAManager.detach();
+//                   loopRet = false;
+//                   break;
+//                   }
+//            case 4: {
+//                   DBG("case 4");
+//                   //#todo add KeepRight
+//                   thread startKPManager(startKeepRightManager, &_dbTool);
+//                   startKPManager.detach();
+//                   loopRet = false;
+//                   break;
+//                   }
+            default:
+                ERR("searchDevTypeFromConfigTable type is error");
+        }
+    }
+
+
+    INFO("get char");
+//    getchar();
+//    INFO("get char after");
+    while (1) {
+        sleep(1 * 60 * 60 * 12);
+    }
+    return 0;
+
+}
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp b/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp
new file mode 100644
index 0000000..37b2f9c
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/mySem.hpp
@@ -0,0 +1,70 @@
+#ifndef MYSEM_H_XZL_201808141050
+#define MYSEM_H_XZL_201808141050
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+enum {
+    SEMPHORE_FAIL = (-1),
+    SEMPHORE_SUCCESS = 0,
+    SEMPHORE_TIME_OUT = 1
+};
+
+class Semphore {
+public:
+    Semphore(const int sigs = 0) : m_signals(sigs), m_blocked(0) {}
+
+    ~Semphore() {}
+
+private:
+    Semphore(const Semphore &) = delete;
+
+    Semphore(Semphore &&) = delete;
+
+    Semphore operator=(const Semphore &) = delete;
+
+private:
+    std::mutex m_mtx;
+    std::condition_variable m_cv;
+    int m_signals;
+    int m_blocked;
+
+public:
+    int wait(const int time_out_ms = (-1)) {
+        std::unique_lock<std::mutex> ul(m_mtx);
+        if (m_signals > 0) {
+            --m_signals;
+            return SEMPHORE_SUCCESS;
+        } else {
+            ++m_blocked;
+        }
+
+        if (time_out_ms >= 0) {
+            std::chrono::milliseconds wait_time_ms(time_out_ms);
+            auto result = m_cv.wait_for(ul, wait_time_ms, [&] { return m_signals > 0; });
+            --m_blocked;
+            if (result) {
+                --m_signals;
+                return SEMPHORE_SUCCESS;
+            } else {
+                return SEMPHORE_TIME_OUT;
+            }
+        } else {
+            m_cv.wait(ul, [&] { return m_signals > 0; });
+            --m_blocked;
+            --m_signals;
+            return SEMPHORE_SUCCESS;
+        }
+    }
+
+    inline void signal(const int count = 1) {
+        std::lock_guard<std::mutex> lg(m_mtx);
+        m_signals += count;
+        if (m_blocked > 0) {
+            m_cv.notify_one();
+        }
+    }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp b/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp
new file mode 100644
index 0000000..7dd893d
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/myThread.cpp
@@ -0,0 +1 @@
+#include "myThread.h"
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/myThread.h b/QiaoJiaSystem/VideoAnalysFromHC/myThread.h
new file mode 100644
index 0000000..2749a52
--- /dev/null
+++ b/QiaoJiaSystem/VideoAnalysFromHC/myThread.h
@@ -0,0 +1,128 @@
+#ifndef MYTHREAD_H_XZL_201808081711
+#define MYTHREAD_H_XZL_201808081711
+
+#include <thread>
+#include <vector>
+#include <list>
+#include <memory>
+#include <thread>
+#include <chrono>
+#include <functional>
+#include <mySem.hpp>
+
+struct threadInfo {
+    bool isRunning;
+    std::shared_ptr<std::thread> thd;
+};
+enum {
+    PROCESSOR_FAIL = -1,
+    PROCESSOR_SUCCESS = 0,
+    PROCESSOR_TIME_OUT = 1,
+    PROCESSOR_QUEUE_FULL = 2,
+    PROCESSOR_QUEUE_EMPTY = 3
+};
+
+template<typename PACKET>
+class mythread {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<PACKET> &)>;
+public:
+    mythread(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+    virtual ~mythread() {}
+
+    int beginThreads(const int count) {
+        for (int i = 0; i < count; i++) {
+            threadInfo thInfo;
+            thInfo.isRunning = true;
+            m_thds.push_back(thInfo);
+        }
+        for (auto &ele:m_thds) {
+            ele.thd = std::make_shared<std::thread>([&]() -> void {
+                std::shared_ptr<PACKET> sp_task(nullptr);
+                int status = 0;
+                while (ele.isRunning) {
+                    status = get_task(sp_task, 200);
+                    if (status == PROCESSOR_SUCCESS) {
+                        doFunc(sp_task);
+                        if (m_task_function != nullptr) {
+                            m_task_function(sp_task);
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    int endThreads() {
+        for (auto &ele:m_thds) {
+            ele.isRunning = false;
+            ele.thd->join();
+        }
+    }
+
+    int put_task(std::shared_ptr<PACKET> &sp_task, int *p_new_size = nullptr) {
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+        int cur_size = static_cast<int>(m_taskList.size());
+        if (cur_size >= m_task_max_count) {
+            if (p_new_size != nullptr) {
+                *p_new_size = cur_size;
+            }
+            return PROCESSOR_QUEUE_FULL;
+        }
+
+        m_taskList.emplace_back(sp_task);
+        m_task_semphore.signal();
+
+        if (p_new_size != nullptr) {
+            *p_new_size = cur_size + 1;
+        }
+
+        return PROCESSOR_SUCCESS;
+    }
+
+    int get_task(std::shared_ptr<PACKET> &sp_task, const int ms = (-1), int *p_new_size = nullptr) {
+        if (m_task_semphore.wait(ms) != SEMPHORE_SUCCESS) {
+            return PROCESSOR_TIME_OUT;
+        }
+
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+        /*
+        * 鍏冪礌鍏ラ槦鏃朵俊鍙蜂笌鍏冪礌鏄�1瀵�1鍏崇郴锛岀敱浜庡彲浠ヤ竴娆″彇鍏ㄩ儴闃熷垪鍏冪礌锛�
+        * 鎵�浠ュ彲鑳藉瓨鍦ㄧ瓑寰呬俊鍙锋垚鍔熶絾闃熷垪涓凡鏃犲厓绱犵殑鎯呭喌锛屾晠鍦ㄦ鍒ゆ柇
+        */
+        if (m_taskList.empty()) {
+            if (p_new_size != nullptr) {
+                *p_new_size = 0;
+            }
+            return PROCESSOR_QUEUE_EMPTY;
+        }
+
+        sp_task = std::move(m_taskList.front());
+        m_taskList.pop_front();
+
+        if (p_new_size != nullptr) {
+            *p_new_size = static_cast<int>(m_taskList.size());
+        }
+
+        return PROCESSOR_SUCCESS;
+    }
+
+    int get_taskListSize() {
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+        return m_taskList.size();
+    }
+
+    virtual void doFunc(std::shared_ptr<PACKET> spPacket) {}
+
+private:
+    std::vector<threadInfo> m_thds;
+    std::mutex m_task_lock;
+    Semphore m_task_semphore;
+    volatile int m_task_max_count = 1024;
+    std::list<std::shared_ptr<PACKET>> m_taskList;
+    TASK_FUNCTION m_task_function = nullptr;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/CMakeLists.txt b/QiaoJiaSystem/VideoServer/CMakeLists.txt
new file mode 100644
index 0000000..f7cd8a7
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/CMakeLists.txt
@@ -0,0 +1,50 @@
+cmake_minimum_required(VERSION 3.5)
+project(QiaoJia)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_compile_options(-fPIC)
+
+SET(LIBS
+    pthread
+    Qt5Core
+    Qt5Sql
+    )
+include_directories(
+    /usr/include/x86_64-linux-gnu/qt5
+    /usr/include/x86_64-linux-gnu/qt5/QtCore/
+    /usr/include/x86_64-linux-gnu/qt5/QtSql/
+
+    ../../BasicPlatForm/
+    ./QiaoJia/DB
+    ./QiaoJia/dispatchTool
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    )
+
+add_executable(${PROJECT_NAME}
+    ./QiaoJia/main.cpp
+
+    ./QiaoJia/DB/LDBTool.cpp
+
+    ./QiaoJia/dispatchTool/loadManage.cpp
+    ./QiaoJia/dispatchTool/cutManage.cpp
+    ./QiaoJia/dispatchTool/sdkHdlManage.cpp
+
+    #绾跨▼姹�
+    ./QiaoJia/myThread.cpp
+    ./QiaoJia/myThread.h
+    ./QiaoJia/mySem.hpp
+
+    ./QiaoJia/dbtest.h
+
+    )
+
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+)
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri
new file mode 100644
index 0000000..5e0bce6
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DB.pri
@@ -0,0 +1,22 @@
+INCLUDEPATH += $$PWD
+DEPENDPATH += $$PWD
+
+INCLUDEPATH += \
+    $$PWD/../../BasicPlatForm \
+
+SOURCES += \
+    $$PWD/LDBTool.cpp \
+    $$PWD/../dispatchTool/loadManage.cpp \
+    $$PWD/../dispatchTool/cutManage.cpp \
+    $$PWD/../dispatchTool/sdkHdlManage.cpp
+
+HEADERS  += \
+    $$PWD/LDBTool.h \
+    $$PWD/DBStruct.h \
+    $$PWD/../dispatchTool/loadManage.h \
+    $$PWD/../dispatchTool/cutManage.h \
+    $$PWD/../dispatchTool/sdkHdlManage.h
+
+
+
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
new file mode 100644
index 0000000..5de036a
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
@@ -0,0 +1,324 @@
+#ifndef DBCONNECTSTRUCT
+#define DBCONNECTSTRUCT
+
+//#include <vector>
+//#include <QImage>
+#include <QString>
+#include <QDateTime>
+#include <QVector>
+struct Record_Storage_Dev
+{
+    Record_Storage_Dev()
+    {
+        n_id = 0;
+        str_storage_dev_id = "";
+        str_dev_name = "";
+        n_total_chn = 0;
+        str_all_chn_num = "";
+        str_addr = "";
+        str_longitude = "";
+        str_latitude = "";
+        str_ip = "";
+        n_port = 0;
+        str_username = "";
+        str_password = "";
+        tim_start_time = QDateTime();
+        n_duration = 1;
+        str_brand = "";
+        str_reserved = "";
+    }
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    QString str_dev_name;//璁惧鍚嶇О
+    int n_total_chn;//璇ヨ澶囩殑鎬诲彲鐢ㄩ�氶亾
+    QString str_all_chn_num;//姣忎釜閫氶亾鐨勯�氶亾鍙�
+    QString str_addr;//璁惧鍦板潃鎻忚堪
+    QString str_longitude;//璁惧鍦板潃缁忓害
+    QString str_latitude;//璁惧鍦板潃缁村害
+    QString str_ip;//ip鍦板潃
+    int n_port;//ip绔彛
+    QString str_username;//璁惧鐨勭敤鎴峰悕
+    QString str_password;//璁惧鐨勫瘑鐮�
+    QDateTime tim_start_time;//寮�濮嬩笅杞界殑鏂囦欢鐨勬椂闂�
+    int n_duration;//姣忔涓嬭浇鐨勬椂闂撮暱搴︼紝鍗曚綅锛氬皬鏃�
+    QString str_brand;//鍝佺墝
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Dev
+{
+    Record_Cam_Dev()
+    {
+        n_id = 0;
+        str_name = "";
+        str_addr = "";
+        str_longitude = "";
+        str_latitude = "";
+        str_cam_dev_id = "";
+        str_ip = "";
+        n_port = 0;
+        str_username = "";
+        str_password = "";
+        str_brand = "";
+        str_reserved = "";
+    }
+
+    int n_id;//鑷id
+    QString str_cam_dev_id;//鎽勫儚鏈篿d
+    QString str_name;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍚嶇О
+    QString str_addr;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃鎻忚堪
+    QString str_longitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁忓害
+    QString str_latitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁村害
+    QString str_ip;//鎽勫儚鏈篿p
+    int n_port;//鎽勫儚鏈簆ort
+    QString str_username;//鎽勫儚鏈虹敤鎴峰悕
+    QString str_password;//鎽勫儚鏈哄瘑鐮�
+    QString str_brand;//鎽勫儚鏈哄搧鐗�
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Chn
+{
+
+    Record_Cam_Chn()
+    {
+        n_id = 0;
+        str_storage_dev_id = "";
+        n_chn = 0;
+        str_name = "";
+        str_addr = "";
+        str_longitude = "";
+        str_latitude = "";
+        tim_do_time = QDateTime();
+        tim_update_time = QDateTime();
+//        str_cam_dev_id = "";
+//        str_ip = "";
+//        n_port = 0;
+//        str_username = "";
+//        str_password = "";
+//        str_brand = "";
+        str_reserved = "";
+    }
+
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    int n_chn;//閫氶亾鍙�
+    QString str_name;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍚嶇О
+    QString str_addr;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃鎻忚堪
+    QString str_longitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁忓害
+    QString str_latitude;//閫氶亾瀵瑰簲鐨勬憚鍍忔満鍦板潃缁村害
+    QDateTime tim_do_time;//鍗冲皢涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+    QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+//    QString str_cam_dev_id;//鎽勫儚鏈篿d
+//    QString str_ip;//鎽勫儚鏈篿p
+//    int n_port;//鎽勫儚鏈簆ort
+//    QString str_username;//鎽勫儚鏈虹敤鎴峰悕
+//    QString str_password;//鎽勫儚鏈哄瘑鐮�
+//    QString str_brand;//鎽勫儚鏈哄搧鐗�
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Load_File_info
+{
+
+//    Record_Load_File_info()
+//    {
+//        n_id = 0;
+//        str_storage_dev_id = "";
+//        n_chn = 0;
+//        tim_do_time = QDateTime();
+//        b_finish_flag = 0;
+//        str_load_file_path = "";
+//        tim_update_time = QDateTime();
+//        str_reserved = "";
+//    }
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    int n_chn;//閫氶亾鍙�
+    QDateTime tim_do_time;//姝e湪涓嬭浇鐨勬枃浠剁殑寮�濮嬫椂闂�
+    int b_finish_flag;//涓嬭浇瀹屾垚鏍囧織
+    QString str_load_file_path;//涓嬭浇鏂囦欢淇濆瓨璺緞
+    QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Cut_Video_info
+{
+
+//    Record_Cut_Video_info()
+//    {
+//        n_id = 0;
+//        str_storage_dev_id = "";
+//        n_chn = 0;
+//        str_src_path = "";
+//        str_dst_path = "";
+//        n_total = 0;
+//        b_finish_flag = 0;
+//        tim_update_time = QDateTime();
+//        str_reserved = "";
+//    }
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    int n_chn;//閫氶亾鍙�
+    QString str_src_path;//涓嬭浇鏂囦欢淇濆瓨璺緞
+    QString str_dst_path;//瑁佸壀瀹岀殑鏂囦欢淇濆瓨璺緞
+    int n_total;//瑁佸壀鍚庣殑瑙嗛鎬绘暟
+    int b_finish_flag;//涓嬭浇瀹屾垚鏍囧織
+    QDateTime tim_update_time;//璁板綍鏇存柊鏃堕棿
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Sdk_Hdl_info
+{
+
+//    Record_Sdk_Hdl_info()
+//    {
+//        n_id = 0;
+//        str_storage_dev_id = "";
+//        n_chn = 0;
+//        str_src_path = "";
+//        n_total = 0;
+//        n_pos = 0;
+//        str_reserved = "";
+//    }
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    int n_chn;//閫氶亾鍙�
+    QString str_src_path;//瑁佸壀鍚�,寰卻dk澶勭悊鐨勬枃浠惰矾寰�
+    int n_total;//瑁佸壀鍚庣殑瑙嗛鎬绘暟
+    int n_pos;//澶勭悊瀹岀殑鏂囦欢鐨勫簭鍙�
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Chn_Sdk
+{
+
+    Record_Chn_Sdk()
+    {
+        n_id = 0;
+        str_storage_dev_id = "";
+        n_chn = 0;
+        str_sdks = "";
+        str_det_thr = "";
+        str_cmp_thr = "";
+//        str_cam_dev_id = "";
+        str_reserved = "";
+    }
+
+    int n_id;//鑷id
+    QString str_storage_dev_id;//纾佺洏闃靛垪id
+    int n_chn;//閫氶亾鍙�
+    QString str_sdks;//璇ラ�氶亾瑕佷娇鐢ㄧ殑sdk绉嶇被锛屼汉鑴�-1,yolo-2,杞︾墝-3,鍏朵粬-4
+    QString str_det_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑妫�娴嬮槇鍊硷紝浜鸿劯闃堝��-1,yolo闃堝��-2,杞︾墝闃堝��-3,鍏朵粬闃堝��-4
+    QString str_cmp_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑姣斿闃堝�硷紝浜鸿劯闃堝��-1,yolo闃堝��-2,杞︾墝闃堝��-3,鍏朵粬闃堝��-4
+//    QString str_cam_dev_id;//鎽勫儚鏈篿d
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Cam_Sdk
+{
+
+    Record_Cam_Sdk()
+    {
+        n_id = 0;
+        str_cam_dev_id = "";
+        str_sdks = "";
+        str_det_thr = "";
+        str_cmp_thr = "";
+        str_reserved = "";
+    }
+
+    int n_id;//鑷id
+    QString str_cam_dev_id;//鎽勫儚鏈篿d
+    QString str_sdks;//璇ラ�氶亾瑕佷娇鐢ㄧ殑sdk绉嶇被锛屼汉鑴�-1,杞︾墝-2,yolo-3,鍏朵粬-4
+    QString str_det_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑妫�娴嬮槇鍊硷紝浜鸿劯闃堝��-1,杞︾墝闃堝��-2,yolo闃堝��-3,鍏朵粬闃堝��-4
+    QString str_cmp_thr;//璇ラ�氶亾瑕佷娇鐢ㄧ殑姣斿闃堝�硷紝浜鸿劯闃堝��-1,杞︾墝闃堝��-2,yolo闃堝��-3,鍏朵粬闃堝��-4
+    QString str_reserved;//棰勭暀
+};
+
+struct Record_Config
+{
+    Record_Config()
+    {
+        str_alarm_ip = "";
+        n_alarm_port = 0;
+        str_web_pic_ip = "";
+        n_web_pic_port = 0;
+        str_es_pic_ip = "";
+        n_es_pic_port = 0;
+        n_cut_max_duration = 0;
+        n_dev_type = 0;
+        str_reserved = "";
+        dev_id = "";
+        dev_name= "";
+    }
+
+    QString str_alarm_ip;//鎶ヨ鏈嶅姟鍣╥p
+    int n_alarm_port;//鎶ヨ鏈嶅姟鍣ㄧ鍙�
+    QString str_web_pic_ip;//web绔浘鐗囨湇鍔″櫒ip
+    int n_web_pic_port;//web绔浘鐗囨湇鍔″櫒绔彛
+    QString str_es_pic_ip;//ES绔浘鐗囨湇鍔″櫒ip
+    int n_es_pic_port;//ES绔浘鐗囨湇鍔″櫒绔彛
+    int n_cut_max_duration;//瑁佸壀瑙嗛鏈�闀�
+    int n_dev_type;//0:no dev; 1:storage; 2:camera
+    QString str_reserved;//棰勭暀
+    QString dev_id;
+    QString dev_name;
+};
+
+struct LActRuleWeekRecord
+{
+    LActRuleWeekRecord()
+    {
+        m_nCamId=0;
+        m_nType = 0;
+        m_strBegin = "";
+        m_strEnd = "";
+    }
+    int m_nCamId;
+    int m_nType; //鍛ㄥ嚑
+    QString m_strBegin;
+    QString m_strEnd;
+};
+struct ActRule
+{
+    ActRule()
+    {
+        nCamId = 0;
+        strAreas = "";
+        strLine = "";
+        strImageUrl = "";
+        nTriggertolerance = 0;
+        nTriggerDelay=0;
+        fSensitivity = 0.5;
+        nAlarmPeopleNum = 0;
+        strExAreas="";
+        strLine="";
+    }
+    int nCamId;
+    QString strAreas; //鐩戞祴鍖哄煙
+    QString strExAreas;
+    QString strLine; //鍒嗗壊绾�
+    QString strExLine;
+    QString strImageUrl; //鍒掑尯鍩熺殑鍥剧墖璺緞
+    int nTriggertolerance;
+    int nTriggerDelay; //寤惰繜鏃堕棿锛堢锛�
+    float fSensitivity;//鐏垫晱搴�
+    int nAlarmPeopleNum; //鎶ヨ浜烘暟锛堜汉鍛樻嫢鎸わ級
+};
+struct RuleCfg
+{
+
+    QVector<LActRuleWeekRecord> weekRuleVec;
+    ActRule actRule;
+    std::string strCamId;
+    std::string strRtsp;
+    std::string strAdrr;
+
+};
+#endif // DBCONNECTSTRUCT
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
new file mode 100644
index 0000000..f2e61a4
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
@@ -0,0 +1,2709 @@
+#include "LDBTool.h"
+#include <basic/debug/Debug.h>
+//#include <QMessageBox>
+#include <QMutexLocker>
+#include <QDebug>
+#include <basic/util/app/AppConfig.h>
+
+LDBTool::LDBTool() {
+    connectDB();
+}
+
+LDBTool::~LDBTool() {
+    delete m_pModel;
+}
+
+void LDBTool::connectDB() {
+    m_db = QSqlDatabase::addDatabase("QSQLITE");
+    m_db.setDatabaseName("./config.db");
+
+    if (m_db.open()) {
+        m_pModel = new QSqlTableModel(NULL, m_db);
+        //        qDebug("Database opened successfully");
+        DBG("Database opened successfully");
+    } else {
+        qCritical("Can't open database: %s(%s)",
+                  m_db.lastError().text().toLocal8Bit().data(),
+                  qt_error_string().toLocal8Bit().data());
+    }
+}
+
+bool LDBTool::insertDeviceTable(Record_Storage_Dev deviceRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    //    rec.setValue("id",deviceRec.n_id);
+    rec.setValue("storage_dev_id", deviceRec.str_storage_dev_id);
+    rec.setValue("dev_name", deviceRec.str_dev_name);
+    rec.setValue("total_chn", deviceRec.n_total_chn);
+    rec.setValue("all_chn_num", deviceRec.str_all_chn_num);
+    rec.setValue("addr", deviceRec.str_addr);
+    rec.setValue("longitude", deviceRec.str_longitude);
+    rec.setValue("latitude", deviceRec.str_latitude);
+    rec.setValue("ip", deviceRec.str_ip);
+    rec.setValue("port", deviceRec.n_port);
+    rec.setValue("username", deviceRec.str_username);
+    rec.setValue("password", deviceRec.str_password);
+    rec.setValue("start_time", deviceRec.tim_start_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("duration", deviceRec.n_duration);
+    rec.setValue("brand", deviceRec.str_brand);
+    rec.setValue("reserved", deviceRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+
+bool LDBTool::deleteDeviceTable(QString str_storage_dev_id) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteDeviceTableAndChnAndSdk(QString str_storage_dev_id) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_dev(NULL, m_db);
+    pModel_dev.setTable("storage_dev");
+    pModel_dev.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+    pModel_dev.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_dev.select();
+
+    QSqlTableModel pModel_chn(NULL, m_db);
+    pModel_chn.setTable("cam_chn");
+    pModel_chn.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+    pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_chn.select();
+
+    QSqlTableModel pModel_sdk(NULL, m_db);
+    pModel_sdk.setTable("chn_sdk");
+    pModel_sdk.setFilter(QObject::tr("storage_dev_id = '%1'").arg(str_storage_dev_id));
+    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_sdk.select();
+
+    int rowCount_dev = pModel_dev.rowCount();
+
+    if (rowCount_dev >= 1) {
+        for (int i = 0; i < rowCount_dev; i++) {
+            pModel_dev.removeRow(i);//TODO
+        }
+    }
+
+    int rowCount_chn = pModel_chn.rowCount();
+
+    if (rowCount_chn >= 1) {
+        for (int i = 0; i < rowCount_chn; i++) {
+            pModel_chn.removeRow(i);//TODO
+        }
+    }
+
+    int rowCount_sdk = pModel_sdk.rowCount();
+
+    if (rowCount_sdk >= 1) {
+        for (int i = 0; i < rowCount_sdk; i++) {
+            pModel_sdk.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_dev.submitAll() && \
+        pModel_chn.submitAll() && \
+        pModel_sdk.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database pModel_dev or pModel_chn or pModel_sdk Error: " \
+ << pModel_dev.lastError().text().toStdString() \
+ << pModel_chn.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateDeviceTable(Record_Storage_Dev deviceRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(deviceRec.str_storage_dev_id));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", deviceRec.str_storage_dev_id);
+    rec.setValue("dev_name", deviceRec.str_dev_name);
+    rec.setValue("total_chn", deviceRec.n_total_chn);
+    rec.setValue("all_chn_num", deviceRec.str_all_chn_num);
+    rec.setValue("addr", deviceRec.str_addr);
+    rec.setValue("longitude", deviceRec.str_longitude);
+    rec.setValue("latitude", deviceRec.str_latitude);
+    rec.setValue("ip", deviceRec.str_ip);
+    rec.setValue("port", deviceRec.n_port);
+    rec.setValue("username", deviceRec.str_username);
+    rec.setValue("password", deviceRec.str_password);
+    rec.setValue("start_time", deviceRec.tim_start_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("duration", deviceRec.n_duration);
+    rec.setValue("brand", deviceRec.str_brand);
+    rec.setValue("reserved", deviceRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+int LDBTool::searchDeviceNumber(void) {
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    return rowCount;
+}
+
+std::list<Record_Storage_Dev> LDBTool::searchDeviceTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Storage_Dev> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Storage_Dev lDeviceRec;
+            QSqlRecord rec = pModel.record(i);
+
+            lDeviceRec.n_id = rec.value("id").toInt();
+            lDeviceRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lDeviceRec.str_dev_name = rec.value("dev_name").toString();
+            lDeviceRec.n_total_chn = rec.value("total_chn").toInt();
+            lDeviceRec.str_all_chn_num = rec.value("all_chn_num").toString();
+            lDeviceRec.str_addr = rec.value("addr").toString();
+            lDeviceRec.str_longitude = rec.value("longitude").toString();
+            lDeviceRec.str_latitude = rec.value("latitude").toString();
+            lDeviceRec.str_ip = rec.value("ip").toString();
+            lDeviceRec.n_port = rec.value("port").toInt();
+            lDeviceRec.str_username = rec.value("username").toString();
+            lDeviceRec.str_password = rec.value("password").toString();
+            lDeviceRec.tim_start_time = QDateTime::fromString(rec.value("start_time").toString(),
+                                                              "yyyy-MM-dd hh:mm:ss");
+            lDeviceRec.n_duration = rec.value("duration").toInt();
+            lDeviceRec.str_brand = rec.value("brand").toString();
+            lDeviceRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lDeviceRec);
+        }
+    }
+
+    return lst;
+
+}
+
+Record_Storage_Dev LDBTool::searchDeviceTableByDeviceId(QString strDeviceId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Storage_Dev lDeviceRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lDeviceRec.n_id = rec.value("id").toInt();
+        lDeviceRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lDeviceRec.str_dev_name = rec.value("dev_name").toString();
+        lDeviceRec.n_total_chn = rec.value("total_chn").toInt();
+        lDeviceRec.str_all_chn_num = rec.value("all_chn_num").toString();
+        lDeviceRec.str_addr = rec.value("addr").toString();
+        lDeviceRec.str_longitude = rec.value("longitude").toString();
+        lDeviceRec.str_latitude = rec.value("latitude").toString();
+        lDeviceRec.str_ip = rec.value("ip").toString();
+        lDeviceRec.n_port = rec.value("port").toInt();
+        lDeviceRec.str_username = rec.value("username").toString();
+        lDeviceRec.str_password = rec.value("password").toString();
+        lDeviceRec.tim_start_time = QDateTime::fromString(rec.value("start_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lDeviceRec.n_duration = rec.value("duration").toInt();
+        lDeviceRec.str_brand = rec.value("brand").toString();
+        lDeviceRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lDeviceRec;
+}
+
+int LDBTool::searchDurationByDeviceId(QString strDeviceId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    int nDuration = 1;//娌℃煡鍒板氨榛樿鏄�1灏忔椂
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("storage_dev");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        nDuration = rec.value("duration").toInt();
+    }
+
+    return nDuration;
+}
+
+//cam_dev==========================
+///
+/// \brief LDBTool::insertCamDevTable
+/// \param channelRec
+/// \return
+//=============================
+bool LDBTool::insertCamDevTable(Record_Cam_Dev channelRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_dev");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+    rec.setValue("name", channelRec.str_name);
+    rec.setValue("addr", channelRec.str_addr);
+    rec.setValue("longitude", channelRec.str_longitude);
+    rec.setValue("latitude", channelRec.str_latitude);
+    rec.setValue("ip", channelRec.str_ip);
+    rec.setValue("port", channelRec.n_port);
+    rec.setValue("username", channelRec.str_username);
+    rec.setValue("password", channelRec.str_password);
+    rec.setValue("brand", channelRec.str_brand);
+    rec.setValue("reserved", channelRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteCamDevandSdkByCamID(QString strCamId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_cam(NULL, m_db);
+    pModel_cam.setTable("cam_dev");
+    pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+    pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_cam.select();
+
+    QSqlTableModel pModel_sdk(NULL, m_db);
+    pModel_sdk.setTable("cam_sdk");
+    pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_sdk.select();
+
+    int rowCount_cam = pModel_cam.rowCount();
+    if (rowCount_cam >= 1) {
+        for (int i = 0; i < rowCount_cam; i++) {
+            pModel_cam.removeRow(i);//TODO
+        }
+    }
+
+    int rowCount_sdk = pModel_sdk.rowCount();
+    if (rowCount_sdk >= 1) {
+        for (int i = 0; i < rowCount_sdk; i++) {
+            pModel_sdk.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_cam.submitAll() && \
+        pModel_sdk.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateCamDevTable(Record_Cam_Dev camRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_dev");
+    pModel.setFilter(
+        QObject::tr("cam_dev_id = '%1'").arg(camRec.str_cam_dev_id));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("cam_dev_id", camRec.str_cam_dev_id);
+    rec.setValue("name", camRec.str_name);
+    rec.setValue("addr", camRec.str_addr);
+    rec.setValue("longitude", camRec.str_longitude);
+    rec.setValue("latitude", camRec.str_latitude);
+    rec.setValue("ip", camRec.str_ip);
+    rec.setValue("port", camRec.n_port);
+    rec.setValue("username", camRec.str_username);
+    rec.setValue("password", camRec.str_password);
+    rec.setValue("brand", camRec.str_brand);
+    rec.setValue("reserved", camRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+int LDBTool::searchCamDevNumber(void) {
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_dev");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    return rowCount;
+}
+
+//鏌ヨ鎽勫儚鏈哄垪琛�
+std::list<Record_Cam_Dev> LDBTool::searchCamDevTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Cam_Dev> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_dev");
+    pModel.setFilter(QObject::tr("cam_dev_id != '' and cam_dev_id is not null"));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Cam_Dev lChannelRec;
+            QSqlRecord rec = pModel.record(i);
+            lChannelRec.n_id = rec.value("id").toInt();
+            lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+            lChannelRec.str_name = rec.value("name").toString();
+            lChannelRec.str_addr = rec.value("addr").toString();
+            lChannelRec.str_longitude = rec.value("longitude").toString();
+            lChannelRec.str_latitude = rec.value("latitude").toString();
+            lChannelRec.str_ip = rec.value("ip").toString();
+            lChannelRec.n_port = rec.value("port").toInt();
+            lChannelRec.str_username = rec.value("username").toString();
+            lChannelRec.str_password = rec.value("password").toString();
+            lChannelRec.str_brand = rec.value("brand").toString();
+            lChannelRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lChannelRec);
+        }
+    }
+
+    return lst;
+}
+
+
+//chn==========================
+///
+/// \brief LDBTool::insertChannelTable
+/// \param channelRec
+/// \return
+//=============================
+bool LDBTool::insertChannelTable(Record_Cam_Chn channelRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+    rec.setValue("chn", channelRec.n_chn);
+    rec.setValue("name", channelRec.str_name);
+    rec.setValue("addr", channelRec.str_addr);
+    rec.setValue("longitude", channelRec.str_longitude);
+    rec.setValue("latitude", channelRec.str_latitude);
+    rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+//    rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+//    rec.setValue("ip", channelRec.str_ip);
+//    rec.setValue("port", channelRec.n_port);
+//    rec.setValue("username", channelRec.str_username);
+//    rec.setValue("password", channelRec.str_password);
+//    rec.setValue("brand", channelRec.str_brand);
+    rec.setValue("reserved", channelRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteChannelTable(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteChannelTableByCamID(QString strCamId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_cam(NULL, m_db);
+    pModel_cam.setTable("cam_chn");
+    pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+    pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_cam.select();
+
+    QSqlTableModel pModel_sdk(NULL, m_db);
+    pModel_sdk.setTable("chn_sdk");
+    pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_sdk.select();
+
+    int rowCount_cam = pModel_cam.rowCount();
+    if (rowCount_cam >= 1) {
+        for (int i = 0; i < rowCount_cam; i++) {
+            pModel_cam.removeRow(i);//TODO
+        }
+    }
+
+    int rowCount_sdk = pModel_sdk.rowCount();
+    if (rowCount_sdk >= 1) {
+        for (int i = 0; i < rowCount_sdk; i++) {
+            pModel_sdk.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_cam.submitAll() && \
+        pModel_sdk.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateChannelTable(Record_Cam_Chn channelRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(
+        QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+    rec.setValue("chn", channelRec.n_chn);
+    rec.setValue("name", channelRec.str_name);
+    rec.setValue("addr", channelRec.str_addr);
+    rec.setValue("longitude", channelRec.str_longitude);
+    rec.setValue("latitude", channelRec.str_latitude);
+    rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+//    rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+//    rec.setValue("ip", channelRec.str_ip);
+//    rec.setValue("port", channelRec.n_port);
+//    rec.setValue("username", channelRec.str_username);
+//    rec.setValue("password", channelRec.str_password);
+//    rec.setValue("brand", channelRec.str_brand);
+    rec.setValue("reserved", channelRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Cam_Chn> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Cam_Chn lChannelRec;
+            QSqlRecord rec = pModel.record(i);
+            lChannelRec.n_id = rec.value("id").toInt();
+            lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lChannelRec.n_chn = rec.value("chn").toInt();
+            lChannelRec.str_name = rec.value("name").toString();
+            lChannelRec.str_addr = rec.value("addr").toString();
+            lChannelRec.str_longitude = rec.value("longitude").toString();
+            lChannelRec.str_latitude = rec.value("latitude").toString();
+            lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+            lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+                                                                "yyyy-MM-dd hh:mm:ss");
+//            lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//            lChannelRec.str_ip = rec.value("ip").toString();
+//            lChannelRec.n_port = rec.value("port").toInt();
+//            lChannelRec.str_username = rec.value("username").toString();
+//            lChannelRec.str_password = rec.value("password").toString();
+//            lChannelRec.str_brand = rec.value("brand").toString();
+            lChannelRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lChannelRec);
+        }
+    }
+
+    return lst;
+}
+
+//鏌ヨtongdao鎽勫儚鏈哄垪琛�
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableCamType(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Cam_Chn> lst;
+    QSqlTableModel pModel(NULL, m_db);
+
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr("cam_dev_id != '' and cam_dev_id is not null"));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Cam_Chn lChannelRec;
+            QSqlRecord rec = pModel.record(i);
+            lChannelRec.n_id = rec.value("id").toInt();
+            lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lChannelRec.n_chn = rec.value("chn").toInt();
+            lChannelRec.str_name = rec.value("name").toString();
+            lChannelRec.str_addr = rec.value("addr").toString();
+            lChannelRec.str_longitude = rec.value("longitude").toString();
+            lChannelRec.str_latitude = rec.value("latitude").toString();
+            lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+            lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+                                                                "yyyy-MM-dd hh:mm:ss");
+//            lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//            lChannelRec.str_ip = rec.value("ip").toString();
+//            lChannelRec.n_port = rec.value("port").toInt();
+//            lChannelRec.str_username = rec.value("username").toString();
+//            lChannelRec.str_password = rec.value("password").toString();
+//            lChannelRec.str_brand = rec.value("brand").toString();
+            lChannelRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lChannelRec);
+        }
+    }
+
+    return lst;
+}
+
+std::list<Record_Cam_Chn> LDBTool::searchChannelTableByDevlId(QString strDeviceId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Cam_Chn> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr(" storage_dev_id = '%1'").arg(strDeviceId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Cam_Chn lChannelRec;
+            QSqlRecord rec = pModel.record(i);
+            lChannelRec.n_id = rec.value("id").toInt();
+            lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lChannelRec.n_chn = rec.value("chn").toInt();
+            lChannelRec.str_name = rec.value("name").toString();
+            lChannelRec.str_addr = rec.value("addr").toString();
+            lChannelRec.str_longitude = rec.value("longitude").toString();
+            lChannelRec.str_latitude = rec.value("latitude").toString();
+            lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+            lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+                                                                "yyyy-MM-dd hh:mm:ss");
+//            lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//            lChannelRec.str_ip = rec.value("ip").toString();
+//            lChannelRec.n_port = rec.value("port").toInt();
+//            lChannelRec.str_username = rec.value("username").toString();
+//            lChannelRec.str_password = rec.value("password").toString();
+//            lChannelRec.str_brand = rec.value("brand").toString();
+            lChannelRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lChannelRec);
+        }
+    }
+
+    return lst;
+}
+
+Record_Cam_Chn LDBTool::searchChannelTableByChannelId(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cam_Chn lChannelRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lChannelRec.n_id = rec.value("id").toInt();
+        lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lChannelRec.n_chn = rec.value("chn").toInt();
+        lChannelRec.str_name = rec.value("name").toString();
+        lChannelRec.str_addr = rec.value("addr").toString();
+        lChannelRec.str_longitude = rec.value("longitude").toString();
+        lChannelRec.str_latitude = rec.value("latitude").toString();
+        lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+                                                            "yyyy-MM-dd hh:mm:ss");
+//        lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//        lChannelRec.str_ip = rec.value("ip").toString();
+//        lChannelRec.n_port = rec.value("port").toInt();
+//        lChannelRec.str_username = rec.value("username").toString();
+//        lChannelRec.str_password = rec.value("password").toString();
+//        lChannelRec.str_brand = rec.value("brand").toString();
+        lChannelRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchOldestRecordfromChnTableByUpdateTime(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cam_Chn lChannelRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr(
+        "storage_dev_id != '' and storage_dev_id is not null and chn != 0 and do_time != '' and do_time is not null"));
+    pModel.setSort(8, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lChannelRec.n_id = rec.value("id").toInt();
+        lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lChannelRec.n_chn = rec.value("chn").toInt();
+        lChannelRec.str_name = rec.value("name").toString();
+        lChannelRec.str_addr = rec.value("addr").toString();
+        lChannelRec.str_longitude = rec.value("longitude").toString();
+        lChannelRec.str_latitude = rec.value("latitude").toString();
+        lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+                                                            "yyyy-MM-dd hh:mm:ss");
+//        lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//        lChannelRec.str_ip = rec.value("ip").toString();
+//        lChannelRec.n_port = rec.value("port").toInt();
+//        lChannelRec.str_username = rec.value("username").toString();
+//        lChannelRec.str_password = rec.value("password").toString();
+//        lChannelRec.str_brand = rec.value("brand").toString();
+        lChannelRec.str_reserved = rec.value("reserved").toString();
+
+        rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+        pModel.setRecord(0, rec);//TODO
+        m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+        if (pModel.submitAll()) {
+            m_db.commit();//鎻愪氦
+        } else {
+            m_db.rollback();//鍥炴粴
+            ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        }
+    }
+
+    return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchOldestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cam_Chn lChannelRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId)); //TODO
+    pModel.setSort(7, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lChannelRec.n_id = rec.value("id").toInt();
+        lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lChannelRec.n_chn = rec.value("chn").toInt();
+        lChannelRec.str_name = rec.value("name").toString();
+        lChannelRec.str_addr = rec.value("addr").toString();
+        lChannelRec.str_longitude = rec.value("longitude").toString();
+        lChannelRec.str_latitude = rec.value("latitude").toString();
+        lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+                                                            "yyyy-MM-dd hh:mm:ss");
+//        lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//        lChannelRec.str_ip = rec.value("ip").toString();
+//        lChannelRec.n_port = rec.value("port").toInt();
+//        lChannelRec.str_username = rec.value("username").toString();
+//        lChannelRec.str_password = rec.value("password").toString();
+//        lChannelRec.str_brand = rec.value("brand").toString();
+        lChannelRec.str_reserved = rec.value("reserved").toString();
+
+        rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+        pModel.setRecord(0, rec);//TODO
+        m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+        if (pModel.submitAll()) {
+            m_db.commit();//鎻愪氦
+        } else {
+            m_db.rollback();//鍥炴粴
+            ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        }
+    }
+
+    return lChannelRec;
+}
+
+Record_Cam_Chn LDBTool::searchNewestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cam_Chn lChannelRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_chn");
+    pModel.setFilter(QObject::tr(" storage_dev_id = '%1' and chn = '%2'").arg(strDeviceId).arg(nChannelId)); //TODO
+    pModel.setSort(7, Qt::DescendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lChannelRec.n_id = rec.value("id").toInt();
+        lChannelRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lChannelRec.n_chn = rec.value("chn").toInt();
+        lChannelRec.str_name = rec.value("name").toString();
+        lChannelRec.str_addr = rec.value("addr").toString();
+        lChannelRec.str_longitude = rec.value("longitude").toString();
+        lChannelRec.str_latitude = rec.value("latitude").toString();
+        lChannelRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lChannelRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), \
+                                                            "yyyy-MM-dd hh:mm:ss");
+//        lChannelRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//        lChannelRec.str_ip = rec.value("ip").toString();
+//        lChannelRec.n_port = rec.value("port").toInt();
+//        lChannelRec.str_username = rec.value("username").toString();
+//        lChannelRec.str_password = rec.value("password").toString();
+//        lChannelRec.str_brand = rec.value("brand").toString();
+        lChannelRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lChannelRec;
+}
+
+///
+/// \brief LDBTool::insertloadFileTable
+/// \param channelRec
+/// \return
+///
+bool LDBTool::insertLoadFileTable(Record_Load_File_info loadfileRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+    rec.setValue("chn", loadfileRec.n_chn);
+    rec.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("finish_flag", loadfileRec.b_finish_flag);
+    rec.setValue("path", loadfileRec.str_load_file_path);
+    rec.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", loadfileRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteLoadFileTable(QString strDeviceId, int nChannelId, QDateTime tim_startTime) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(tim_startTime.toString("yyyy-MM-dd hh:mm:ss")));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteLoadFileTablebyDevID(QString strDeviceId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateLoadFileTable(Record_Load_File_info loadfileRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(loadfileRec.str_storage_dev_id).arg(loadfileRec.n_chn)\
+.arg(loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss")));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+    rec.setValue("chn", loadfileRec.n_chn);
+    rec.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("finish_flag", loadfileRec.b_finish_flag);
+    rec.setValue("path", loadfileRec.str_load_file_path);
+    rec.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", loadfileRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable err ,Database Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+std::list<Record_Load_File_info> LDBTool::searchLoadFileTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Load_File_info> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Load_File_info lRec;
+            QSqlRecord rec = pModel.record(i);
+            if (!rec.value("finish_flag").toBool()) {
+                lRec.n_id = rec.value("id").toInt();
+                lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+                lRec.n_chn = rec.value("chn").toInt();
+                lRec.tim_do_time = rec.value("do_time").toDateTime();
+                lRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+                lRec.b_finish_flag = rec.value("finish_flag").toBool();
+                lRec.str_load_file_path = rec.value("path").toString();
+                lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+                                                             "yyyy-MM-dd hh:mm:ss");
+                lRec.str_reserved = rec.value("reserved").toString();
+                lst.push_back(lRec);
+            }
+        }
+    }
+
+    return lst;
+}
+
+Record_Load_File_info LDBTool::searchOldestRecordfromLoadTableByUpdateTime(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Load_File_info lRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("load_file_info");
+    pModel.setFilter(QObject::tr("finish_flag = 1"));
+    pModel.setSort(6, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lRec.n_id = rec.value("id").toInt();
+        lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lRec.n_chn = rec.value("chn").toInt();
+        lRec.tim_do_time = QDateTime::fromString(rec.value("do_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lRec.b_finish_flag = rec.value("finish_flag").toBool();
+        lRec.str_load_file_path = rec.value("path").toString();
+        lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lRec.str_reserved = rec.value("reserved").toString();
+    } else {
+        ERR("rowCount <=0");
+    }
+
+    return lRec;
+}
+
+///
+/// \brief insertLoadFileTableAndUpdateChannelTable
+/// \param loadfileRec
+/// \param channelRec
+/// \return
+///
+bool LDBTool::insertLoadFileTableAndUpdateChannelTable(Record_Load_File_info loadfileRec,
+                                                       Record_Cam_Chn channelRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_load(NULL, m_db);
+    pModel_load.setTable("load_file_info");
+    pModel_load.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec_load = pModel_load.record();
+    rec_load.setGenerated("id", false);
+    rec_load.setValue("storage_dev_id", loadfileRec.str_storage_dev_id);
+    rec_load.setValue("chn", loadfileRec.n_chn);
+    rec_load.setValue("do_time", loadfileRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec_load.setValue("finish_flag", loadfileRec.b_finish_flag);
+    rec_load.setValue("path", loadfileRec.str_load_file_path);
+    rec_load.setValue("update_time", loadfileRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec_load.setValue("reserved", loadfileRec.str_reserved);
+
+    /////////
+    QSqlTableModel pModel_chn(NULL, m_db);
+    pModel_chn.setTable("cam_chn");
+    pModel_chn.setFilter(
+        QObject::tr("storage_dev_id = '%1' and chn = '%2'").arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+    pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_chn.select();
+
+    QSqlRecord rec_chn = pModel_chn.record(0);
+//    rec_chn.setGenerated("id", false);
+    rec_chn.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+    rec_chn.setValue("chn", channelRec.n_chn);
+    rec_chn.setValue("name", channelRec.str_name);
+    rec_chn.setValue("addr", channelRec.str_addr);
+    rec_chn.setValue("longitude", channelRec.str_longitude);
+    rec_chn.setValue("latitude", channelRec.str_latitude);
+    rec_chn.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec_chn.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec_chn.setValue("reserved", channelRec.str_reserved);
+
+    pModel_load.insertRecord(-1, rec_load);
+
+    int rowCount = pModel_chn.rowCount();
+    if (rowCount == 0) {
+        pModel_chn.insertRecord(-1, rec_chn);
+    } else if (rowCount > 0) {
+        pModel_chn.setRecord(0, rec_chn);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_load.submitAll() && pModel_chn.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable ,pModel_load Error: " << pModel_load.lastError().text().toStdString()
+                                                      << "  pModel_chn  "
+                                                      << pModel_load.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+        //                             QObject::tr("Database Error: %1").arg(pModel_load.lastError().text()),\
+        //                             QObject::tr("Database Error: %1").arg(pModel_chn.lastError().text()));
+        return false;
+    }
+}
+
+///
+/// \brief LDBTool::insertCutVideoTable
+/// \param cutVideoRec
+/// \return
+///
+bool LDBTool::insertCutVideoTable(Record_Cut_Video_info cutVideoRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+    rec.setValue("chn", cutVideoRec.n_chn);
+    rec.setValue("src_path", cutVideoRec.str_src_path);
+    rec.setValue("dst_path", cutVideoRec.str_dst_path);
+    rec.setValue("total", cutVideoRec.n_total);
+    rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+    rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", cutVideoRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteCutVideoTable(QString strDeviceId, int nChannelId, QString strSrcPath) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(strSrcPath));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteCutVideoTablebyDevID(QString strDeviceId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDeviceId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        return false;
+    }
+}
+
+bool LDBTool::updateCutVideoTable(Record_Cut_Video_info cutVideoRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(cutVideoRec.str_storage_dev_id).arg(cutVideoRec.n_chn).arg(cutVideoRec.str_src_path));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+    rec.setValue("chn", cutVideoRec.n_chn);
+    rec.setValue("src_path", cutVideoRec.str_src_path);
+    rec.setValue("dst_path", cutVideoRec.str_dst_path);
+    rec.setValue("total", cutVideoRec.n_total);
+    rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+    rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", cutVideoRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateCutVideoTable(std::string src_path, std::string dst_path, int total) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setFilter(QObject::tr("src_path = '%1'").arg(QString::fromStdString(src_path)));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    /*QSqlRecord rec =  pModel.record();
+    rec.setValue("dst_path",QString::fromStdString(dst_path));
+    rec.setValue("total",total);
+    rec.setValue("finish_flag",1);
+    rec.setValue("update_time",QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));*/
+
+    int rowCount = pModel.rowCount();
+    /*if(rowCount == 0)
+    {
+        pModel.insertRecord(-1,rec);
+    }else */if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        rec.setValue("dst_path", QString::fromStdString(dst_path));
+        rec.setValue("total", total);
+        rec.setValue("finish_flag", 1);
+        rec.setValue("update_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
+
+        pModel.setRecord(0, rec);//TODO
+    } else {
+        return false;
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+std::list<Record_Cut_Video_info> LDBTool::searchCutVideoTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Cut_Video_info> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Cut_Video_info lRec;
+            QSqlRecord rec = pModel.record(i);
+            if (!rec.value("finish_flag").toBool()) {
+                lRec.n_id = rec.value("id").toInt();
+                lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+                lRec.n_chn = rec.value("chn").toInt();
+                lRec.str_src_path = rec.value("src_path").toString();
+                lRec.str_dst_path = rec.value("dst_path").toString();
+                lRec.n_total = rec.value("total").toInt();
+                lRec.b_finish_flag = rec.value("finish_flag").toBool();
+                lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(),
+                                                             "yyyy-MM-dd hh:mm:ss");
+                lRec.str_reserved = rec.value("reserved").toString();
+                lst.push_back(lRec);
+            }
+        }
+    }
+
+    return lst;
+}
+
+Record_Cut_Video_info LDBTool::searchOldestRecordfromCutTableByUpdateTime(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cut_Video_info lRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cut_video_info");
+    pModel.setFilter(QObject::tr("finish_flag = 1"));
+    pModel.setSort(7, Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lRec.n_id = rec.value("id").toInt();
+        lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lRec.n_chn = rec.value("chn").toInt();
+        lRec.str_src_path = rec.value("src_path").toString();
+        lRec.str_dst_path = rec.value("dst_path").toString();
+        lRec.n_total = rec.value("total").toInt();
+        lRec.b_finish_flag = rec.value("finish_flag").toBool();
+        lRec.tim_update_time = QDateTime::fromString(rec.value("update_time").toString(), "yyyy-MM-dd hh:mm:ss");
+        lRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lRec;
+}
+
+///
+/// \brief insertCutVideoTableandDeleteLoadFileTable
+/// \param cutVideoRec
+/// \param strDeviceId
+/// \param nChannelId
+/// \param tim_loadStartTime
+/// \return
+///
+bool LDBTool::insertCutVideoTableAndDeleteLoadFileTable(Record_Cut_Video_info cutVideoRec,
+                                                        QString strDeviceId, int nChannelId,
+                                                        QDateTime tim_loadStartTime) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_cut(NULL, m_db);
+    pModel_cut.setTable("cut_video_info");
+    pModel_cut.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel_cut.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", cutVideoRec.str_storage_dev_id);
+    rec.setValue("chn", cutVideoRec.n_chn);
+    rec.setValue("src_path", cutVideoRec.str_src_path);
+    rec.setValue("dst_path", cutVideoRec.str_dst_path);
+    rec.setValue("total", cutVideoRec.n_total);
+    rec.setValue("finish_flag", cutVideoRec.b_finish_flag);
+    rec.setValue("update_time", cutVideoRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", cutVideoRec.str_reserved);
+
+    QSqlTableModel pModel_load(NULL, m_db);
+    pModel_load.setTable("load_file_info");
+    pModel_load.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and do_time = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(tim_loadStartTime.toString("yyyy-MM-dd hh:mm:ss")));
+    pModel_load.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_load.select();
+
+    pModel_cut.insertRecord(-1, rec);
+
+    int rowCount = pModel_load.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel_load.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_cut.submitAll() && pModel_load.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_cut Error: " << pModel_cut.lastError().text().toStdString()
+                                                     << "  " << pModel_load.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+        //                             QObject::tr("Database Error: %1").arg(pModel_cut.lastError().text()),\
+        //                             QObject::tr("Database Error: %1").arg(pModel_load.lastError().text()));
+        return false;
+    }
+}
+
+///
+/// \brief LDBTool::insertSdkHdlTable
+/// \param sdkHdlRec
+/// \return
+///
+bool LDBTool::insertSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+    rec.setValue("chn", sdkHdlRec.n_chn);
+    rec.setValue("src_path", sdkHdlRec.str_src_path);
+    rec.setValue("total", sdkHdlRec.n_total);
+    rec.setValue("pos", sdkHdlRec.n_pos);
+    rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteSdkHdlTable(QString strSrcPath) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setFilter(QObject::tr("src_path = '%1'").arg(strSrcPath));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteSdkHdlTablebyDevID(QString strDevId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1'").arg(strDevId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(sdkHdlRec.str_storage_dev_id).arg(sdkHdlRec.n_chn).arg(sdkHdlRec.str_src_path));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+    rec.setValue("chn", sdkHdlRec.n_chn);
+    rec.setValue("src_path", sdkHdlRec.str_src_path);
+    rec.setValue("total", sdkHdlRec.n_total);
+    rec.setValue("pos", sdkHdlRec.n_pos);
+    rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+
+bool LDBTool::updateSdkHdlTablePos(QString str_src_path, int pos) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setFilter(QObject::tr("src_path = '%1'").arg(str_src_path));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    /*QSqlRecord rec =  pModel.record();
+    rec.setValue("pos",pos);*/
+
+    int rowCount = pModel.rowCount();
+    /*if(rowCount == 0)
+    {
+        pModel.insertRecord(-1,rec);
+    }else */if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        rec.setValue("pos", pos);
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+
+std::list<Record_Sdk_Hdl_info> LDBTool::searchSdkHdlTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Sdk_Hdl_info> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("sdk_hdl_info");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Sdk_Hdl_info lRec;
+            QSqlRecord rec = pModel.record(i);
+            lRec.n_id = rec.value("id").toInt();
+            lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lRec.n_chn = rec.value("chn").toInt();
+            lRec.str_src_path = rec.value("src_path").toString();
+            lRec.n_total = rec.value("total").toInt();
+            lRec.n_pos = rec.value("pos").toInt();
+            lRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lRec);
+        }
+    }
+
+    return lst;
+}
+
+//Record_Sdk_Hdl_info LDBTool::searchOldestRecordfromSdkHdlTableByUpdateTime(void)
+//{
+//    Record_Sdk_Hdl_info lRec;
+//    QSqlTableModel pModel(NULL,m_db);
+//    pModel.setTable("sdk_hdl_info");
+//    pModel.setSort(7,Qt::AscendingOrder); //id灞炴�э紝鍗崇0鍒楋紝鍗囧簭鎺掑垪,鎵惧埌鏃堕棿鏈�鏃х殑璁板綍
+//    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+//    pModel.select();
+
+//    int rowCount = pModel.rowCount();
+//    if (rowCount > 0)
+//    {
+//        QSqlRecord rec = pModel.record(0);
+//        lRec.n_id = rec.value("id").toInt();
+//        lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+//        lRec.n_chn = rec.value("chn").toInt();
+//        lRec.str_src_path = rec.value("src_path").toString();
+//        lRec.n_total = rec.value("total").toInt();
+//        lRec.n_pos = rec.value("pos").toInt();
+//        lRec.str_reserved = rec.value("reserved").toString();
+//    }
+
+//    return lRec;
+//}
+
+///
+/// \brief insertSdkHdlTableAndDeleteCutVideoTable
+/// \param sdkHdlRec
+/// \param strDeviceId
+/// \param nChannelId
+/// \param strCutSrcPath
+/// \return
+///
+bool LDBTool::insertSdkHdlTableAndDeleteCutVideoTable(Record_Sdk_Hdl_info sdkHdlRec, \
+                                                      QString strDeviceId, \
+                                                      int nChannelId, \
+                                                      QString strCutSrcPath) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_sdkhdl(NULL, m_db);
+    pModel_sdkhdl.setTable("sdk_hdl_info");
+    pModel_sdkhdl.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel_sdkhdl.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", sdkHdlRec.str_storage_dev_id);
+    rec.setValue("chn", sdkHdlRec.n_chn);
+    rec.setValue("src_path", sdkHdlRec.str_src_path);
+    rec.setValue("total", sdkHdlRec.n_total);
+    rec.setValue("pos", sdkHdlRec.n_pos);
+    rec.setValue("reserved", sdkHdlRec.str_reserved);
+
+    ////////
+    QSqlTableModel pModel_cut(NULL, m_db);
+    pModel_cut.setTable("cut_video_info");
+    pModel_cut.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2' and src_path = '%3'")\
+.arg(strDeviceId).arg(nChannelId).arg(strCutSrcPath));
+    pModel_cut.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_cut.select();
+
+    pModel_sdkhdl.insertRecord(-1, rec);
+    int rowCount = pModel_cut.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel_cut.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_sdkhdl.submitAll() && pModel_cut.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel_sdkhdl.lastError().text().toStdString() << " "
+                                                      << pModel_cut.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),\
+        QObject::tr("Database Error: %1").arg(pModel_sdkhdl.lastError().text()),\
+                QObject::tr("Database Error: %1").arg(pModel_cut.lastError().text()));
+        return false;
+    }
+}
+
+///
+/// \brief insertCamSdkTable
+/// \param camSdkRec
+/// \return
+///
+bool LDBTool::insertCamSdkTable(Record_Cam_Sdk camSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_sdk");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+    rec.setValue("sdks", camSdkRec.str_sdks);
+    rec.setValue("det_thr", camSdkRec.str_det_thr);
+    rec.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+    rec.setValue("reserved", camSdkRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteCamSdkTable(QString strCamDevId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_sdk");
+    pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamDevId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateCamSdkTable(Record_Cam_Sdk camSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_sdk");
+    pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(camSdkRec.str_cam_dev_id));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+    rec.setValue("sdks", camSdkRec.str_sdks);
+    rec.setValue("det_thr", camSdkRec.str_det_thr);
+    rec.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+    rec.setValue("reserved", camSdkRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+//鏌ヨ鎽勫儚鏈轰俊鎭�
+Record_Cam_Sdk LDBTool::searchCamSdkTableByCamId(QString strCamId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Cam_Sdk lRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("cam_sdk");
+    pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lRec.n_id = rec.value("id").toInt();
+        lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+        lRec.str_sdks = rec.value("sdks").toString();
+        lRec.str_det_thr = rec.value("det_thr").toString();
+        lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+        lRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lRec;
+}
+
+//缂栬緫閫氶亾
+bool LDBTool::updateCamAndSdkTable(Record_Cam_Dev camRec, Record_Cam_Sdk camSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_cam(NULL, m_db);
+    pModel_cam.setTable("cam_dev");
+    pModel_cam.setFilter(QObject::tr("cam_dev_id = '%1'")\
+.arg(camRec.str_cam_dev_id));
+    pModel_cam.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_cam.select();
+
+    QSqlRecord rec = pModel_cam.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("cam_dev_id", camRec.str_cam_dev_id);
+    rec.setValue("name", camRec.str_name);
+    rec.setValue("addr", camRec.str_addr);
+    rec.setValue("longitude", camRec.str_longitude);
+    rec.setValue("latitude", camRec.str_latitude);
+    rec.setValue("ip", camRec.str_ip);
+    rec.setValue("port", camRec.n_port);
+    rec.setValue("username", camRec.str_username);
+    rec.setValue("password", camRec.str_password);
+    rec.setValue("brand", camRec.str_brand);
+    rec.setValue("reserved", camRec.str_reserved);
+
+    //camsdk
+    QSqlTableModel pModel_sdk(NULL, m_db);
+    pModel_sdk.setTable("cam_sdk");
+    pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'")\
+.arg(camRec.str_cam_dev_id));
+    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_sdk.select();
+
+    QSqlRecord rec_sdk = pModel_sdk.record(0);
+//    rec_sdk.setGenerated("id", false);
+    rec_sdk.setValue("cam_dev_id", camSdkRec.str_cam_dev_id);
+    rec_sdk.setValue("sdks", camSdkRec.str_sdks);
+    rec_sdk.setValue("det_thr", camSdkRec.str_det_thr);
+    rec_sdk.setValue("cmp_thr", camSdkRec.str_cmp_thr);
+    rec_sdk.setValue("reserved", camSdkRec.str_reserved);
+
+    int rowCount = pModel_cam.rowCount();
+    if (rowCount == 0) {
+        pModel_cam.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel_cam.setRecord(0, rec);//TODO
+    }
+
+    rowCount = pModel_sdk.rowCount();
+    if (rowCount == 0) {
+        pModel_sdk.insertRecord(-1, rec_sdk);
+    } else if (rowCount > 0) {
+        pModel_sdk.setRecord(0, rec_sdk);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel_cam.submitAll() && pModel_sdk.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+ << pModel_cam.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+///
+/// \brief insertChnSdkTable
+/// \param chnSdkRec
+/// \return
+///
+bool LDBTool::insertChnSdkTable(Record_Chn_Sdk chnSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("chn_sdk");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+    rec.setValue("chn", chnSdkRec.n_chn);
+    rec.setValue("sdks", chnSdkRec.str_sdks);
+    rec.setValue("det_thr", chnSdkRec.str_det_thr);
+    rec.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+//    rec.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+    rec.setValue("reserved", chnSdkRec.str_reserved);
+
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("insertLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::deleteChnSdkTable(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("chn_sdk");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(strDeviceId).arg(nChannelId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+
+    if (rowCount >= 1) {
+        for (int i = 0; i < rowCount; i++) {
+            pModel.removeRow(i);//TODO
+        }
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("deleteLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+bool LDBTool::updateChnSdkTable(Record_Chn_Sdk chnSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("chn_sdk");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(chnSdkRec.str_storage_dev_id).arg(chnSdkRec.n_chn));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+    rec.setValue("chn", chnSdkRec.n_chn);
+    rec.setValue("sdks", chnSdkRec.str_sdks);
+    rec.setValue("det_thr", chnSdkRec.str_det_thr);
+    rec.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+//    rec.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+    rec.setValue("reserved", chnSdkRec.str_reserved);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+std::list<Record_Chn_Sdk> LDBTool::searchChnSdkTableAll(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    std::list<Record_Chn_Sdk> lst;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("chn_sdk");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        for (int i = 0; i < rowCount; ++i) {
+            Record_Chn_Sdk lRec;
+            QSqlRecord rec = pModel.record(i);
+            lRec.n_id = rec.value("id").toInt();
+            lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+            lRec.n_chn = rec.value("chn").toInt();
+            lRec.str_sdks = rec.value("sdks").toString();
+            lRec.str_det_thr = rec.value("det_thr").toString();
+            lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+//            lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+            lRec.str_reserved = rec.value("reserved").toString();
+            lst.push_back(lRec);
+        }
+    }
+
+    return lst;
+}
+
+Record_Chn_Sdk LDBTool::searchChnSdkTableByChannelId(QString strDeviceId, int nChannelId) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    Record_Chn_Sdk lRec;
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("chn_sdk");
+    pModel.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(strDeviceId).arg(nChannelId));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lRec.n_id = rec.value("id").toInt();
+        lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+        lRec.n_chn = rec.value("chn").toInt();
+        lRec.str_sdks = rec.value("sdks").toString();
+        lRec.str_det_thr = rec.value("det_thr").toString();
+        lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+//        lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+        lRec.str_reserved = rec.value("reserved").toString();
+    }
+
+    return lRec;
+}
+
+////鏌ヨ鎽勫儚鏈轰俊鎭�
+//Record_Chn_Sdk LDBTool::searchChnSdkTableByCam(QString strCamId)
+//{
+//    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+//    Record_Chn_Sdk lRec;
+//    QSqlTableModel pModel(NULL, m_db);
+//    pModel.setTable("chn_sdk");
+//    pModel.setFilter(QObject::tr("cam_dev_id = '%1'").arg(strCamId));
+//    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+//    pModel.select();
+//
+//    int rowCount = pModel.rowCount();
+//    if (rowCount > 0) {
+//        QSqlRecord rec = pModel.record(0);
+//        lRec.n_id = rec.value("id").toInt();
+//        lRec.str_storage_dev_id = rec.value("storage_dev_id").toString();
+//        lRec.n_chn = rec.value("chn").toInt();
+//        lRec.str_sdks = rec.value("sdks").toString();
+//        lRec.str_det_thr = rec.value("det_thr").toString();
+//        lRec.str_cmp_thr = rec.value("cmp_thr").toString();
+//        lRec.str_cam_dev_id = rec.value("cam_dev_id").toString();
+//        lRec.str_reserved = rec.value("reserved").toString();
+//    }
+//
+//    return lRec;
+//}
+
+//缂栬緫閫氶亾
+bool LDBTool::updateDevChnAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel_chn(NULL, m_db);
+    pModel_chn.setTable("cam_chn");
+    pModel_chn.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(channelRec.str_storage_dev_id).arg(channelRec.n_chn));
+    pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_chn.select();
+
+    QSqlRecord rec = pModel_chn.record(0);
+//    rec.setGenerated("id", false);
+    rec.setValue("storage_dev_id", channelRec.str_storage_dev_id);
+    rec.setValue("chn", channelRec.n_chn);
+    rec.setValue("name", channelRec.str_name);
+    rec.setValue("addr", channelRec.str_addr);
+    rec.setValue("longitude", channelRec.str_longitude);
+    rec.setValue("latitude", channelRec.str_latitude);
+    rec.setValue("do_time", channelRec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("update_time", channelRec.tim_update_time.toString("yyyy-MM-dd hh:mm:ss"));
+    rec.setValue("reserved", channelRec.str_reserved);
+
+    //chnsdk
+    QSqlTableModel pModel_sdk(NULL, m_db);
+    pModel_sdk.setTable("chn_sdk");
+    pModel_sdk.setFilter(QObject::tr("storage_dev_id = '%1' and chn = '%2'")\
+.arg(chnSdkRec.str_storage_dev_id).arg(chnSdkRec.n_chn));
+    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel_sdk.select();
+
+    QSqlRecord rec_sdk = pModel_sdk.record(0);
+//    rec_sdk.setGenerated("id", false);
+    rec_sdk.setValue("storage_dev_id", chnSdkRec.str_storage_dev_id);
+    rec_sdk.setValue("chn", chnSdkRec.n_chn);
+    rec_sdk.setValue("sdks", chnSdkRec.str_sdks);
+    rec_sdk.setValue("det_thr", chnSdkRec.str_det_thr);
+    rec_sdk.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+    rec_sdk.setValue("reserved", chnSdkRec.str_reserved);
+
+    int rowCount = pModel_chn.rowCount();
+    if (rowCount == 0) {
+        pModel_chn.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel_chn.setRecord(0, rec);//TODO
+    }
+
+    rowCount = pModel_sdk.rowCount();
+    if (rowCount == 0) {
+        pModel_sdk.insertRecord(-1, rec_sdk);
+    } else if (rowCount > 0) {
+        pModel_sdk.setRecord(0, rec_sdk);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+    if (pModel_chn.submitAll() && \
+        pModel_sdk.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        std::string warning_str = " No Fields to update";
+        std::string ok_str = " ";
+        if ((pModel_chn.lastError().text().toStdString() == warning_str) || \
+            (pModel_chn.lastError().text().toStdString() == ok_str)) {
+            if ((pModel_sdk.lastError().text().toStdString() == warning_str) || \
+                (pModel_sdk.lastError().text().toStdString() == ok_str)) {
+                m_db.commit();//鎻愪氦
+                return true;
+            }
+        }
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+ << pModel_chn.lastError().text().toStdString() \
+ << pModel_sdk.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+////缂栬緫閫氶亾
+//bool LDBTool::updateCamAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec)
+//{
+//    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+//    QSqlTableModel pModel_chn(NULL, m_db);
+//    pModel_chn.setTable("cam_chn");
+//    pModel_chn.setFilter(QObject::tr("cam_dev_id = '%1'")\
+//                         .arg(channelRec.str_cam_dev_id));
+//    pModel_chn.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+//    pModel_chn.select();
+//
+//    QSqlRecord rec = pModel_chn.record(0);
+////    rec.setGenerated("id", false);
+//    rec.setValue("cam_dev_id", channelRec.str_cam_dev_id);
+//    rec.setValue("name", channelRec.str_name);
+//    rec.setValue("addr", channelRec.str_addr);
+//    rec.setValue("longitude", channelRec.str_longitude);
+//    rec.setValue("latitude", channelRec.str_latitude);
+//    rec.setValue("ip", channelRec.str_ip);
+//    rec.setValue("port", channelRec.n_port);
+//    rec.setValue("username", channelRec.str_username);
+//    rec.setValue("password", channelRec.str_password);
+//    rec.setValue("brand", channelRec.str_brand);
+//    rec.setValue("reserved", channelRec.str_reserved);
+//
+//    //chnsdk
+//    QSqlTableModel pModel_sdk(NULL, m_db);
+//    pModel_sdk.setTable("chn_sdk");
+//    pModel_sdk.setFilter(QObject::tr("cam_dev_id = '%1'")\
+//                         .arg(channelRec.str_cam_dev_id));
+//    pModel_sdk.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+//    pModel_sdk.select();
+//
+//    QSqlRecord rec_sdk = pModel_sdk.record(0);
+////    rec_sdk.setGenerated("id", false);
+//    rec_sdk.setValue("cam_dev_id", chnSdkRec.str_cam_dev_id);
+//    rec_sdk.setValue("sdks", chnSdkRec.str_sdks);
+//    rec_sdk.setValue("det_thr", chnSdkRec.str_det_thr);
+//    rec_sdk.setValue("cmp_thr", chnSdkRec.str_cmp_thr);
+//    rec_sdk.setValue("reserved", chnSdkRec.str_reserved);
+//
+//    int rowCount = pModel_chn.rowCount();
+//    if (rowCount == 0) {
+//        pModel_chn.insertRecord(-1, rec);
+//    } else if (rowCount > 0) {
+//        pModel_chn.setRecord(0, rec);//TODO
+//    }
+//
+//    rowCount = pModel_sdk.rowCount();
+//    if (rowCount == 0) {
+//        pModel_sdk.insertRecord(-1, rec_sdk);
+//    } else if (rowCount > 0) {
+//        pModel_sdk.setRecord(0, rec_sdk);//TODO
+//    }
+//
+//    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+//
+//    if (pModel_chn.submitAll() && pModel_sdk.submitAll()) {
+//        m_db.commit();//鎻愪氦
+//        return true;
+//    } else {
+//        m_db.rollback();//鍥炴粴
+//        ERR("updateLDeviceTable ,pModel_chn or pModel_sdk Error: " \
+//            << pModel_chn.lastError().text().toStdString() \
+//            << pModel_sdk.lastError().text().toStdString());
+//        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+//        return false;
+//    }
+//}
+
+//config 淇敼ip 绔彛绛夐厤缃俊鎭�
+bool LDBTool::updateConfigTableByServerInfo(Record_Config configRec) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("alarm_ip", configRec.str_alarm_ip);
+    rec.setValue("alarm_port", configRec.n_alarm_port);
+    rec.setValue("web_pic_ip", configRec.str_web_pic_ip);
+    rec.setValue("web_pic_port", configRec.n_web_pic_port);
+    rec.setValue("es_pic_ip", configRec.str_es_pic_ip);
+    rec.setValue("es_pic_port", configRec.n_es_pic_port);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+//config  device type
+bool LDBTool::updateConfigTableByDevType(int devType) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("dev_type", devType);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        return false;
+    }
+}
+
+//config  device type
+int LDBTool::searchDevTypeFromConfigTable(void) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int devType = 0;
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        devType = rec.value("dev_type").toInt();
+    }
+
+    return devType;
+}
+
+
+//config 淇敼瑁佸壀瑙嗛鏃堕暱
+bool LDBTool::updateConfigTableByCutDuration(int n_cut_max_duration) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("cut_max_duration", n_cut_max_duration);
+
+    while (pModel.canFetchMore()) {
+        pModel.fetchMore();
+    }
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateLDeviceTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        //        QMessageBox::warning(NULL,QObject::tr("updateLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text()));
+        return false;
+    }
+}
+
+//config 鏌ヨip 绔彛绛夐厤缃俊鎭�
+Record_Config LDBTool::searchConfigTableWithinServerInfo(void) {
+    Record_Config lRec;
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        lRec.str_alarm_ip = rec.value("alarm_ip").toString();
+        lRec.n_alarm_port = rec.value("alarm_port").toInt();
+        lRec.str_web_pic_ip = rec.value("web_pic_ip").toString();
+        lRec.n_web_pic_port = rec.value("web_pic_port").toInt();
+        lRec.str_es_pic_ip = rec.value("es_pic_ip").toString();
+        lRec.n_es_pic_port = rec.value("es_pic_port").toInt();
+        lRec.n_cut_max_duration = rec.value("cut_max_duration").toInt();
+        lRec.dev_id = QString::fromStdString(appConfig.getStringProperty("DEV_ID"));
+        lRec.dev_name = rec.value("dev_name").toString();
+    }
+
+    return lRec;
+}
+
+//config 鏌ヨ瑁佸壀瑙嗛鏃堕暱
+int LDBTool::searchConfigTableWithinCutDuration(void) {
+    int cut_max_duration = 5;//榛樿5鍒嗛挓
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        if (cut_max_duration != 0) {
+            cut_max_duration = rec.value("cut_max_duration").toInt();
+        }
+    }
+
+    return cut_max_duration;
+}
+
+bool LDBTool::insertRecordVedioPath(QString pathKey, QString filePath) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("name_key_match");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+    QSqlRecord rec = pModel.record();
+    rec.setGenerated("id", false);
+    rec.setValue("key", pathKey);
+    rec.setValue("filename", filePath);
+    pModel.insertRecord(-1, rec);//TODO
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        DBG("srtPath=" << filePath.toStdString() << ", m_uuid=" << pathKey.toStdString());
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("insertRecordVedioPath ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+        return false;
+    }
+}
+
+QString LDBTool::searchRecordVedioPathByKey(QString pathKey) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("name_key_match");
+    pModel.setFilter(QObject::tr("key = '%1' ").arg(pathKey));
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QString path;
+    int rowCount = pModel.rowCount();
+    if (rowCount > 0) {
+        QSqlRecord rec = pModel.record(0);
+        path = rec.value("filename").toString();
+    }
+
+    return path;
+}
+
+
+bool LDBTool::updateDevNameConfigTable(QString dev_name) {
+    QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+    QSqlTableModel pModel(NULL, m_db);
+    pModel.setTable("config");
+    pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+    pModel.select();
+
+    QSqlRecord rec = pModel.record(0);
+    rec.setValue("dev_name", dev_name);
+
+    int rowCount = pModel.rowCount();
+    if (rowCount == 0) {
+        pModel.insertRecord(-1, rec);
+    } else if (rowCount > 0) {
+        pModel.setRecord(0, rec);//TODO
+    }
+
+    m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+    if (pModel.submitAll()) {
+        m_db.commit();//鎻愪氦
+        return true;
+    } else {
+        m_db.rollback();//鍥炴粴
+        ERR("updateDevNameConfigTable ,pModel_load Error: " << pModel.lastError().text().toStdString());
+        return false;
+    }
+}
+ bool LDBTool::insertPerimeterRule(ActRule actRule)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_perimeter");
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+     QSqlRecord rec = pModel.record();
+     rec.setGenerated("rule_id", false);
+     rec.setValue("camera_id", actRule.nCamId);
+     rec.setValue("sensitivity", actRule.fSensitivity);
+     rec.setValue("delay",actRule.nTriggerDelay);
+     rec.setValue("tolerance",actRule.nTriggertolerance);
+     rec.setValue("show_pepole_num",actRule.nAlarmPeopleNum);
+
+     pModel.insertRecord(-1, rec);//TODO
+
+     m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+     if (pModel.submitAll()) {
+         m_db.commit();//鎻愪氦
+         return true;
+     } else {
+         m_db.rollback();//鍥炴粴
+         ERR("insertCameraRule ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+         return false;
+     }
+ }
+ bool LDBTool::updatePerimeterRuleByCamId(ActRule actRule)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_perimeter");
+     pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(actRule.nCamId));
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+
+     QSqlRecord rec = pModel.record(0);
+     rec.setValue("camera_id", actRule.nCamId);
+     rec.setValue("sensitivity", actRule.fSensitivity);
+     rec.setValue("delay",actRule.nTriggerDelay);
+     rec.setValue("tolerance",actRule.nTriggertolerance);
+     rec.setValue("show_pepole_num",actRule.nAlarmPeopleNum);
+
+     int rowCount = pModel.rowCount();
+     if (rowCount == 0) {
+         pModel.insertRecord(-1, rec);
+     } else if (rowCount > 0) {
+         pModel.setRecord(0, rec);//TODO
+     }
+
+     m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+     if (pModel.submitAll()) {
+         m_db.commit();//鎻愪氦
+         return true;
+     } else {
+         m_db.rollback();//鍥炴粴
+         ERR("updateCameraRuleByCamId ,pModel_load Error: " << pModel.lastError().text().toStdString());
+         return false;
+     }
+
+ }
+ ActRule LDBTool::searchPerimeterRuleByCamId(int camId)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_perimeter");
+     pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+     pModel.select();
+
+     ActRule rule;
+     int rowCount = pModel.rowCount();
+     if (rowCount > 0) {
+         QSqlRecord rec = pModel.record(0);
+         rule.nTriggerDelay=rec.value("delay").toInt();
+         rule.nTriggertolerance=rec.value("tolerance").toInt();
+         rule.strAreas=rec.value("area_points").toString();
+         rule.nAlarmPeopleNum=rec.value("show_people_sum").toInt();
+         rule.fSensitivity=rec.value("sensitivity").toFloat();
+     }
+
+     return rule;
+ }
+
+ bool LDBTool::insertCameraWeekRule(LActRuleWeekRecord weekRule)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_week");
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+
+     QSqlRecord rec = pModel.record();
+     rec.setGenerated("id", false);
+     rec.setValue("camera_id",weekRule.m_nCamId);
+     rec.setValue("type", weekRule.m_nType);
+     rec.setValue("start_time", weekRule.m_strBegin);
+     rec.setValue("end_time",weekRule.m_strEnd);
+
+     pModel.insertRecord(-1, rec);//TODO
+
+     m_db.transaction();//寮�濮嬩簨鍔℃搷浣�
+
+     if (pModel.submitAll()) {
+         m_db.commit();//鎻愪氦
+         return true;
+     } else {
+         m_db.rollback();//鍥炴粴
+         ERR("insertCameraWeekRule ,pModel_load Error: " << pModel.lastError().text().toStdString());
+
+         return false;
+     }
+ }
+ QVector<LActRuleWeekRecord> LDBTool::searchCameraWeekRuleByCamId(int camId)
+ {
+     QVector<LActRuleWeekRecord> vecWeek;
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_week");
+     pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+     pModel.select();
+
+     int rowCount = pModel.rowCount();
+     for(int i = 0;i < rowCount;++i)
+     {
+         LActRuleWeekRecord lActRuleWeekRec;
+         QSqlRecord rec = pModel.record(i);
+         lActRuleWeekRec.m_nType = rec.value("type").toInt();
+         lActRuleWeekRec.m_strBegin = rec.value("begin").toString();
+         lActRuleWeekRec.m_strEnd = rec.value("end").toString();
+         vecWeek.push_back(lActRuleWeekRec);
+     }
+
+     return vecWeek;
+ }
+ ActRule LDBTool::searchActRuleByCamId(int camId)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_act");
+     pModel.setFilter(QObject::tr("cam_id = '%1' ").arg(camId));
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+     pModel.select();
+
+     ActRule rule;
+     int rowCount = pModel.rowCount();
+     if (rowCount > 0) {
+         QSqlRecord rec = pModel.record(0);
+         rule.nTriggertolerance=rec.value("tolerance").toInt();
+         rule.nTriggerDelay=rec.value("delay").toInt();
+         rule.strAreas=rec.value("act_left_area").toString();
+         rule.strLine=rec.value("act_left_line").toString();
+         rule.strExAreas=rec.value("act_right_area").toString();
+         rule.strExLine=rec.value("act_right_line").toString();
+         rule.fSensitivity=rec.value("sensitivity").toFloat();
+     }
+
+     return rule;
+ }
+
+ ActRule LDBTool::searchCrowdRuleByCamId(int camId)
+ {
+     QMutexLocker mutexLocker(&m_mutexVisit);//TODO
+     QSqlTableModel pModel(NULL, m_db);
+     pModel.setTable("rule_crowd");
+     pModel.setFilter(QObject::tr("camera_id = '%1' ").arg(camId));
+     pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange
+     pModel.select();
+
+     ActRule rule;
+     int rowCount = pModel.rowCount();
+     if (rowCount > 0) {
+         QSqlRecord rec = pModel.record(0);
+         rule.nTriggertolerance=rec.value("tolerance").toInt();
+         rule.nTriggerDelay=rec.value("delay").toInt();
+         rule.strAreas=rec.value("area_points").toString();
+         rule.nAlarmPeopleNum=rec.value("alarm_people_num").toInt();
+     }
+
+     return rule;
+ }
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h
new file mode 100644
index 0000000..2c73a77
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h
@@ -0,0 +1,142 @@
+#ifndef LDBTOOL_H
+#define LDBTOOL_H
+
+//#include <QObject>
+#include <QSqlDatabase>
+#include <QSqlTableModel>
+#include <QSqlQuery>
+#include <QSqlRecord>
+#include <QSqlError>
+#include "DBStruct.h"
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QDateTime>
+#include <QMutexLocker>
+
+class LDBTool
+{
+public:
+//    explicit LDBTool(QObject *parent = nullptr);
+    LDBTool();
+    ~LDBTool();
+
+    void connectDB();
+
+    //DeviceTable
+    bool insertDeviceTable(Record_Storage_Dev deviceRec);
+    bool deleteDeviceTable(QString strDeviceId);
+    bool deleteDeviceTableAndChnAndSdk(QString str_storage_dev_id);
+    bool updateDeviceTable(Record_Storage_Dev deviceRec);
+    std::list<Record_Storage_Dev> searchDeviceTableAll(void);
+    int searchDeviceNumber(void);
+    Record_Storage_Dev searchDeviceTableByDeviceId(QString strDeviceId);
+    int searchDurationByDeviceId(QString strDeviceId);
+
+    //ChannelTable
+    bool insertChannelTable(Record_Cam_Chn channelRec);
+    bool deleteChannelTable(QString strDeviceId, int nChannelId);
+    bool deleteChannelTableByCamID(QString strCamId);
+    bool updateChannelTable(Record_Cam_Chn channelRec);
+    std::list<Record_Cam_Chn> searchChannelTableAll(void);
+    std::list<Record_Cam_Chn> searchChannelTableByDevlId(QString strDeviceId);
+    Record_Cam_Chn searchOldestRecordfromChnTableByUpdateTime(void);
+    Record_Cam_Chn searchChannelTableByChannelId(QString strDeviceId, int nChannelId);
+    Record_Cam_Chn searchNewestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId);
+    Record_Cam_Chn searchOldestRecordfromChnTableByChannelId(QString strDeviceId, int nChannelId);
+    std::list<Record_Cam_Chn> searchChannelTableCamType(void);
+
+    //cam_dev
+    bool insertCamDevTable(Record_Cam_Dev channelRec);
+    bool deleteCamDevandSdkByCamID(QString strCamId);
+    bool updateCamDevTable(Record_Cam_Dev camRec);
+    std::list<Record_Cam_Dev> searchCamDevTableAll(void);
+    int searchCamDevNumber(void);
+
+    //load_file_info
+    bool insertLoadFileTable(Record_Load_File_info loadfileRec);
+    bool deleteLoadFileTable(QString strDeviceId, int nChannelId, QDateTime tim_startTime);
+    bool deleteLoadFileTablebyDevID(QString strDeviceId);
+    bool updateLoadFileTable(Record_Load_File_info loadfileRec);
+    std::list<Record_Load_File_info> searchLoadFileTableAll(void);
+    Record_Load_File_info searchOldestRecordfromLoadTableByUpdateTime(void);
+
+    //insert rec to loadfile_info && update cam_chn
+    bool insertLoadFileTableAndUpdateChannelTable(Record_Load_File_info loadfileRec,
+                                                  Record_Cam_Chn channelRec);
+
+    //cut_video_info
+    bool insertCutVideoTable(Record_Cut_Video_info cutVideoRec);
+    bool deleteCutVideoTable(QString strDeviceId, int nChannelId, QString strSrcPath);
+    bool deleteCutVideoTablebyDevID(QString strDeviceId);
+    bool updateCutVideoTable(Record_Cut_Video_info cutVideoRec);
+    bool updateCutVideoTable(std::string src_path, std::string dst_path, int total);
+    std::list<Record_Cut_Video_info> searchCutVideoTableAll(void);
+    Record_Cut_Video_info searchOldestRecordfromCutTableByUpdateTime(void);
+
+    //insert rec to cut_video_info && delete load_file_info
+    bool insertCutVideoTableAndDeleteLoadFileTable(Record_Cut_Video_info cutVideoRec,
+                                                   QString strDeviceId, int nChannelId,
+                                                   QDateTime tim_loadStartTime);
+
+    //sdk_hdl_info
+    bool insertSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec);
+    bool deleteSdkHdlTable(QString strSrcPath);
+    bool updateSdkHdlTable(Record_Sdk_Hdl_info sdkHdlRec);
+    bool updateSdkHdlTablePos(QString str_src_path,int pos);
+    std::list<Record_Sdk_Hdl_info> searchSdkHdlTableAll(void);
+    bool deleteSdkHdlTablebyDevID(QString strDevId);
+
+    //insert rec to sdk_hdl_info && delete cut_video_info
+    bool insertSdkHdlTableAndDeleteCutVideoTable(Record_Sdk_Hdl_info sdkHdlRec,\
+                                                 QString strDeviceId, \
+                                                 int nChannelId, \
+                                                 QString strCutSrcPath);
+
+    //chn_sdk
+    bool insertChnSdkTable(Record_Chn_Sdk chnSdkRec);
+    bool deleteChnSdkTable(QString strDeviceId, int nChannelId);
+    bool updateChnSdkTable(Record_Chn_Sdk chnSdkRec);
+    std::list<Record_Chn_Sdk> searchChnSdkTableAll(void);
+    Record_Chn_Sdk searchChnSdkTableByChannelId(QString strDeviceId, int nChannelId);
+//    Record_Chn_Sdk searchChnSdkTableByCam(QString strCamId);
+
+    bool updateDevChnAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec);
+//    bool updateCamAndSdk(Record_Cam_Chn channelRec, Record_Chn_Sdk chnSdkRec);
+
+    bool insertCamSdkTable(Record_Cam_Sdk camSdkRec);
+    bool deleteCamSdkTable(QString strCamDevId);
+    bool updateCamSdkTable(Record_Cam_Sdk camSdkRec);
+    Record_Cam_Sdk searchCamSdkTableByCamId(QString strCamId);
+    bool updateCamAndSdkTable(Record_Cam_Dev camRec, Record_Cam_Sdk camSdkRec);
+
+    //config
+    bool updateConfigTableByServerInfo(Record_Config configRec);
+    bool updateConfigTableByCutDuration(int n_cut_max_duration);
+    Record_Config searchConfigTableWithinServerInfo(void);
+    int searchConfigTableWithinCutDuration(void);
+    bool updateConfigTableByDevType(int devType);
+    int searchDevTypeFromConfigTable(void);
+    //Record_Config searchDevIdFromConfigTable(void);
+    bool updateDevNameConfigTable(QString dev_name);
+    //name_key_match
+    bool insertRecordVedioPath(QString pathKey,QString filePath);
+    QString  searchRecordVedioPathByKey(QString pathKey);
+    //perimeter_rule
+    bool insertPerimeterRule(ActRule actRule);
+    bool updatePerimeterRuleByCamId(ActRule actRule);
+    ActRule searchPerimeterRuleByCamId(int camId);
+    //rule_week
+    bool insertCameraWeekRule(LActRuleWeekRecord weekRule);
+    QVector<LActRuleWeekRecord> searchCameraWeekRuleByCamId(int camId);
+    //rule_act
+    ActRule searchActRuleByCamId(int camId);
+    //crowd_rule
+    ActRule searchCrowdRuleByCamId(int camId);
+private:
+    QSqlDatabase m_db;
+    QSqlTableModel *m_pModel;
+
+    QMutex m_mutexVisit;
+};
+
+#endif // LDBTOOL_H
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db b/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db
new file mode 100644
index 0000000..1953304
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/config.db
Binary files differ
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro
new file mode 100644
index 0000000..57c0c9b
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro
@@ -0,0 +1,30 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2018-08-09T18:41:34
+#
+#-------------------------------------------------
+
+QT       += core gui sql
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+INCLUDEPATH += $$PWD/include
+include(DB/DB.pri)
+
+
+INCLUDEPATH += \
+    ../../../../BasicPlatForm \
+
+TARGET = QiaoJia
+TEMPLATE = app
+CONFIG += c++11
+
+SOURCES += main.cpp\
+        widget.cpp
+
+HEADERS  += widget.h \
+            ../../../../BasicPlatForm/basic/debug/Debug.h \
+    dispatchTool/dispathdatatype.hpp \
+    dispatchTool/taskmanage.h
+
+FORMS    += widget.ui
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user
new file mode 100644
index 0000000..dbae9cd
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro.user
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 3.5.1, 2018-08-29T13:38:25. -->
+<qtcreator>
+ <data>
+  <variable>EnvironmentId</variable>
+  <value type="QByteArray">{ab775435-ca7f-4656-b967-d6e66c62ea7e}</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+    <value type="QString" key="language">Cpp</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+    </valuemap>
+   </valuemap>
+   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+    <value type="QString" key="language">QmlJS</value>
+    <valuemap type="QVariantMap" key="value">
+     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+    </valuemap>
+   </valuemap>
+   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
+   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.PluginSettings</variable>
+  <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">妗岄潰</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">妗岄潰</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{961f1414-5ec5-452f-93eb-158b95e105ab}</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/build-QiaoJia-unknown-Debug</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/build-QiaoJia-unknown-Release</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鏋勫缓</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+    </valuemap>
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+       <value type="QString">-w</value>
+       <value type="QString">-r</value>
+      </valuelist>
+      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">娓呯悊</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">閮ㄧ讲</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+    </valuemap>
+    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">鍦ㄦ湰鍦伴儴缃�</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">QiaoJia</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/QiaoJiaSystem/VideoServer/QiaoJia/QiaoJia.pro</value>
+    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
+    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">QiaoJia.pro</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
+    <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
+    <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
+    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">18</value>
+ </data>
+ <data>
+  <variable>Version</variable>
+  <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h b/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h
new file mode 100644
index 0000000..af3095b
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dbtest.h
@@ -0,0 +1,46 @@
+#ifndef _DB_TEST_____
+#define _DB_TEST_____
+
+#include "myThread.h"
+#include <vector>
+#include "LDBTool.h"
+#include <string>
+#include <QString>
+
+class DbTest : public mythread<std::string> {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<int> &)>;
+public:
+    DbTest(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+    ~DbTest() {
+
+    }
+
+private:
+    virtual void doFunc(std::shared_ptr<std::string> param) {
+        static int i = 0;
+        db_mtest.searchChannelTableCamType();
+        std::cout << i++ << std::endl;
+//        if (m_task_function != nullptr) {
+//            auto fp_task(std::make_shared<int>(ret));
+//            m_task_function(fp_task);
+//            std::cout << i++ << std::endl;
+//        } else {
+//            //std::cout << "m_task_function == nullptr" << std::endl;
+//            return;
+//        }
+    }
+
+private:
+    TASK_FUNCTION m_task_function;
+    LDBTool db_mtest;
+};
+
+struct CallBackFunc{
+    int callback_func(std::shared_ptr<int> in)
+    {
+        static int i = 0;
+        std::cout << *in.get() << ":" << i++ << std::endl;
+    }
+};
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp
new file mode 100644
index 0000000..a78d7f4
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.cpp
@@ -0,0 +1,68 @@
+#include <QString>
+#include "../DB/LDBTool.h"
+#include "cutManage.h"
+#include <QDateTime>
+#include <QVector>
+#include <basic/debug/Debug.h>
+
+//cutManage::cutManage()
+//{
+//    init();
+//}
+
+
+cutManage::cutManage(LDBTool *dbTool) : TaskManage(dbTool) {
+    init();
+}
+
+cutManage::~cutManage() {
+
+}
+
+void cutManage::init(void) {
+    //search all cut_video_info where finish_flag = 0
+    m_list = db_c->searchCutVideoTableAll();
+}
+
+getCutFileManage cutManage::getTask(void) {
+    getCutFileManage result;
+
+    if (m_list.size() > 0) {
+        //get task from cut_video_info
+        Record_Cut_Video_info rec = *m_list.begin();
+        m_list.pop_front();
+        result.src_path = rec.str_src_path.toStdString();
+    } else {
+        //get task from load_file_info
+        //search oldest update time record
+        Record_Load_File_info rec = db_c->searchOldestRecordfromLoadTableByUpdateTime();
+        if (rec.n_id == 0 || rec.str_storage_dev_id.size() <= 0) {
+            DBG("searchOldestRecordfromChnTableByUpdateTime NULL");
+            return result;
+        }
+
+        result.src_path = rec.str_load_file_path.toStdString();
+
+        //淇敼鏇存柊鏃堕棿
+        rec.tim_update_time = QDateTime::currentDateTime();
+
+        //insert rec to cut_video_info && delete load_file_info
+        Record_Cut_Video_info cutVideoRec = {0, rec.str_storage_dev_id, rec.n_chn, rec.str_load_file_path, "", 0, false,
+                                             QDateTime::currentDateTime(), ""};
+
+        bool ret = db_c->insertCutVideoTableAndDeleteLoadFileTable(cutVideoRec, rec.str_storage_dev_id, rec.n_chn,
+                                                                   rec.tim_do_time);
+        if (!ret) {
+            return getCutFileManage();
+        }
+    }
+    return result;
+}
+
+
+bool cutManage::finishTask(const pfinishCutFileManage finishInfo) {
+    //鏍规嵁devID&chn&src_path鏇存敼cut_video_info瀹屾垚鏍囧織鍜岀洰鏍囪矾寰�,total
+    return db_c->updateCutVideoTable(finishInfo->src_path, finishInfo->dst_path, finishInfo->total);
+}
+
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h
new file mode 100644
index 0000000..1fa91aa
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/cutManage.h
@@ -0,0 +1,25 @@
+#ifndef CUT_MANAGE_H
+#define CUT_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+
+
+class cutManage : public TaskManage<getCutFileManage, pfinishCutFileManage> {
+public:
+//    cutManage();
+    cutManage(LDBTool *dbTool);
+
+    ~cutManage();
+
+    getCutFileManage getTask(void);
+
+    bool finishTask(const pfinishCutFileManage finishInfo);
+
+private:
+    void init(void);
+
+    std::list<Record_Cut_Video_info> m_list;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp
new file mode 100644
index 0000000..89c0753
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/dispathdatatype.hpp
@@ -0,0 +1,90 @@
+#ifndef DISPATHDATATYPE_HPP
+#define DISPATHDATATYPE_HPP
+
+#include <string>
+#include <QVector>
+#include <QDateTime>
+
+typedef struct {
+    int Year;
+    int Month;
+    int Day;
+    int Hour;
+    int Minute;
+    int Second;
+} TimeSt, *pTimeSt;
+
+typedef struct {
+    std::string strDevID;
+    int nChannelID;
+    TimeSt startTime;
+    TimeSt endTime;
+    std::string srcPath;
+} ChannelLoadFileManage, *pChannelLoadFileManage;
+
+
+//typedef struct
+//{
+//    int nChn;//閫氶亾鍙�
+//    QDateTime tCurrentTime;//姝e湪澶勭悊鐨勬枃浠跺紑濮嬫椂闂�
+//    bool bFinishFlag;//瀹屾垚鏍囧織
+//}ChnFinishFlag;
+
+//typedef struct
+//{
+//    int nDuration;//姣忔涓嬭浇鐨勬椂闀匡紝鍗曚綅灏忔椂
+//    int nTotalChn;//鎬婚�氶亾鏁�
+//    QVector<ChnFinishFlag> vChnInfo;//姣忎釜閫氶亾鐨勫畬鎴愪俊鎭�
+//}DevChnInfo;
+
+typedef struct {
+    std::string src_path;
+} getCutFileManage, *pgetCutFileManage;
+
+typedef struct {
+    std::string src_path;
+    std::string dst_path;
+    int total;
+} finishCutFileManage, *pfinishCutFileManage;
+
+typedef struct {
+    std::string src_path;
+    std::string en_sdk;
+    int pos;
+    int total;
+    std::string str_addr;
+    std::string str_det_thr;
+    std::string str_cmp_thr;
+    std::string strDevID;
+    int nChannelID;
+} getsdkHdlManage, *pgetsdkHdlManage;
+
+typedef struct {
+    std::string src_path;
+    int pos;
+} finishSdkHdlManage, *pfinishSdkHdlManage;
+
+
+static std::vector<int> chnString2Vec(std::string str_list) {
+    std::vector<int> result;
+    char *property_list = const_cast<char *>(str_list.c_str());
+    const char *c_Analyse = ",";
+    char *t_property;
+
+    char *t_save = NULL;
+    t_property = strtok_r(property_list, c_Analyse, &t_save);
+
+    while (t_property) {
+        std::string str_pro(t_property);
+
+        result.push_back(atoi(str_pro.c_str()));
+
+        t_property = strtok_r(t_save, c_Analyse, &t_save);
+
+    }
+    return result;
+}
+
+
+#endif // DISPATHDATATYPE_HPP
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp
new file mode 100644
index 0000000..318b018
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.cpp
@@ -0,0 +1,105 @@
+#include "../DB/LDBTool.h"
+#include <basic/debug/Debug.h>
+#include "loadManage.h"
+#include <QDateTime>
+#include <QString>
+#include <QVector>
+
+
+loadFileManage::loadFileManage(LDBTool *dbTool) : TaskManage(dbTool) {
+    init();
+}
+
+loadFileManage::~loadFileManage() {
+
+}
+
+void loadFileManage::init(void) {
+    //search all loadfile_info where finish_flag = 0
+    m_list = db_c->searchLoadFileTableAll();
+}
+
+
+#define Record_Cam_Chn2pChannelLoadFileManage(RCC, RESULT) \
+{\
+    RESULT.strDevID = RCC.str_storage_dev_id.toStdString();\
+    RESULT.nChannelID = RCC.n_chn;\
+    RESULT.startTime.Year = RCC.tim_do_time.date().year();\
+    RESULT.startTime.Month = RCC.tim_do_time.date().month();\
+    RESULT.startTime.Day = RCC.tim_do_time.date().day();\
+    RESULT.startTime.Hour = RCC.tim_do_time.time().hour();\
+    RESULT.startTime.Minute = RCC.tim_do_time.time().minute();\
+    RESULT.startTime.Second = RCC.tim_do_time.time().second();\
+    nDuration = db_c->searchDurationByDeviceId(RCC.str_storage_dev_id);\
+    /*endTime = RCC.tim_do_time.addSecs(nDuration * 3600);//nDuration 1鏍间负0.5灏忔椂*/\
+    endTime = RCC.tim_do_time.addSecs(nDuration * 1800);\
+    RESULT.endTime.Year = endTime.date().year();\
+    RESULT.endTime.Month = endTime.date().month();\
+    RESULT.endTime.Day = endTime.date().day();\
+    RESULT.endTime.Hour = endTime.time().hour();\
+    RESULT.endTime.Minute = endTime.time().minute();\
+    RESULT.endTime.Second = endTime.time().second();\
+    }
+
+ChannelLoadFileManage loadFileManage::getTask(void) {
+    ChannelLoadFileManage result;
+
+    QDateTime endTime;
+    int nDuration;
+
+    if (m_list.size() > 0) {
+        Record_Load_File_info rec = *m_list.begin();
+        m_list.pop_front();
+        Record_Cam_Chn2pChannelLoadFileManage(rec, result);
+    } else {
+        //get task from cam_chn_table
+        Record_Cam_Chn rec = db_c->searchOldestRecordfromChnTableByUpdateTime();
+        if (rec.n_id == 0 || rec.tim_do_time.secsTo(QDateTime::currentDateTime()) <= nDuration * 1800) {
+            DBG("searchOldestRecordfromChnTableByUpdateTime NULL"
+                    << rec.tim_do_time.secsTo(QDateTime::currentDateTime())
+                    << rec.tim_do_time.toString("yyyy-MM-dd hh:mm:ss").toStdString());
+            return result;
+        }
+        //#todo search  nDuration from deviceTable where rec.str_storage_dev_id
+
+        Record_Cam_Chn2pChannelLoadFileManage(rec, result);
+
+        Record_Load_File_info loadFileRec{0, rec.str_storage_dev_id, rec.n_chn, rec.tim_do_time, false, "",
+                                          QDateTime::currentDateTime(), ""};
+
+        //淇敼鏇存柊鏃堕棿鍜屽鐞嗘椂闂�
+        rec.tim_update_time = QDateTime::currentDateTime();
+        rec.tim_do_time = endTime;
+
+        if (rec.str_storage_dev_id.size() <= 0) {
+            ERR(" " << rec.str_storage_dev_id.toStdString());
+        }
+
+        //insert rec to loadfile_info && update cam_chn
+        bool ret = db_c->insertLoadFileTableAndUpdateChannelTable(loadFileRec, rec);
+        if (!ret) return ChannelLoadFileManage();
+
+    }
+    return result;
+}
+
+
+bool loadFileManage::finishTask(const pChannelLoadFileManage finishInfo) {
+    //TODO
+    //鏍规嵁璁惧id/閫氶亾鍙�/寮�濮嬫椂闂存壘鍒拌鏉¤褰曪紝鐒跺悗鏇存柊锛屽皢璇ユ潯璁板綍鐨勬爣蹇楃疆1,娣诲姞path
+    //update db
+    char charStr[256] = {0};
+    sprintf(charStr, "%4d-%02d-%02d %02d:%02d:%02d", finishInfo->startTime.Year, finishInfo->startTime.Month,
+            finishInfo->startTime.Day, finishInfo->startTime.Hour, finishInfo->startTime.Minute,
+            finishInfo->startTime.Second);
+    QString strBuffer = QString(charStr);
+
+    QDateTime time = QDateTime::fromString(strBuffer, "yyyy-MM-dd hh:mm:ss");
+
+    Record_Load_File_info loadFileRec{0, QString::fromStdString(finishInfo->strDevID), finishInfo->nChannelID,
+                                      time, true, QString::fromStdString(finishInfo->srcPath),
+                                      QDateTime::currentDateTime(), ""};
+    db_c->updateLoadFileTable(loadFileRec);
+    return true;
+}
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h
new file mode 100644
index 0000000..923b8ac
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/loadManage.h
@@ -0,0 +1,26 @@
+#ifndef LOAD_MANAGE_H
+#define LOAD_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+#include <list>
+#include <string>
+
+class loadFileManage : public TaskManage<ChannelLoadFileManage, pChannelLoadFileManage> {
+public:
+    loadFileManage(LDBTool *dbTool);
+
+    ~loadFileManage();
+
+    ChannelLoadFileManage getTask(void);
+
+    bool finishTask(const pChannelLoadFileManage finishInfo);
+
+private:
+    void init(void);
+
+    std::list<Record_Load_File_info> m_list;
+};
+
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
new file mode 100644
index 0000000..77d75ec
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.cpp
@@ -0,0 +1,91 @@
+#include <QString>
+#include "../DB/LDBTool.h"
+#include "sdkHdlManage.h"
+#include <QDateTime>
+#include <QVector>
+
+sdkHdlManage::sdkHdlManage(LDBTool *dbTool) : TaskManage(dbTool) {
+    init();
+}
+
+sdkHdlManage::~sdkHdlManage() {
+
+}
+
+void sdkHdlManage::init(void) {
+    //search all sdk_hdl_info
+    m_list = db_c->searchSdkHdlTableAll();
+
+}
+
+getsdkHdlManage sdkHdlManage::getTask(void) {
+    getsdkHdlManage result;
+    QDateTime endTime;
+
+    if (m_list.size() > 0) {
+        Record_Sdk_Hdl_info sdlHdlRec = *m_list.begin();
+        m_list.pop_front();
+        result.src_path = sdlHdlRec.str_src_path.toStdString();
+        result.total = sdlHdlRec.n_total;
+        result.pos = sdlHdlRec.n_pos;
+
+        auto t_rec = db_c->searchChnSdkTableByChannelId(sdlHdlRec.str_storage_dev_id,
+                                                        sdlHdlRec.n_chn);//.str_sdks.toStdString();
+        result.en_sdk = t_rec.str_sdks.toStdString();
+
+        result.str_addr = db_c->searchChannelTableByChannelId(sdlHdlRec.str_storage_dev_id,
+                                                              sdlHdlRec.n_chn).str_addr.toStdString();
+
+        result.str_cmp_thr = t_rec.str_cmp_thr.toStdString();
+        result.str_det_thr = t_rec.str_det_thr.toStdString();
+        result.strDevID = t_rec.str_storage_dev_id.toStdString();
+        result.nChannelID = t_rec.n_chn;
+
+    } else {
+        //get task from cut_video_info
+        Record_Cut_Video_info rec = db_c->searchOldestRecordfromCutTableByUpdateTime();
+
+        if (rec.str_storage_dev_id.size() > 0) {
+            result.src_path = rec.str_dst_path.toStdString();
+            result.total = rec.n_total;
+            result.pos = 0;
+
+            auto t_rec = db_c->searchChnSdkTableByChannelId(rec.str_storage_dev_id,
+                                                            rec.n_chn);//.str_sdks.toStdString();
+
+            result.en_sdk = t_rec.str_sdks.toStdString();
+
+            result.str_addr = db_c->searchChannelTableByChannelId(rec.str_storage_dev_id,
+                                                                  rec.n_chn).str_addr.toStdString();
+
+            result.str_cmp_thr = t_rec.str_cmp_thr.toStdString();
+            result.str_det_thr = t_rec.str_det_thr.toStdString();
+            result.strDevID = t_rec.str_storage_dev_id.toStdString();
+            result.nChannelID = t_rec.n_chn;
+
+            //insert rec to sdk_hdl_info && delete cut_video_info
+
+            Record_Sdk_Hdl_info sdlHdlRec{0, rec.str_storage_dev_id, rec.n_chn, rec.str_dst_path, rec.n_total, 0, ""};
+            bool ret = db_c->insertSdkHdlTableAndDeleteCutVideoTable(sdlHdlRec, rec.str_storage_dev_id, rec.n_chn,
+                                                                     rec.str_src_path);
+            if (!ret) {
+                return getsdkHdlManage();
+            }
+        }
+    }
+    return result;
+}
+
+
+bool sdkHdlManage::updateSdkHdlPos(const pfinishSdkHdlManage finishInfo) {
+    //鏍规嵁devID&chn&src_path锛屾洿鏂皊dk_hdl_info鐨刾os锛宲os+1
+    return db_c->updateSdkHdlTablePos(QString::fromStdString(finishInfo->src_path), finishInfo->pos);
+}
+
+
+bool sdkHdlManage::finishTask(const pfinishSdkHdlManage finishInfo) {
+    //TODO
+    //鏍规嵁devID&chn&src_path 鍒犻櫎sdk_hdl_info杩欐潯璁板綍
+    return db_c->deleteSdkHdlTable(QString::fromStdString(finishInfo->src_path));
+}
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
new file mode 100644
index 0000000..301d517
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/sdkHdlManage.h
@@ -0,0 +1,27 @@
+#ifndef SDK_HDL_MANAGE_H
+#define SDK_HDL_MANAGE_H
+
+#include "taskmanage.h"
+#include "dispathdatatype.hpp"
+
+
+class sdkHdlManage : public TaskManage<getsdkHdlManage, pfinishSdkHdlManage> {
+public:
+    sdkHdlManage(LDBTool *dbTool);
+
+    ~sdkHdlManage();
+
+    getsdkHdlManage getTask();
+
+    bool finishTask(const pfinishSdkHdlManage finishInfo);
+
+    bool updateSdkHdlPos(const pfinishSdkHdlManage finishInfo);
+
+private:
+    void init(void);
+
+    std::list<Record_Sdk_Hdl_info> m_list;
+};
+
+#endif
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h
new file mode 100644
index 0000000..55e8e4e
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/dispatchTool/taskmanage.h
@@ -0,0 +1,29 @@
+#ifndef TASKMANAGE
+#define TASKMANAGE
+
+#include "../DB/LDBTool.h"
+
+template<typename TASKTYPE, typename FINSHTYPE>
+class TaskManage {
+public:
+    TaskManage(LDBTool *dbTool) : db_c(dbTool) {
+
+    }
+
+    ~TaskManage() {
+
+    }
+
+    virtual TASKTYPE getTask() = 0;
+
+    virtual bool finishTask(const FINSHTYPE finishInfo) = 0;
+
+private:
+    virtual void init(void) = 0;
+
+protected:
+    LDBTool *db_c;
+};
+
+#endif // TASKMANAGE
+
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp
new file mode 100644
index 0000000..be0bab1
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/main.cpp
@@ -0,0 +1,436 @@
+//#include "widget.h"
+//#include <QApplication>
+#include "LDBTool.h"
+#include <QObject>
+#include <list>
+#include <string>
+#include <iostream>
+#include <QDebug>
+#include "myThread.h"
+#include "dbtest.h"
+#if 1
+
+//dev
+
+
+int main(int argc, char *argv[])
+{
+
+    {
+        CallBackFunc callf;
+
+        DbTest test_db/*(std::bind(&CallBackFunc::callback_func, &callf, std::placeholders::_1))*/;
+//        DbTest test_db2;
+
+        auto sp_task(std::make_shared<std::string>("haikang:12:34:56:78:90:ab"));
+        auto sp_task2(std::make_shared<std::string>("dahua:12:34:56:78:90:ab"));
+//        test_db.put_task(sp_task);
+//        test_db.put_task(sp_task2);
+//        test_db.put_task(sp_task);
+//        test_db.put_task(sp_task2);
+//        test_db.put_task(sp_task);
+//        test_db.put_task(sp_task2);
+//        test_db.put_task(sp_task);
+//        test_db.put_task(sp_task2);
+//        test_db2.put_task(sp_task);
+//        test_db2.put_task(sp_task2);
+
+        test_db.beginThreads(10);
+//        test_db2.beginThreads(1);
+
+        while(1){
+            test_db.put_task(sp_task);
+            test_db.put_task(sp_task2);
+        }
+
+    }
+
+
+    return 0;
+}
+
+
+
+
+
+#else
+
+//sdkhdl
+int main(int argc, char *argv[])
+{
+//    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Chn_Sdk record;
+
+    qDebug() << QDateTime::currentDateTime();
+
+    record.n_id = 0;
+    record.str_storage_dev_id = "str_storage_dev_id1";
+    record.n_chn = 111;
+    record.str_sdks = "1,2,3";
+    record.str_reserved = "str_reserved1";
+
+    test.insertChnSdkTable(record);
+
+    Record_Chn_Sdk record2;
+    record2.n_id = 0;
+    record2.str_storage_dev_id = "str_storage_dev_id2";
+    record2.n_chn = 222;
+    record2.str_sdks = "2,3,4";
+    record2.str_reserved = "str_reserved2";
+    test.insertChnSdkTable(record2);
+
+    std::list<Record_Chn_Sdk> vec;
+    vec = test.searchChnSdkTableAll();
+    //    std::cout << vec << std::endl;
+
+    record2.str_sdks = "5,6,7";
+    test.updateChnSdkTable(record2);
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    int chn1 = 111;
+    int chn2 = 222;
+
+    Record_Chn_Sdk rec1 = test.searchChnSdkTableByChannelId(id1, chn1);
+    test.deleteChnSdkTable(id1, chn2);
+    test.deleteChnSdkTable(id2, chn1);
+    test.deleteChnSdkTable(id1, chn1);
+    test.deleteChnSdkTable(id2, chn2);
+
+    return 0;//a.exec();
+}
+//sdkhdl
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Sdk_Hdl_info record;
+
+    qDebug() << QDateTime::currentDateTime();
+
+    record.n_id = 0;
+    record.str_storage_dev_id = "str_storage_dev_id1";
+    record.n_chn = 111;
+    record.str_src_path = "str_src_path1";
+    record.n_total = 11;
+    record.n_pos = 0;
+    record.str_reserved = "str_reserved1";
+
+    test.insertSdkHdlTable(record);
+
+    Record_Sdk_Hdl_info record2;
+    record2.n_id = 0;
+    record2.str_storage_dev_id = "str_storage_dev_id2";
+    record2.n_chn = 222;
+    record2.str_src_path = "str_src_path2";
+    record2.n_total = 22;
+    record2.n_pos = 0;
+    record2.str_reserved = "str_reserved2";
+    test.insertSdkHdlTable(record2);
+
+
+    std::list<Record_Sdk_Hdl_info> vec;
+    vec = test.searchSdkHdlTableAll();
+    //    std::cout << vec << std::endl;
+
+    record2.n_pos = 6;
+    test.updateSdkHdlTable(record2);
+
+    test.updateSdkHdlTablePos("str_src_path1", 7);
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    int chn1 = 111;
+    int chn2 = 222;
+//    std::list<Record_Sdk_Hdl_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+//    std::list<Record_Sdk_Hdl_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+    //    std::cout << vec1 << std::endl;
+    //    std::cout << vec2 << std::endl;
+    //Record_Sdk_Hdl_info recOldest = test.searchOldestRecordfromSdkHdlTableByUpdateTime();
+//    Record_Sdk_Hdl_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+//    Record_Sdk_Hdl_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+    test.insertSdkHdlTableAndDeleteCutVideoTable(record2, id1, chn1, "str_src_path1");
+    test.deleteSdkHdlTable(QString::fromStdString("str_src_path1"));
+    test.deleteSdkHdlTable(QString::fromStdString("str_src_path2"));
+
+    return a.exec();
+}
+//cutvideo
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Cut_Video_info record;
+
+    qDebug() << QDateTime::currentDateTime();
+
+    record.n_id = 0;
+    record.str_storage_dev_id = "str_storage_dev_id1";
+    record.n_chn = 111;
+    record.str_src_path = "str_src_path1";
+    record.str_dst_path = "";
+    record.n_total = 0;
+    record.b_finish_flag = 0;
+    record.tim_update_time = QDateTime::currentDateTime();
+    record.str_reserved = "str_reserved1";
+
+    test.insertCutVideoTable(record);
+
+    Record_Cut_Video_info record2;
+    record2.n_id = 0;
+    record2.str_storage_dev_id = "str_storage_dev_id2";
+    record2.n_chn = 222;
+    record2.str_src_path = "str_src_path2";
+    record2.str_dst_path = "";
+    record2.n_total = 0;
+    record2.b_finish_flag = 0;
+    record2.tim_update_time = QDateTime::currentDateTime();
+    record2.str_reserved = "str_reserved2";
+    test.insertCutVideoTable(record2);
+
+
+    std::list<Record_Cut_Video_info> vec;
+    vec = test.searchCutVideoTableAll();
+    //    std::cout << vec << std::endl;
+
+    record2.b_finish_flag = 1;
+    record2.str_dst_path = "str_dst_path222";
+    record2.n_total = 6;
+    record2.tim_update_time = QDateTime::currentDateTime();
+    test.updateCutVideoTable(record2);
+
+    test.updateCutVideoTable("str_src_path1", "str_dst_path111", 7);
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    int chn1 = 111;
+    int chn2 = 222;
+//    std::list<Record_Cut_Video_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+//    std::list<Record_Cut_Video_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+    //    std::cout << vec1 << std::endl;
+    //    std::cout << vec2 << std::endl;
+    Record_Cut_Video_info recOldest = test.searchOldestRecordfromCutTableByUpdateTime();
+//    Record_Cut_Video_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+//    Record_Cut_Video_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+    test.insertCutVideoTableAndDeleteLoadFileTable(record2, "str_storage_dev_id2",222,\
+                                                   QDateTime::fromString("2018-08-18 16:38:49.819","yyyy-MM-dd hh:mm:ss.zzz"));
+
+    test.deleteCutVideoTable(id1, chn1, QString::fromStdString("str_src_path1"));
+    test.deleteCutVideoTable(id2, chn2, QString::fromStdString("str_src_path2"));
+
+    return a.exec();
+}
+//loadfile
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Load_File_info record;
+
+    qDebug() << QDateTime::currentDateTime();
+
+    record.n_id = 0;
+    record.str_storage_dev_id = "str_storage_dev_id1";
+    record.n_chn = 111;
+    record.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+    record.b_finish_flag = 0;
+    record.str_load_file_path = "";
+    record.tim_update_time = QDateTime::currentDateTime();
+    record.str_reserved = "str_reserved1";
+
+    test.insertLoadFileTable(record);
+
+    Record_Load_File_info record2;
+    record2.n_id = 0;
+    record2.str_storage_dev_id = "str_storage_dev_id2";
+    record2.n_chn = 222;
+    record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+    record2.b_finish_flag = 0;
+    record2.str_load_file_path = "";
+    record2.tim_update_time = QDateTime::currentDateTime();
+    record2.str_reserved = "str_reserved2";
+    test.insertLoadFileTable(record2);
+
+
+    std::list<Record_Load_File_info> vec;
+    vec = test.searchLoadFileTableAll();
+    //    std::cout << vec << std::endl;
+
+    record2.b_finish_flag = 1;
+    record2.str_load_file_path = "str_load_file_path";
+    record2.tim_update_time = QDateTime::currentDateTime();
+    test.updateLoadFileTable(record2);
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    int chn1 = 111;
+    int chn2 = 222;
+//    std::list<Record_Load_File_info> vec1 = test.searchChannelTableByChannelId(id1, chn1);
+//    std::list<Record_Load_File_info> vec2 = test.searchChannelTableByChannelId(id2, chn2);
+    //    std::cout << vec1 << std::endl;
+    //    std::cout << vec2 << std::endl;
+    Record_Load_File_info recOldest = test.searchOldestRecordfromLoadTableByUpdateTime();
+//    Record_Load_File_info recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+//    Record_Load_File_info recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+
+    Record_Cam_Chn chn_record2 = test.searchChannelTableByChannelId("str_storage_dev_id2", 222);
+    chn_record2.tim_do_time = chn_record2.tim_do_time.addSecs(3600);
+    chn_record2.tim_update_time = QDateTime::currentDateTime();
+    test.insertLoadFileTableAndUpdateChannelTable(record2, chn_record2);
+
+    test.deleteLoadFileTable(id1, chn1, record.tim_do_time);
+    test.deleteLoadFileTable(id2, chn2, record2.tim_do_time);
+
+    return a.exec();
+}
+//camchn
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Cam_Chn chn_record;
+
+    //    std::cout << QDateTime().toString()<< std::endl;
+
+    chn_record.n_id = 1;
+    chn_record.str_storage_dev_id = "str_storage_dev_id1";
+    chn_record.n_chn = 111;
+    chn_record.str_chn_name = "str_chn_name1";
+    chn_record.str_addr = "str_addr1";
+    chn_record.str_longitude = "str_longitude1";
+    chn_record.str_latitude = "str_latitude1";
+    chn_record.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+    chn_record.tim_update_time = QDateTime::currentDateTime();
+    chn_record.str_reserved = "str_reserved1";
+
+
+    test.insertChannelTable(chn_record);
+
+    Record_Cam_Chn chn_record2;
+    chn_record2.n_id = 2;
+    chn_record2.str_storage_dev_id = "str_storage_dev_id2";
+    chn_record2.n_chn = 222;
+    chn_record2.str_chn_name = "str_chn_name2";
+    chn_record2.str_addr = "str_addr2";
+    chn_record2.str_longitude = "str_longitude2";
+    chn_record2.str_latitude = "str_latitude2";
+    chn_record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+    chn_record2.tim_update_time = QDateTime::currentDateTime();
+    chn_record2.str_reserved = "str_reserved2";
+    test.insertChannelTable(chn_record2);
+
+
+    std::list<Record_Cam_Chn> vec;
+    vec = test.searchChannelTableAll();
+    //    std::cout << vec << std::endl;
+
+    chn_record2.n_id = 2;
+    chn_record2.str_storage_dev_id = "str_storage_dev_id2";
+    chn_record2.n_chn = 222;
+    chn_record2.str_chn_name = "str_chn_name3";
+    chn_record2.str_addr = "str_addr3";
+    chn_record2.str_longitude = "str_longitude3";
+    chn_record2.str_latitude = "str_latitude3";
+    chn_record2.tim_do_time = QDateTime::currentDateTime().addDays(-1);
+    chn_record2.tim_update_time = QDateTime::currentDateTime();
+    chn_record2.str_reserved = "str_reserved3";
+    test.updateChannelTable(chn_record2);
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    int chn1 = 111;
+    int chn2 = 222;
+    Record_Cam_Chn vec1 = test.searchChannelTableByChannelId(id1, chn1);
+    Record_Cam_Chn vec2 = test.searchChannelTableByChannelId(id2, chn2);
+    //    std::cout << vec1 << std::endl;
+    //    std::cout << vec2 << std::endl;
+    Record_Cam_Chn recOldest = test.searchOldestRecordfromChnTableByUpdateTime();
+    Record_Cam_Chn recOldestID = test.searchOldestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+    Record_Cam_Chn recNewestID = test.searchNewestRecordfromChnTableByChannelId(QString::fromStdString("str_storage_dev_id2"), 222);
+
+    test.deleteChannelTable(id1, chn2);
+    test.deleteChannelTable(id2, chn1);
+    test.deleteChannelTable(id1, chn1);
+    test.deleteChannelTable(id2, chn2);
+
+    return a.exec();
+}
+
+//dev
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    LDBTool test;
+    Record_Storage_Dev dev_record;
+
+    dev_record.n_id = 0;
+    dev_record.str_storage_dev_id = "str_storage_dev_id1";
+    dev_record.str_dev_name = "str_dev_name1";
+    dev_record.n_total_chn = 32;
+    dev_record.str_all_chn_num = "str_all_chn_num";
+    dev_record.str_addr = "str_addr";
+    dev_record.str_longitude = "str_longitude";
+    dev_record.str_latitude = "str_latitude";
+    dev_record.str_ip = "str_ip";
+    dev_record.n_port = 1;
+    dev_record.str_username = "str_username";
+    dev_record.str_password = "str_password";
+    dev_record.n_duration = 1;
+    dev_record.str_reserved = "str_reserved";
+
+    test.insertLDeviceTable(dev_record);
+
+    Record_Storage_Dev dev_record1;
+    dev_record1.n_id = 2;
+    dev_record1.str_storage_dev_id = "str_storage_dev_id2";
+    dev_record1.str_dev_name = "str_dev_name2";
+    dev_record1.n_total_chn = 16;
+    dev_record1.str_all_chn_num = "str_all_chn_num";
+    dev_record1.str_addr = "str_addr2";
+    dev_record1.str_longitude = "str_longitude2";
+    dev_record1.str_latitude = "str_latitude2";
+    dev_record1.str_ip = "str_ip2";
+    dev_record1.n_port = 222;
+    dev_record1.str_username = "str_username2";
+    dev_record1.str_password = "str_password2";
+    dev_record1.n_duration = 2;
+    dev_record1.str_reserved = "str_reserved2";
+    test.insertLDeviceTable(dev_record1);
+
+    Record_Storage_Dev dev_record2;
+    dev_record2.n_id = 2;
+    dev_record2.str_storage_dev_id = "str_storage_dev_id2";
+    dev_record2.str_dev_name = "str_dev_name3";
+    dev_record2.n_total_chn = 16;
+    dev_record2.str_all_chn_num = "str_all_chn_num3";
+    dev_record2.str_addr = "str_addr3";
+    dev_record2.str_longitude = "str_longitude3";
+    dev_record2.str_latitude = "str_latitude3";
+    dev_record2.str_ip = "str_ip3";
+    dev_record2.n_port = 333;
+    dev_record2.str_username = "str_username3";
+    dev_record2.str_password = "str_password3";
+    dev_record2.n_duration = 3;
+    dev_record2.str_reserved = "str_reserved3";
+    test.updateLDeviceTable(dev_record2);
+
+
+    std::list<Record_Storage_Dev> vec;
+    vec = test.searchDeviceTableAll();
+
+    QString id1("str_storage_dev_id1");
+    QString id2("str_storage_dev_id2");
+    Record_Storage_Dev s1 = test.searchDeviceTableByDeviceId(id1);
+    Record_Storage_Dev s2 = test.searchDeviceTableByDeviceId(id2);
+
+    int n = test.searchDeviceNumber();
+
+    int d = test.searchDurationByDeviceId(id1);
+
+    test.deleteLDeviceTable(id1);
+    test.deleteLDeviceTable(id2);
+
+    return a.exec();
+}
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp b/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp
new file mode 100644
index 0000000..37b2f9c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/mySem.hpp
@@ -0,0 +1,70 @@
+#ifndef MYSEM_H_XZL_201808141050
+#define MYSEM_H_XZL_201808141050
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+enum {
+    SEMPHORE_FAIL = (-1),
+    SEMPHORE_SUCCESS = 0,
+    SEMPHORE_TIME_OUT = 1
+};
+
+class Semphore {
+public:
+    Semphore(const int sigs = 0) : m_signals(sigs), m_blocked(0) {}
+
+    ~Semphore() {}
+
+private:
+    Semphore(const Semphore &) = delete;
+
+    Semphore(Semphore &&) = delete;
+
+    Semphore operator=(const Semphore &) = delete;
+
+private:
+    std::mutex m_mtx;
+    std::condition_variable m_cv;
+    int m_signals;
+    int m_blocked;
+
+public:
+    int wait(const int time_out_ms = (-1)) {
+        std::unique_lock<std::mutex> ul(m_mtx);
+        if (m_signals > 0) {
+            --m_signals;
+            return SEMPHORE_SUCCESS;
+        } else {
+            ++m_blocked;
+        }
+
+        if (time_out_ms >= 0) {
+            std::chrono::milliseconds wait_time_ms(time_out_ms);
+            auto result = m_cv.wait_for(ul, wait_time_ms, [&] { return m_signals > 0; });
+            --m_blocked;
+            if (result) {
+                --m_signals;
+                return SEMPHORE_SUCCESS;
+            } else {
+                return SEMPHORE_TIME_OUT;
+            }
+        } else {
+            m_cv.wait(ul, [&] { return m_signals > 0; });
+            --m_blocked;
+            --m_signals;
+            return SEMPHORE_SUCCESS;
+        }
+    }
+
+    inline void signal(const int count = 1) {
+        std::lock_guard<std::mutex> lg(m_mtx);
+        m_signals += count;
+        if (m_blocked > 0) {
+            m_cv.notify_one();
+        }
+    }
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp
new file mode 100644
index 0000000..7dd893d
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.cpp
@@ -0,0 +1 @@
+#include "myThread.h"
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h
new file mode 100644
index 0000000..8986b8c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/myThread.h
@@ -0,0 +1,128 @@
+#ifndef MYTHREAD_H_XZL_201808081711
+#define MYTHREAD_H_XZL_201808081711
+
+#include <thread>
+#include <vector>
+#include <list>
+#include <memory>
+#include <thread>
+#include <chrono>
+#include <functional>
+#include "mySem.hpp"
+
+struct threadInfo {
+    bool isRunning;
+    std::shared_ptr<std::thread> thd;
+};
+enum {
+    PROCESSOR_FAIL = -1,
+    PROCESSOR_SUCCESS = 0,
+    PROCESSOR_TIME_OUT = 1,
+    PROCESSOR_QUEUE_FULL = 2,
+    PROCESSOR_QUEUE_EMPTY = 3
+};
+
+template<typename PACKET>
+class mythread {
+    using TASK_FUNCTION = std::function<void(std::shared_ptr<PACKET> &)>;
+public:
+    mythread(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) {}
+
+    virtual ~mythread() {}
+
+    int beginThreads(const int count) {
+        for (int i = 0; i < count; i++) {
+            threadInfo thInfo;
+            thInfo.isRunning = true;
+            m_thds.push_back(thInfo);
+        }
+        for (auto &ele:m_thds) {
+            ele.thd = std::make_shared<std::thread>([&]() -> void {
+                std::shared_ptr<PACKET> sp_task(nullptr);
+                int status = 0;
+                while (ele.isRunning) {
+                    status = get_task(sp_task, 200);
+                    if (status == PROCESSOR_SUCCESS) {
+                        doFunc(sp_task);
+                        if (m_task_function != nullptr) {
+                            m_task_function(sp_task);
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    int endThreads() {
+        for (auto &ele:m_thds) {
+            ele.isRunning = false;
+            ele.thd->join();
+        }
+    }
+
+    int put_task(std::shared_ptr<PACKET> &sp_task, int *p_new_size = nullptr) {
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+        int cur_size = static_cast<int>(m_taskList.size());
+        if (cur_size >= m_task_max_count) {
+            if (p_new_size != nullptr) {
+                *p_new_size = cur_size;
+            }
+            return PROCESSOR_QUEUE_FULL;
+        }
+
+        m_taskList.emplace_back(sp_task);
+        m_task_semphore.signal();
+
+        if (p_new_size != nullptr) {
+            *p_new_size = cur_size + 1;
+        }
+
+        return PROCESSOR_SUCCESS;
+    }
+
+    int get_task(std::shared_ptr<PACKET> &sp_task, const int ms = (-1), int *p_new_size = nullptr) {
+        if (m_task_semphore.wait(ms) != SEMPHORE_SUCCESS) {
+            return PROCESSOR_TIME_OUT;
+        }
+
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+
+        /*
+        * 鍏冪礌鍏ラ槦鏃朵俊鍙蜂笌鍏冪礌鏄�1瀵�1鍏崇郴锛岀敱浜庡彲浠ヤ竴娆″彇鍏ㄩ儴闃熷垪鍏冪礌锛�
+        * 鎵�浠ュ彲鑳藉瓨鍦ㄧ瓑寰呬俊鍙锋垚鍔熶絾闃熷垪涓凡鏃犲厓绱犵殑鎯呭喌锛屾晠鍦ㄦ鍒ゆ柇
+        */
+        if (m_taskList.empty()) {
+            if (p_new_size != nullptr) {
+                *p_new_size = 0;
+            }
+            return PROCESSOR_QUEUE_EMPTY;
+        }
+
+        sp_task = std::move(m_taskList.front());
+        m_taskList.pop_front();
+
+        if (p_new_size != nullptr) {
+            *p_new_size = static_cast<int>(m_taskList.size());
+        }
+
+        return PROCESSOR_SUCCESS;
+    }
+
+    int get_taskListSize() {
+        std::lock_guard<std::mutex> auto_lock(m_task_lock);
+        return m_taskList.size();
+    }
+
+    virtual void doFunc(std::shared_ptr<PACKET> spPacket) {}
+
+private:
+    std::vector<threadInfo> m_thds;
+    std::mutex m_task_lock;
+    Semphore m_task_semphore;
+    volatile int m_task_max_count = 1024;
+    std::list<std::shared_ptr<PACKET>> m_taskList;
+    TASK_FUNCTION m_task_function = nullptr;
+};
+
+#endif
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp
new file mode 100644
index 0000000..de81017
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.cpp
@@ -0,0 +1,14 @@
+#include "widget.h"
+#include "ui_widget.h"
+
+Widget::Widget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::Widget)
+{
+    ui->setupUi(this);
+}
+
+Widget::~Widget()
+{
+    delete ui;
+}
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.h b/QiaoJiaSystem/VideoServer/QiaoJia/widget.h
new file mode 100644
index 0000000..896177c
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.h
@@ -0,0 +1,22 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+namespace Ui {
+class Widget;
+}
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit Widget(QWidget *parent = 0);
+    ~Widget();
+
+private:
+    Ui::Widget *ui;
+};
+
+#endif // WIDGET_H
diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui b/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui
new file mode 100644
index 0000000..8541684
--- /dev/null
+++ b/QiaoJiaSystem/VideoServer/QiaoJia/widget.ui
@@ -0,0 +1,20 @@
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Widget</string>
+  </property>
+ </widget>
+ <layoutDefault spacing="6" margin="11" />
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/QiaoJiaSystem/YoloServer/CMakeLists.txt b/QiaoJiaSystem/YoloServer/CMakeLists.txt
new file mode 100644
index 0000000..de53fcc
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/CMakeLists.txt
@@ -0,0 +1,103 @@
+cmake_minimum_required(VERSION 3.5)
+project(YoloServer)
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../build)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE debug)
+add_definitions(-DDEBUG_ERR -DDEBUG_INFO)
+add_definitions(-DGLOG)
+add_compile_options(-fPIC)
+
+SET(LIBS
+    glog
+    Ice
+    jsoncpp
+    pthread
+    opencv_world
+    Qt5Core
+    darknet
+    cuda
+    cudart
+    cublas
+    curand
+    )
+include_directories(
+    ./rpc
+    ../../BasicPlatForm
+    ../../BasicPlatForm/libs/opencv/include
+    ../../BasicPlatForm/libs/jsoncpp/include
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/ffmpeg/include
+    ../../BasicPlatForm/libs/DarkNet/include
+    /usr/local/cuda/include/
+    /usr/include/x86_64-linux-gnu/qt5
+
+    #glog
+    ../../BasicPlatForm/libs/glog/include
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/jsoncpp/lib
+    ../../BasicPlatForm/libs/openssl/lib/
+    ../../BasicPlatForm/libs/Ice-3.7.0/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/DarkNet/lib
+    #glog
+    ../../BasicPlatForm/libs/glog/lib
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/DarkNet
+)
+
+link_directories(
+    /usr/local/cuda/lib64
+    ../../BasicPlatForm/libs/opencv/lib
+    ../../BasicPlatForm/libs/Ice-3.7.0/include
+    ../../BasicPlatForm/libs/DarkNet/lib
+    ../../BasicPlatForm/libs/ffmpeg/lib
+)
+
+add_executable(${PROJECT_NAME}
+    main.cpp
+    YoloDetectServerI.cpp
+    rpc/YoloServer.cpp
+    )
+
+target_link_libraries(${PROJECT_NAME}
+    ${LIBS}
+    )
+
+#add_executable(YoloDetectClientTest
+#    ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+#    ../../BasicPlatForm/basic/util/opencv/CvUtil.h
+#    ../../BasicPlatForm/basic/pipe/PipeConnector.cpp
+#    ../../BasicPlatForm/basic/pipe/PipeConnector.h
+#    ../../BasicPlatForm/basic/pipe/PipeController.cpp
+#    ../../BasicPlatForm/basic/pipe/PipeController.h
+#    ../../BasicPlatForm/basic/pipe/PipeElement.cpp
+#    ../../BasicPlatForm/basic/pipe/PipeElement.h
+#
+#    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+#    ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.h
+#    ../../BasicPlatForm/basic/pipe_element/ImageShowElement.cpp
+#    ../../BasicPlatForm/basic/pipe_element/ImageShowElement.h
+#    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.cpp
+#    ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.h
+#    rpc/YoloServer.cpp
+#    YoloDetectClientTest.cpp
+#    YoloRpcElement.cpp
+#    YoloRpcElement.h
+#    ImageDrawElement.cpp
+#    )
+#
+#target_link_libraries(YoloDetectClientTest
+#    Ice
+#    Qt5Core
+#    avformat avcodec avutil avfilter swscale swresample
+#    opencv_world
+#    pthread
+#    )
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.cpp b/QiaoJiaSystem/YoloServer/DnDetect.cpp
new file mode 100644
index 0000000..498ba0f
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/DnDetect.cpp
@@ -0,0 +1,121 @@
+#include "DnDetect.h"
+
+DnDetect::DnDetect(const int gpuIndex):m_net(nullptr),m_thresh(0.5),m_hier_thresh(0.5),m_nms(0.45),names(nullptr),alphabet(nullptr)
+{
+    cuda_set_device(gpuIndex);
+
+    char *datacfg = "cfg/coco.data";
+    char *cfgfile = "cfg/yolov3.cfg";
+    char *weightfile = "./yolov3.weights";
+
+    double loadtime = what_time_is_it_now();
+    list *options = read_data_cfg(datacfg);
+    char *name_list = option_find_str(options, "names", "data/names.list");
+    names = get_labels(name_list);
+
+    alphabet = load_alphabet();
+    m_net = load_network(cfgfile, weightfile, 0);
+    set_batch_network(m_net, 1);
+    printf("load mod use %f seconds.\n", what_time_is_it_now()-loadtime);
+
+    srand(2222222);
+    double attime;
+    float nms=.45;
+}
+
+DnDetect::~DnDetect()
+{
+
+}
+
+std::vector<cv::Rect2f> DnDetect::detect(cv::Mat & img)
+{
+
+    double bttime=what_time_is_it_now();
+    image im = matToImg(img);
+    image sized = letterbox_image(im, m_net->w, m_net->h);
+    layer l = m_net->layers[m_net->n-1];
+
+    float *X = sized.data;
+    //attime=what_time_is_it_now();
+    network_predict(m_net, X);
+    //printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
+    int nboxes = 0;
+    detection *dets = get_network_boxes(m_net, im.w, im.h, 0.5f, 0.1f, 0, 1, &nboxes);
+    if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
+  //  draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
+    std::vector<cv::Rect2f> rects;
+    for(int i=0;i<nboxes;i++)
+    {
+        std::vector<float> vec(80);
+        memcpy(&vec[0],dets[i].prob,sizeof(float)*80);
+        int type = -1;
+        for(int j = 0; j < l.classes; ++j){
+            if(j != 0){
+                continue;
+            }
+            if (dets[i].prob[j] > m_thresh){
+                if (type < 0) {
+                    type = j;
+                } else {
+                }
+            } else{
+            }
+        }
+        if(type >= 0){
+            if(type != 0){
+                continue;
+            }
+            float left  = (dets[i].bbox.x-dets[i].bbox.w/2.);
+            float top   = (dets[i].bbox.y-dets[i].bbox.h/2.);
+            cv::Rect2f rect(left,top,dets[i].bbox.w,dets[i].bbox.h);
+            std::cout<<"rect.x : "<<left<<" rect.y : "<<top<<" rect.w : "<<rect.width<<" rect.h : "<<rect.height<<std::endl;
+            rects.push_back(rect);
+        }
+
+
+    }
+    free_detections(dets, nboxes);
+//    show_image(im, "Video");
+//    cv::waitKey(10);
+    free_image(im);
+    free_image(sized);
+    printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
+    return rects;
+}
+
+image DnDetect::matToImg(cv::Mat& RefImg) {
+    CV_Assert(RefImg.depth() == CV_8U);
+
+    int h = RefImg.rows;
+    int w = RefImg.cols;
+    int channels = RefImg.channels();
+    image im = make_image(w, h, 3);
+    int count = 0;
+    switch(channels){
+        case 1:{
+            cv::MatIterator_<unsigned char> it, end;
+            for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it){
+                im.data[count] = im.data[w*h + count] = im.data[w*h*2 + count] = (float)(*it)/255.0;
+
+                ++count;
+            }
+            break;
+        }
+        case 3:{
+            cv::MatIterator_<cv::Vec3b> it, end;
+            for (it = RefImg.begin<cv::Vec3b>(), end = RefImg.end<cv::Vec3b>(); it != end; ++it){
+                im.data[count] = (float)(*it)[2]/255.0;
+                im.data[w*h + count] = (float)(*it)[1]/255.0;
+                im.data[w*h*2 + count] = (float)(*it)[0]/255.0;
+                ++count;
+            }
+            break;
+        }
+
+        default:
+            printf("Channel number not supported.\n");
+            break;
+    }
+    return im;
+}
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.h b/QiaoJiaSystem/YoloServer/DnDetect.h
new file mode 100644
index 0000000..3718aed
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/DnDetect.h
@@ -0,0 +1,26 @@
+#ifndef DNDETECT_H
+#define DNDETECT_H
+#define GPU
+#include <darknet.h>
+#include <opencv2/opencv.hpp>
+class DnDetect
+{
+public:
+    DnDetect(const int gpuIndex);
+    virtual ~DnDetect();
+
+    std::vector<cv::Rect2f> detect(cv::Mat&);
+private:
+    image matToImg(cv::Mat& RefImg);
+
+private:
+    network *m_net;
+    float m_thresh;
+    float m_hier_thresh;
+    float m_nms;
+    char **names;
+
+    image **alphabet;
+};
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
new file mode 100644
index 0000000..0084b09
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
@@ -0,0 +1,30 @@
+#include "ImageDrawElement.h"
+
+
+ImageDrawElement::ImageDrawElement()
+{
+}
+
+void ImageDrawElement::setRects(const std::vector<cv::Rect2f> &value)
+{
+    rectsMtx.lock();
+    rectsBuffer = value;
+    rectsUpdated = true;
+    rectsMtx.unlock();
+}
+
+void ImageDrawElement::processImage(cv::Mat &image)
+{
+    if(rectsUpdated){
+        rectsMtx.lock();
+        rects = rectsBuffer;
+        rectsUpdated = false;
+        rectsMtx.unlock();
+    }
+    for(size_t i = 0;i<rects.size();i++){
+        cv::Rect2f& rectf = rects[i];
+        cv::Rect rect(rectf.x*image.cols,rectf.y*image.rows,rectf.width*image.cols,rectf.height*image.rows);
+        cv::rectangle(image, rect,cv::Scalar(0,0,255),4);
+    }
+    fireConnectors();
+}
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.h b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
new file mode 100644
index 0000000..03fd9df
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
@@ -0,0 +1,20 @@
+#ifndef IMAGEDRAWELEMENT_H
+#define IMAGEDRAWELEMENT_H
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <mutex>
+
+class ImageDrawElement : public ImageFactoryElement
+{
+public:
+    ImageDrawElement();
+    void setRects(const std::vector<cv::Rect2f> &value);
+
+private:
+    std::mutex rectsMtx;
+    std::vector<cv::Rect2f> rects;
+    std::vector<cv::Rect2f> rectsBuffer;
+    bool rectsUpdated;
+    virtual void processImage(cv::Mat& image);
+};
+
+#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
new file mode 100644
index 0000000..23c9f92
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
@@ -0,0 +1,79 @@
+#include "basic/util/resource/ResourcesManager.h"
+#include <string>
+#include <iostream>
+#include <unistd.h>
+#include <thread>
+
+#include <basic/pipe/PipeElement.h>
+#include <basic/pipe_element/ImageShowElement.h>
+#include <basic/pipe/PipeController.h>
+#include <basic/pipe_element/ffmpeg/VideoCaptureElement.h>
+#include "ImageDrawElement.h"
+#include "YoloRpcElement.h"
+class Controllor : public PipeController
+{
+public:
+    Controllor(const int index,const std::string& rtsp):m_videoCaptureElement(rtsp,25,1000,0),
+        m_YoloRpcElement(std::to_string(index)+"YoloRpc")
+    {
+        m_rtsp = rtsp;
+        m_videoCaptureElement.registerConnector([&]{
+            if(!m_YoloRpcElement.isBusy()){
+                m_YoloRpcElement.setImage(m_videoCaptureElement.getImage());
+    //            paElement.setImage(videoCaptureElement.getImage());
+    //            paNumElement.setImage(videoCaptureElement.getImage());
+                m_YoloRpcElement.submit();
+            }
+            if(!m_imageDrawElement.isBusy()){
+                m_imageDrawElement.setImage(m_videoCaptureElement.getImage());
+                m_imageDrawElement.submit();
+            }
+        });
+
+        m_YoloRpcElement.registerConnector([&]{
+                m_imageDrawElement.setRects(m_YoloRpcElement.getRects());
+        });
+
+        m_imageDrawElement.registerConnector([&]{
+            ImageShowElement::showImage(m_rtsp,*m_imageDrawElement.getImage());
+
+        });
+        m_videoCaptureElement.setOutPutInterval(2);
+        registerElement(m_videoCaptureElement);
+        registerElement(m_YoloRpcElement);
+        registerElement(m_imageDrawElement);
+    }
+    virtual ~Controllor()
+    {}
+
+private:
+    std::string m_rtsp;
+    ffmpeg::VideoCaptureElement m_videoCaptureElement;
+    YoloRpcElement m_YoloRpcElement;
+    ImageDrawElement m_imageDrawElement;
+};
+
+using namespace std;
+int main(int argc, char *argv[])
+{
+    SAVE_APP_ARGS
+    Controllor _Controllor(0,"/home/basic/video/201804/day0416/01010002606000000-slice1.mp4");
+    _Controllor.start();
+
+    Controllor _Controllor0(1,"/home/basic/video/201804/day0416/01010002606000000-slice2.mp4");
+    _Controllor0.start();
+    cout << "Hello World!" << endl;
+    Controllor _Controllor1(2,"/home/basic/video/201804/day0416/01010002609000000-slice.mp4");
+    _Controllor1.start();
+    Controllor _Controllor2(3,"/home/basic/video/201804/day0416/01010002611000000-slice.mp4");
+    _Controllor2.start();
+    Controllor _Controllor3(4,"/home/basic/video/201804/night0418/02000000652000100-slice.mp4");
+    _Controllor3.start();
+    Controllor _Controllor4(5,"/home/basic/video/201804/night0418/02000000654000100-slice.mp4");
+    _Controllor4.start();
+    Controllor _Controllor5(6,"/home/basic/video/201804/night0418/02000000659000100-slice.mp4");
+    _Controllor5.start();
+    while(true)
+    {sleep(1);}
+    return 0;
+}
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
new file mode 100644
index 0000000..2e1afe5
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
@@ -0,0 +1,169 @@
+#include "YoloDetectServerI.h"
+
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QString>
+#include <QtCore/QSharedMemory>
+#include <basic/timer_counter/Clocktimer.h>
+
+YoloDetectServerI::YoloDetectServerI():m_thresh(0.5),m_hier_thresh(0.5),m_nms(0.5),names(nullptr),alphabet(nullptr),
+    m_thdInit(init,this),m_bInitThd(false)
+{
+}
+
+YoloDetectServerI::~YoloDetectServerI()
+{}
+
+::YoloDetect::ObjInfos YoloDetectServerI::YoloDetect(::Ice::Int w, ::Ice::Int h, const ::std::string& shM, const ::Ice::Current&)
+{
+    ClockTimer ct("YoloDetectServerI::YoloDetect");
+    ::YoloDetect::ObjInfos objInfos;
+    if(!m_bInitThd) return objInfos;
+    QSharedMemory shareMemory(QString(shM.c_str()));
+    if(shareMemory.attach()){
+        int channel = 3;
+        cv::Mat _mat = bufferToMat(w,h,channel,shareMemory.constData());
+
+//        double bttime=what_time_is_it_now();
+        image im = matToImg(_mat);
+//        DBG("matToImg : "<<what_time_is_it_now()-bttime);
+//        printf("matToImg %f seconds.\n", what_time_is_it_now()-bttime);
+        image sized = letterbox_image(im, m_net->w, m_net->h);
+        layer l = m_net->layers[m_net->n-1];
+
+        float *X = sized.data;
+        //attime=what_time_is_it_now();p->
+        network_predict(m_net, X);
+        //printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
+        int nboxes = 0;
+        detection *dets = get_network_boxes(m_net, im.w, im.h, m_thresh, m_hier_thresh, 0, 1, &nboxes);
+        if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
+        //  draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
+        for(int i=0;i<nboxes;i++)
+        {
+            ::YoloDetect::ObjInfo objInfo;
+            std::vector<float> vec(80);
+            memcpy(&vec[0],dets[i].prob,sizeof(float)*80);
+            int type = -1;
+            for(int j = 0; j < l.classes; ++j){
+//                if(j != 0){
+//                    continue;
+//                }
+                if (dets[i].prob[j] > 0.0f){
+                    if (type < 0) {
+                        type = j;
+                        objInfo.prob = dets[i].prob[j];
+                    } else {
+                    }
+                } else{
+                }
+            }
+            if(type >= 0){
+//                if(type != 0){
+//                    continue;
+//                }
+                objInfo.type = type;
+                objInfo.rcObj.left = (dets[i].bbox.x-dets[i].bbox.w/2.);
+                objInfo.rcObj.top = (dets[i].bbox.y-dets[i].bbox.h/2.);
+                objInfo.rcObj.right = (dets[i].bbox.x+dets[i].bbox.w/2.);
+                objInfo.rcObj.bottom = (dets[i].bbox.y+dets[i].bbox.h/2.);
+                objInfos.push_back(objInfo);
+            }
+
+
+        }
+        free_detections(dets, nboxes);
+    //    show_image(im, "Video");
+    //    cv::waitKey(10);
+        free_image(im);
+        free_image(sized);
+        //printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
+    }
+    return objInfos;
+}
+
+int YoloDetectServerI::init(void* arg)
+{
+    YoloDetectServerI* p = (YoloDetectServerI*)arg;
+
+    p->m_thresh = appPref.getFloatData("thresh.detect");
+    cuda_set_device(appPref.getIntData("gpu.index"));
+
+    char *datacfg = "cfg/coco.data";
+    char *cfgfile = "cfg/yolov3.cfg";
+    char *weightfile = "./yolov3.weights";
+
+    double loadtime = what_time_is_it_now();
+    list *options = read_data_cfg(datacfg);
+    char *name_list = option_find_str(options, "names", "data/names.list");
+    p->names = get_labels(name_list);
+
+    p->alphabet = load_alphabet();
+    p->m_net = load_network(cfgfile, weightfile, 0);
+    set_batch_network(p->m_net, 1);
+    printf("load mod use %f seconds.\n", what_time_is_it_now()-loadtime);
+
+    srand(2222222);
+    p->m_bInitThd = true;
+    return 0;
+}
+
+cv::Mat YoloDetectServerI::bufferToMat(const int w,const int h,const int channels,const void* buffer)
+{
+    int nType = -1;
+    switch(channels){case 1:{nType=CV_8UC1;break;}case 2:{nType=CV_8UC2;break;}case 3:{nType=CV_8UC3;break;}default:{nType=CV_8UC3;break;}}
+    cv::Mat mat(h,w,nType,(void*)buffer);
+    return mat;
+}
+
+image YoloDetectServerI::matToImg(cv::Mat& RefImg) {
+    CV_Assert(RefImg.depth() == CV_8U);
+
+    int h = RefImg.rows;
+    int w = RefImg.cols;
+    int channels = RefImg.channels();
+    image im = make_image(w, h, 3);
+    int count = 0;
+    switch(channels){
+        case 1:{
+            cv::MatIterator_<unsigned char> it, end;
+            for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it){
+                im.data[count] = im.data[w*h + count] = im.data[w*h*2 + count] = (float)(*it)/255.0;
+
+                ++count;
+            }
+            break;
+        }
+        case 3:{
+            float* desData = im.data;
+            uchar* srcData = RefImg.data;
+
+            int size = w*h;
+            int size2 = size*2;
+            for(int i = 0;i<size;i++){
+                *(desData) = *(srcData + 2) /255.0f;
+                *(desData+size) = *(srcData + 1) /255.0f;
+                *(desData+size2) = *(srcData) /255.0f;
+
+                desData++;
+                srcData+=3;
+            }
+            break;
+        }
+
+        default:
+            printf("Channel number not supported.\n");
+            break;
+    }
+    return im;
+}
+
+YoloDetect::stringData YoloDetectServerI::getCocoData(const Ice::Current &)
+{
+    YoloDetect::stringData retval;
+    std::fstream fs("./data/coco.names");
+    std::string str;
+    while(fs>>str){
+        retval.push_back(str);
+    }
+    return retval;
+}
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.h b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
new file mode 100644
index 0000000..ad18554
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
@@ -0,0 +1,40 @@
+#ifndef YOLODETECTSERVERI_H
+#define YOLODETECTSERVERI_H
+#define GPU
+#include "YoloServer.h"
+#include <thread>
+#include <darknet.h>
+#include <opencv2/opencv.hpp>
+#include <basic/util/resource/ResourcesManager.h>
+class YoloDetectServerI : public YoloDetect::YoloDetectServer
+{
+public:
+    YoloDetectServerI();
+    virtual ~YoloDetectServerI();
+    // FaceDetectServer interface
+public:
+    virtual ::YoloDetect::ObjInfos YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent)override;
+    virtual YoloDetect::stringData getCocoData(const Ice::Current &) override;
+private:
+    network *m_net;
+    float m_thresh;
+    float m_hier_thresh;
+    float m_nms;
+    char **names;
+    image **alphabet;
+    bool m_bInitThd;
+    std::thread m_thdInit;
+
+  //  ResourcesManager<int> resourcesManager;
+
+private:
+
+    static int init(void* arg);
+    image matToImg(cv::Mat& RefImg);
+    cv::Mat bufferToMat(const int w,const int h,const int channels,const void* buffer);
+
+
+};
+
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/main.cpp b/QiaoJiaSystem/YoloServer/main.cpp
new file mode 100644
index 0000000..e223edd
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/main.cpp
@@ -0,0 +1,35 @@
+#include <Ice/Ice.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <basic/util/app/AppPreference.hpp>
+#include "YoloDetectServerI.h"
+#include <basic/debug/Debug.h>
+
+#include <basic/util/app/AppConfig.h>
+
+int main(int argc, char **argv) {
+    SAVE_APP_ARGS;
+    ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+    auto ich = Ice::initialize(argc, argv);
+
+//    std::string identity =ich->getProperties()->getProperty("user.yolo.identity");
+//    std::string gpuIndex =ich->getProperties()->getProperty("user.gpu.index");
+//    std::string adapterName = ich->getProperties()->getProperty("user.adapter.name");
+//    float fthresh = atof(ich->getProperties()->getProperty("user.thresh.detect").c_str());
+
+//    appPref.setIntData("gpu.index",atol(gpuIndex.c_str()));
+//    appPref.setFloatData("thresh.detect",fthresh);
+
+//    auto adapter =  ich->createObjectAdapter(adapterName);
+//    adapter->add(new YoloDetectServerI(), Ice::stringToIdentity(identity));
+//    adapter->activate();
+//    ich->waitForShutdown();
+    appPref.setIntData("gpu.index", 0);
+    appPref.setFloatData("thresh.detect", 0.7);
+
+    IceRpcServer<YoloDetectServerI> server("yoloServer", 10003, "tcp");
+    server.setMessageSizeMax(1024 * 1024 * 50);
+    server.setPoolInitSize(5);
+    server.setPoolMaxSize(5);
+    server.runWaitShutDown();
+    return 0;
+}
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp b/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp
new file mode 100644
index 0000000..490d042
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.cpp
@@ -0,0 +1,496 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `YoloServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#include <YoloServer.h>
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/LocalException.h>
+#include <Ice/ValueFactory.h>
+#include <Ice/OutgoingAsync.h>
+#include <Ice/InputStream.h>
+#include <Ice/OutputStream.h>
+#include <IceUtil/PopDisableWarnings.h>
+
+#if defined(_MSC_VER)
+#   pragma warning(disable:4458) // declaration of ... hides class member
+#elif defined(__clang__)
+#   pragma clang diagnostic ignored "-Wshadow"
+#elif defined(__GNUC__)
+#   pragma GCC diagnostic ignored "-Wshadow"
+#endif
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace
+{
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_ids[2] =
+{
+    "::Ice::Object",
+    "::YoloDetect::YoloDetectServer"
+};
+const ::std::string iceC_YoloDetect_YoloDetectServer_ops[] =
+{
+    "YoloDetect",
+    "getCocoData",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+const ::std::string iceC_YoloDetect_YoloDetectServer_YoloDetect_name = "YoloDetect";
+const ::std::string iceC_YoloDetect_YoloDetectServer_getCocoData_name = "getCocoData";
+
+}
+
+bool
+YoloDetect::YoloDetectServer::ice_isA(::std::string s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_YoloDetect_YoloDetectServer_ids, iceC_YoloDetect_YoloDetectServer_ids + 2, s);
+}
+
+::std::vector<::std::string>
+YoloDetect::YoloDetectServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector<::std::string>(&iceC_YoloDetect_YoloDetectServer_ids[0], &iceC_YoloDetect_YoloDetectServer_ids[2]);
+}
+
+::std::string
+YoloDetect::YoloDetectServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_staticId()
+{
+    static const ::std::string typeId = "::YoloDetect::YoloDetectServer";
+    return typeId;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_YoloDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    auto istr = inS.startReadParams();
+    int iceP_width;
+    int iceP_height;
+    ::std::string iceP_shareMemory;
+    istr->readAll(iceP_width, iceP_height, iceP_shareMemory);
+    inS.endReadParams();
+    ::YoloDetect::ObjInfos ret = this->YoloDetect(iceP_width, iceP_height, ::std::move(iceP_shareMemory), current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_getCocoData(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::OperationMode::Normal, current.mode);
+    inS.readEmptyParams();
+    ::YoloDetect::stringData ret = this->getCocoData(current);
+    auto ostr = inS.startWriteParams();
+    ostr->writeAll(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_YoloDetect_YoloDetectServer_ops, iceC_YoloDetect_YoloDetectServer_ops + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_YoloDetect_YoloDetectServer_ops)
+    {
+        case 0:
+        {
+            return _iceD_YoloDetect(in, current);
+        }
+        case 1:
+        {
+            return _iceD_getCocoData(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::ObjInfos>>& outAsync, int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+    outAsync->invoke(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        [&](::Ice::OutputStream* ostr)
+        {
+            ostr->writeAll(iceP_width, iceP_height, iceP_shareMemory);
+        },
+        nullptr);
+}
+
+void
+YoloDetect::YoloDetectServerPrx::_iceI_getCocoData(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::stringData>>& outAsync, const ::Ice::Context& context)
+{
+    _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+    outAsync->invoke(iceC_YoloDetect_YoloDetectServer_getCocoData_name, ::Ice::OperationMode::Normal, ::Ice::FormatType::DefaultFormat, context,
+        nullptr,
+        nullptr);
+}
+
+::std::shared_ptr<::Ice::ObjectPrx>
+YoloDetect::YoloDetectServerPrx::_newInstance() const
+{
+    return ::IceInternal::createProxy<YoloDetectServerPrx>();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServerPrx::ice_staticId()
+{
+    return YoloDetect::YoloDetectServer::ice_staticId();
+}
+
+namespace Ice
+{
+}
+
+#else // C++98 mapping
+
+namespace
+{
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_YoloDetect_name = "YoloDetect";
+
+const ::std::string iceC_YoloDetect_YoloDetectServer_getCocoData_name = "getCocoData";
+
+}
+::IceProxy::Ice::Object* ::IceProxy::YoloDetect::upCast(::IceProxy::YoloDetect::YoloDetectServer* p) { return p; }
+
+void
+::IceProxy::YoloDetect::_readProxy(::Ice::InputStream* istr, ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer>& v)
+{
+    ::Ice::ObjectPrx proxy;
+    istr->read(proxy);
+    if(!proxy)
+    {
+        v = 0;
+    }
+    else
+    {
+        v = new ::IceProxy::YoloDetect::YoloDetectServer;
+        v->_copyFrom(proxy);
+    }
+}
+
+::Ice::AsyncResultPtr
+IceProxy::YoloDetect::YoloDetectServer::_iceI_begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_YoloDetect_YoloDetectServer_YoloDetect_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_YoloDetect_YoloDetectServer_YoloDetect_name, ::Ice::Normal, context);
+        ::Ice::OutputStream* ostr = result->startWriteParams(::Ice::DefaultFormat);
+        ostr->write(iceP_width);
+        ostr->write(iceP_height);
+        ostr->write(iceP_shareMemory);
+        result->endWriteParams();
+        result->invoke(iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::YoloDetect::ObjInfos
+IceProxy::YoloDetect::YoloDetectServer::end_YoloDetect(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_YoloDetect_YoloDetectServer_YoloDetect_name);
+    ::YoloDetect::ObjInfos ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::Ice::AsyncResultPtr
+IceProxy::YoloDetect::YoloDetectServer::_iceI_begin_getCocoData(const ::Ice::Context& context, const ::IceInternal::CallbackBasePtr& del, const ::Ice::LocalObjectPtr& cookie, bool sync)
+{
+    _checkTwowayOnly(iceC_YoloDetect_YoloDetectServer_getCocoData_name, sync);
+    ::IceInternal::OutgoingAsyncPtr result = new ::IceInternal::CallbackOutgoing(this, iceC_YoloDetect_YoloDetectServer_getCocoData_name, del, cookie, sync);
+    try
+    {
+        result->prepare(iceC_YoloDetect_YoloDetectServer_getCocoData_name, ::Ice::Normal, context);
+        result->writeEmptyParams();
+        result->invoke(iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+    }
+    catch(const ::Ice::Exception& ex)
+    {
+        result->abort(ex);
+    }
+    return result;
+}
+
+::YoloDetect::stringData
+IceProxy::YoloDetect::YoloDetectServer::end_getCocoData(const ::Ice::AsyncResultPtr& result)
+{
+    ::Ice::AsyncResult::_check(result, this, iceC_YoloDetect_YoloDetectServer_getCocoData_name);
+    ::YoloDetect::stringData ret;
+    if(!result->_waitForResponse())
+    {
+        try
+        {
+            result->_throwUserException();
+        }
+        catch(const ::Ice::UserException& ex)
+        {
+            throw ::Ice::UnknownUserException(__FILE__, __LINE__, ex.ice_id());
+        }
+    }
+    ::Ice::InputStream* istr = result->_startReadParams();
+    istr->read(ret);
+    result->_endReadParams();
+    return ret;
+}
+
+::IceProxy::Ice::Object*
+IceProxy::YoloDetect::YoloDetectServer::_newInstance() const
+{
+    return new YoloDetectServer;
+}
+
+const ::std::string&
+IceProxy::YoloDetect::YoloDetectServer::ice_staticId()
+{
+    return ::YoloDetect::YoloDetectServer::ice_staticId();
+}
+
+YoloDetect::YoloDetectServer::~YoloDetectServer()
+{
+}
+
+::Ice::Object* YoloDetect::upCast(::YoloDetect::YoloDetectServer* p) { return p; }
+
+
+namespace
+{
+const ::std::string iceC_YoloDetect_YoloDetectServer_ids[2] =
+{
+    "::Ice::Object",
+    "::YoloDetect::YoloDetectServer"
+};
+
+}
+
+bool
+YoloDetect::YoloDetectServer::ice_isA(const ::std::string& s, const ::Ice::Current&) const
+{
+    return ::std::binary_search(iceC_YoloDetect_YoloDetectServer_ids, iceC_YoloDetect_YoloDetectServer_ids + 2, s);
+}
+
+::std::vector< ::std::string>
+YoloDetect::YoloDetectServer::ice_ids(const ::Ice::Current&) const
+{
+    return ::std::vector< ::std::string>(&iceC_YoloDetect_YoloDetectServer_ids[0], &iceC_YoloDetect_YoloDetectServer_ids[2]);
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_id(const ::Ice::Current&) const
+{
+    return ice_staticId();
+}
+
+const ::std::string&
+YoloDetect::YoloDetectServer::ice_staticId()
+{
+#ifdef ICE_HAS_THREAD_SAFE_LOCAL_STATIC
+    static const ::std::string typeId = "::YoloDetect::YoloDetectServer";
+    return typeId;
+#else
+    return iceC_YoloDetect_YoloDetectServer_ids[1];
+#endif
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_YoloDetect(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    ::Ice::InputStream* istr = inS.startReadParams();
+    ::Ice::Int iceP_width;
+    ::Ice::Int iceP_height;
+    ::std::string iceP_shareMemory;
+    istr->read(iceP_width);
+    istr->read(iceP_height);
+    istr->read(iceP_shareMemory);
+    inS.endReadParams();
+    ::YoloDetect::ObjInfos ret = this->YoloDetect(iceP_width, iceP_height, iceP_shareMemory, current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceD_getCocoData(::IceInternal::Incoming& inS, const ::Ice::Current& current)
+{
+    _iceCheckMode(::Ice::Normal, current.mode);
+    inS.readEmptyParams();
+    ::YoloDetect::stringData ret = this->getCocoData(current);
+    ::Ice::OutputStream* ostr = inS.startWriteParams();
+    ostr->write(ret);
+    inS.endWriteParams();
+    return true;
+}
+
+namespace
+{
+const ::std::string iceC_YoloDetect_YoloDetectServer_all[] =
+{
+    "YoloDetect",
+    "getCocoData",
+    "ice_id",
+    "ice_ids",
+    "ice_isA",
+    "ice_ping"
+};
+
+}
+
+bool
+YoloDetect::YoloDetectServer::_iceDispatch(::IceInternal::Incoming& in, const ::Ice::Current& current)
+{
+    ::std::pair<const ::std::string*, const ::std::string*> r = ::std::equal_range(iceC_YoloDetect_YoloDetectServer_all, iceC_YoloDetect_YoloDetectServer_all + 6, current.operation);
+    if(r.first == r.second)
+    {
+        throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+    }
+
+    switch(r.first - iceC_YoloDetect_YoloDetectServer_all)
+    {
+        case 0:
+        {
+            return _iceD_YoloDetect(in, current);
+        }
+        case 1:
+        {
+            return _iceD_getCocoData(in, current);
+        }
+        case 2:
+        {
+            return _iceD_ice_id(in, current);
+        }
+        case 3:
+        {
+            return _iceD_ice_ids(in, current);
+        }
+        case 4:
+        {
+            return _iceD_ice_isA(in, current);
+        }
+        case 5:
+        {
+            return _iceD_ice_ping(in, current);
+        }
+        default:
+        {
+            assert(false);
+            throw ::Ice::OperationNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation);
+        }
+    }
+}
+
+void
+YoloDetect::YoloDetectServer::_iceWriteImpl(::Ice::OutputStream* ostr) const
+{
+    ostr->startSlice(ice_staticId(), -1, true);
+    Ice::StreamWriter< ::YoloDetect::YoloDetectServer, ::Ice::OutputStream>::write(ostr, *this);
+    ostr->endSlice();
+}
+
+void
+YoloDetect::YoloDetectServer::_iceReadImpl(::Ice::InputStream* istr)
+{
+    istr->startSlice();
+    Ice::StreamReader< ::YoloDetect::YoloDetectServer, ::Ice::InputStream>::read(istr, *this);
+    istr->endSlice();
+}
+
+void
+YoloDetect::_icePatchObjectPtr(YoloDetectServerPtr& handle, const ::Ice::ObjectPtr& v)
+{
+    handle = ::YoloDetect::YoloDetectServerPtr::dynamicCast(v);
+    if(v && !handle)
+    {
+        IceInternal::Ex::throwUOE(::YoloDetect::YoloDetectServer::ice_staticId(), v);
+    }
+}
+
+namespace Ice
+{
+}
+
+#endif
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.h b/QiaoJiaSystem/YoloServer/rpc/YoloServer.h
new file mode 100644
index 0000000..abbebed
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.h
@@ -0,0 +1,731 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2017 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+//
+// Ice version 3.7.0
+//
+// <auto-generated>
+//
+// Generated from file `YoloServer.ice'
+//
+// Warning: do not edit this file.
+//
+// </auto-generated>
+//
+
+#ifndef __YoloServer_h__
+#define __YoloServer_h__
+
+#include <IceUtil/PushDisableWarnings.h>
+#include <Ice/ProxyF.h>
+#include <Ice/ObjectF.h>
+#include <Ice/ValueF.h>
+#include <Ice/Exception.h>
+#include <Ice/LocalObject.h>
+#include <Ice/StreamHelpers.h>
+#include <Ice/Comparable.h>
+#include <Ice/Proxy.h>
+#include <Ice/Object.h>
+#include <Ice/GCObject.h>
+#include <Ice/Value.h>
+#include <Ice/Incoming.h>
+#include <Ice/FactoryTableInit.h>
+#include <IceUtil/ScopedArray.h>
+#include <Ice/Optional.h>
+#include <IceUtil/UndefSysMacros.h>
+
+#ifndef ICE_IGNORE_VERSION
+#   if ICE_INT_VERSION / 100 != 307
+#       error Ice version mismatch!
+#   endif
+#   if ICE_INT_VERSION % 100 > 50
+#       error Beta header file detected
+#   endif
+#   if ICE_INT_VERSION % 100 < 0
+#       error Ice patch level mismatch!
+#   endif
+#endif
+
+#ifdef ICE_CPP11_MAPPING // C++11 mapping
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+class YoloDetectServerPrx;
+
+}
+
+namespace YoloDetect
+{
+
+struct RECT
+{
+    float left;
+    float top;
+    float right;
+    float bottom;
+
+    std::tuple<const float&, const float&, const float&, const float&> ice_tuple() const
+    {
+        return std::tie(left, top, right, bottom);
+    }
+};
+
+struct ObjInfo
+{
+    int type;
+    float prob;
+    ::YoloDetect::RECT rcObj;
+
+    std::tuple<const int&, const float&, const ::YoloDetect::RECT&> ice_tuple() const
+    {
+        return std::tie(type, prob, rcObj);
+    }
+};
+
+using ObjInfos = ::std::vector<::YoloDetect::ObjInfo>;
+
+using stringData = ::std::vector<::std::string>;
+
+using Ice::operator<;
+using Ice::operator<=;
+using Ice::operator>;
+using Ice::operator>=;
+using Ice::operator==;
+using Ice::operator!=;
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Object
+{
+public:
+
+    using ProxyType = YoloDetectServerPrx;
+
+    virtual bool ice_isA(::std::string, const ::Ice::Current&) const override;
+    virtual ::std::vector<::std::string> ice_ids(const ::Ice::Current&) const override;
+    virtual ::std::string ice_id(const ::Ice::Current&) const override;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::YoloDetect::ObjInfos YoloDetect(int, int, ::std::string, const ::Ice::Current&) = 0;
+    bool _iceD_YoloDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::YoloDetect::stringData getCocoData(const ::Ice::Current&) = 0;
+    bool _iceD_getCocoData(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&) override;
+};
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServerPrx : public virtual ::Ice::Proxy<YoloDetectServerPrx, ::Ice::ObjectPrx>
+{
+public:
+
+    ::YoloDetect::ObjInfos YoloDetect(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::YoloDetect::ObjInfos>(true, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto YoloDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::YoloDetect::ObjInfos>>().get_future())
+    {
+        return _makePromiseOutgoing<::YoloDetect::ObjInfos, P>(false, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+    }
+
+    ::std::function<void()>
+    YoloDetectAsync(int iceP_width, int iceP_height, const ::std::string& iceP_shareMemory,
+                    ::std::function<void(::YoloDetect::ObjInfos)> response,
+                    ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                    ::std::function<void(bool)> sent = nullptr,
+                    const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::YoloDetect::ObjInfos>(response, ex, sent, this, &YoloDetect::YoloDetectServerPrx::_iceI_YoloDetect, iceP_width, iceP_height, iceP_shareMemory, context);
+    }
+
+    void _iceI_YoloDetect(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::ObjInfos>>&, int, int, const ::std::string&, const ::Ice::Context&);
+
+    ::YoloDetect::stringData getCocoData(const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makePromiseOutgoing<::YoloDetect::stringData>(true, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context).get();
+    }
+
+    template<template<typename> class P = ::std::promise>
+    auto getCocoDataAsync(const ::Ice::Context& context = Ice::noExplicitContext)
+        -> decltype(::std::declval<P<::YoloDetect::stringData>>().get_future())
+    {
+        return _makePromiseOutgoing<::YoloDetect::stringData, P>(false, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context);
+    }
+
+    ::std::function<void()>
+    getCocoDataAsync(::std::function<void(::YoloDetect::stringData)> response,
+                     ::std::function<void(::std::exception_ptr)> ex = nullptr,
+                     ::std::function<void(bool)> sent = nullptr,
+                     const ::Ice::Context& context = Ice::noExplicitContext)
+    {
+        return _makeLamdaOutgoing<::YoloDetect::stringData>(response, ex, sent, this, &YoloDetect::YoloDetectServerPrx::_iceI_getCocoData, context);
+    }
+
+    void _iceI_getCocoData(const ::std::shared_ptr<::IceInternal::OutgoingAsyncT<::YoloDetect::stringData>>&, const ::Ice::Context&);
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    YoloDetectServerPrx() = default;
+    friend ::std::shared_ptr<YoloDetectServerPrx> IceInternal::createProxy<YoloDetectServerPrx>();
+
+    virtual ::std::shared_ptr<::Ice::ObjectPrx> _newInstance() const override;
+};
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits<::YoloDetect::RECT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::YoloDetect::RECT, S>
+{
+    static void read(S* istr, ::YoloDetect::RECT& v)
+    {
+        istr->readAll(v.left, v.top, v.right, v.bottom);
+    }
+};
+
+template<>
+struct StreamableTraits<::YoloDetect::ObjInfo>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 24;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamReader<::YoloDetect::ObjInfo, S>
+{
+    static void read(S* istr, ::YoloDetect::ObjInfo& v)
+    {
+        istr->readAll(v.type, v.prob, v.rcObj);
+    }
+};
+
+}
+
+namespace YoloDetect
+{
+
+using YoloDetectServerPtr = ::std::shared_ptr<YoloDetectServer>;
+using YoloDetectServerPrxPtr = ::std::shared_ptr<YoloDetectServerPrx>;
+
+}
+
+#else // C++98 mapping
+
+namespace IceProxy
+{
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+void _readProxy(::Ice::InputStream*, ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer>&);
+::IceProxy::Ice::Object* upCast(::IceProxy::YoloDetect::YoloDetectServer*);
+
+}
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer;
+::Ice::Object* upCast(::YoloDetect::YoloDetectServer*);
+typedef ::IceInternal::Handle< ::YoloDetect::YoloDetectServer> YoloDetectServerPtr;
+typedef ::IceInternal::ProxyHandle< ::IceProxy::YoloDetect::YoloDetectServer> YoloDetectServerPrx;
+typedef YoloDetectServerPrx YoloDetectServerPrxPtr;
+void _icePatchObjectPtr(YoloDetectServerPtr&, const ::Ice::ObjectPtr&);
+
+}
+
+namespace YoloDetect
+{
+
+struct RECT
+{
+    ::Ice::Float left;
+    ::Ice::Float top;
+    ::Ice::Float right;
+    ::Ice::Float bottom;
+};
+
+struct ObjInfo
+{
+    ::Ice::Int type;
+    ::Ice::Float prob;
+    ::YoloDetect::RECT rcObj;
+};
+
+typedef ::std::vector< ::YoloDetect::ObjInfo> ObjInfos;
+
+typedef ::std::vector< ::std::string> stringData;
+
+}
+
+namespace YoloDetect
+{
+
+class Callback_YoloDetectServer_YoloDetect_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_YoloDetectServer_YoloDetect_Base> Callback_YoloDetectServer_YoloDetectPtr;
+
+class Callback_YoloDetectServer_getCocoData_Base : public virtual ::IceInternal::CallbackBase { };
+typedef ::IceUtil::Handle< Callback_YoloDetectServer_getCocoData_Base> Callback_YoloDetectServer_getCocoDataPtr;
+
+}
+
+namespace IceProxy
+{
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Proxy<YoloDetectServer, ::IceProxy::Ice::Object>
+{
+public:
+
+    ::YoloDetect::ObjInfos YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_YoloDetect(_iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::YoloDetect::Callback_YoloDetectServer_YoloDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, ::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_YoloDetect(::Ice::Int iceP_width, ::Ice::Int iceP_height, const ::std::string& iceP_shareMemory, const ::Ice::Context& context, const ::YoloDetect::Callback_YoloDetectServer_YoloDetectPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_YoloDetect(iceP_width, iceP_height, iceP_shareMemory, context, del, cookie);
+    }
+
+    ::YoloDetect::ObjInfos end_YoloDetect(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    ::YoloDetect::stringData getCocoData(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return end_getCocoData(_iceI_begin_getCocoData(context, ::IceInternal::dummyCallback, 0, true));
+    }
+
+    ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context = ::Ice::noExplicitContext)
+    {
+        return _iceI_begin_getCocoData(context, ::IceInternal::dummyCallback, 0);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCocoData(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context, const ::Ice::CallbackPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCocoData(context, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCocoData(const ::YoloDetect::Callback_YoloDetectServer_getCocoDataPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCocoData(::Ice::noExplicitContext, del, cookie);
+    }
+
+    ::Ice::AsyncResultPtr begin_getCocoData(const ::Ice::Context& context, const ::YoloDetect::Callback_YoloDetectServer_getCocoDataPtr& del, const ::Ice::LocalObjectPtr& cookie = 0)
+    {
+        return _iceI_begin_getCocoData(context, del, cookie);
+    }
+
+    ::YoloDetect::stringData end_getCocoData(const ::Ice::AsyncResultPtr&);
+
+private:
+
+    ::Ice::AsyncResultPtr _iceI_begin_getCocoData(const ::Ice::Context&, const ::IceInternal::CallbackBasePtr&, const ::Ice::LocalObjectPtr& cookie = 0, bool sync = false);
+
+public:
+
+    static const ::std::string& ice_staticId();
+
+protected:
+
+    virtual ::IceProxy::Ice::Object* _newInstance() const;
+};
+
+}
+
+}
+
+namespace YoloDetect
+{
+
+class YoloDetectServer : public virtual ::Ice::Object
+{
+public:
+
+    typedef YoloDetectServerPrx ProxyType;
+    typedef YoloDetectServerPtr PointerType;
+
+    virtual ~YoloDetectServer();
+
+    virtual bool ice_isA(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual ::std::vector< ::std::string> ice_ids(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+    virtual const ::std::string& ice_id(const ::Ice::Current& = ::Ice::emptyCurrent) const;
+
+    static const ::std::string& ice_staticId();
+
+    virtual ::YoloDetect::ObjInfos YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_YoloDetect(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual ::YoloDetect::stringData getCocoData(const ::Ice::Current& = ::Ice::emptyCurrent) = 0;
+    bool _iceD_getCocoData(::IceInternal::Incoming&, const ::Ice::Current&);
+
+    virtual bool _iceDispatch(::IceInternal::Incoming&, const ::Ice::Current&);
+
+protected:
+
+    virtual void _iceWriteImpl(::Ice::OutputStream*) const;
+    virtual void _iceReadImpl(::Ice::InputStream*);
+};
+
+inline bool operator==(const YoloDetectServer& lhs, const YoloDetectServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) == static_cast<const ::Ice::Object&>(rhs);
+}
+
+inline bool operator<(const YoloDetectServer& lhs, const YoloDetectServer& rhs)
+{
+    return static_cast<const ::Ice::Object&>(lhs) < static_cast<const ::Ice::Object&>(rhs);
+}
+
+}
+
+namespace Ice
+{
+
+template<>
+struct StreamableTraits< ::YoloDetect::RECT>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 16;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::YoloDetect::RECT, S>
+{
+    static void write(S* ostr, const ::YoloDetect::RECT& v)
+    {
+        ostr->write(v.left);
+        ostr->write(v.top);
+        ostr->write(v.right);
+        ostr->write(v.bottom);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::YoloDetect::RECT, S>
+{
+    static void read(S* istr, ::YoloDetect::RECT& v)
+    {
+        istr->read(v.left);
+        istr->read(v.top);
+        istr->read(v.right);
+        istr->read(v.bottom);
+    }
+};
+
+template<>
+struct StreamableTraits< ::YoloDetect::ObjInfo>
+{
+    static const StreamHelperCategory helper = StreamHelperCategoryStruct;
+    static const int minWireSize = 24;
+    static const bool fixedLength = true;
+};
+
+template<typename S>
+struct StreamWriter< ::YoloDetect::ObjInfo, S>
+{
+    static void write(S* ostr, const ::YoloDetect::ObjInfo& v)
+    {
+        ostr->write(v.type);
+        ostr->write(v.prob);
+        ostr->write(v.rcObj);
+    }
+};
+
+template<typename S>
+struct StreamReader< ::YoloDetect::ObjInfo, S>
+{
+    static void read(S* istr, ::YoloDetect::ObjInfo& v)
+    {
+        istr->read(v.type);
+        istr->read(v.prob);
+        istr->read(v.rcObj);
+    }
+};
+
+}
+
+namespace YoloDetect
+{
+
+template<class T>
+class CallbackNC_YoloDetectServer_YoloDetect : public Callback_YoloDetectServer_YoloDetect_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::YoloDetect::ObjInfos&);
+
+    CallbackNC_YoloDetectServer_YoloDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+        ::YoloDetect::ObjInfos ret;
+        try
+        {
+            ret = proxy->end_YoloDetect(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::ObjInfos&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_YoloDetectServer_YoloDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(T* instance, void (T::*cb)(const ::YoloDetect::ObjInfos&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_YoloDetectServer_YoloDetect<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_YoloDetectServer_YoloDetect : public Callback_YoloDetectServer_YoloDetect_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::YoloDetect::ObjInfos&, const CT&);
+
+    Callback_YoloDetectServer_YoloDetect(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+        ::YoloDetect::ObjInfos ret;
+        try
+        {
+            ret = proxy->end_YoloDetect(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::ObjInfos&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_YoloDetectServer_YoloDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_YoloDetectServer_YoloDetectPtr
+newCallback_YoloDetectServer_YoloDetect(T* instance, void (T::*cb)(const ::YoloDetect::ObjInfos&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_YoloDetectServer_YoloDetect<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T>
+class CallbackNC_YoloDetectServer_getCocoData : public Callback_YoloDetectServer_getCocoData_Base, public ::IceInternal::TwowayCallbackNC<T>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception&);
+    typedef void (T::*Sent)(bool);
+    typedef void (T::*Response)(const ::YoloDetect::stringData&);
+
+    CallbackNC_YoloDetectServer_getCocoData(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallbackNC<T>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+        ::YoloDetect::stringData ret;
+        try
+        {
+            ret = proxy->end_getCocoData(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::CallbackNC<T>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::CallbackNC<T>::_callback.get()->*_response)(ret);
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::stringData&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_YoloDetectServer_getCocoData<T>(instance, cb, excb, sentcb);
+}
+
+template<class T> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(T* instance, void (T::*cb)(const ::YoloDetect::stringData&), void (T::*excb)(const ::Ice::Exception&), void (T::*sentcb)(bool) = 0)
+{
+    return new CallbackNC_YoloDetectServer_getCocoData<T>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT>
+class Callback_YoloDetectServer_getCocoData : public Callback_YoloDetectServer_getCocoData_Base, public ::IceInternal::TwowayCallback<T, CT>
+{
+public:
+
+    typedef IceUtil::Handle<T> TPtr;
+
+    typedef void (T::*Exception)(const ::Ice::Exception& , const CT&);
+    typedef void (T::*Sent)(bool , const CT&);
+    typedef void (T::*Response)(const ::YoloDetect::stringData&, const CT&);
+
+    Callback_YoloDetectServer_getCocoData(const TPtr& obj, Response cb, Exception excb, Sent sentcb)
+        : ::IceInternal::TwowayCallback<T, CT>(obj, cb != 0, excb, sentcb), _response(cb)
+    {
+    }
+
+    virtual void completed(const ::Ice::AsyncResultPtr& result) const
+    {
+        ::YoloDetect::YoloDetectServerPrx proxy = ::YoloDetect::YoloDetectServerPrx::uncheckedCast(result->getProxy());
+        ::YoloDetect::stringData ret;
+        try
+        {
+            ret = proxy->end_getCocoData(result);
+        }
+        catch(const ::Ice::Exception& ex)
+        {
+            ::IceInternal::Callback<T, CT>::exception(result, ex);
+            return;
+        }
+        if(_response)
+        {
+            (::IceInternal::Callback<T, CT>::_callback.get()->*_response)(ret, CT::dynamicCast(result->getCookie()));
+        }
+    }
+
+private:
+
+    Response _response;
+};
+
+template<class T, typename CT> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(const IceUtil::Handle<T>& instance, void (T::*cb)(const ::YoloDetect::stringData&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_YoloDetectServer_getCocoData<T, CT>(instance, cb, excb, sentcb);
+}
+
+template<class T, typename CT> Callback_YoloDetectServer_getCocoDataPtr
+newCallback_YoloDetectServer_getCocoData(T* instance, void (T::*cb)(const ::YoloDetect::stringData&, const CT&), void (T::*excb)(const ::Ice::Exception&, const CT&), void (T::*sentcb)(bool, const CT&) = 0)
+{
+    return new Callback_YoloDetectServer_getCocoData<T, CT>(instance, cb, excb, sentcb);
+}
+
+}
+
+#endif
+
+#include <IceUtil/PopDisableWarnings.h>
+#endif
diff --git a/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice b/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice
new file mode 100644
index 0000000..fe05ff8
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/YoloServer.ice
@@ -0,0 +1,27 @@
+module YoloDetect
+{	
+	struct RECT
+	{
+		float left;
+		float top;
+		float right;
+		float bottom;
+	}
+	
+	struct ObjInfo
+	{
+        int	type;
+        float prob;
+		RECT rcObj;
+	}
+	
+	sequence<ObjInfo> ObjInfos;
+	
+	sequence<string> stringData;
+	
+	interface YoloDetectServer
+	{
+		ObjInfos YoloDetect(int width, int height, string shareMemory);
+		stringData getCocoData();
+	}
+}
diff --git a/QiaoJiaSystem/YoloServer/rpc/gen.sh b/QiaoJiaSystem/YoloServer/rpc/gen.sh
new file mode 100644
index 0000000..140add8
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/rpc/gen.sh
@@ -0,0 +1 @@
+./../../../BasicPlatForm/libs/Ice-3.7.0/bin/slice2cpp YoloServer.ice
diff --git a/QiaoJiaSystem/build/DataWebServer b/QiaoJiaSystem/build/DataWebServer
new file mode 100644
index 0000000..0478e32
--- /dev/null
+++ b/QiaoJiaSystem/build/DataWebServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceDetectServer b/QiaoJiaSystem/build/FaceDetectServer
new file mode 100644
index 0000000..20ac800
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceDetectServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceExtractServer b/QiaoJiaSystem/build/FaceExtractServer
new file mode 100644
index 0000000..3dd1825
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceExtractServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceSearchServer b/QiaoJiaSystem/build/FaceSearchServer
new file mode 100644
index 0000000..35abdfb
--- /dev/null
+++ b/QiaoJiaSystem/build/FaceSearchServer
Binary files differ
diff --git a/QiaoJiaSystem/build/KeepRight b/QiaoJiaSystem/build/KeepRight
new file mode 100644
index 0000000..ee0badf
--- /dev/null
+++ b/QiaoJiaSystem/build/KeepRight
Binary files differ
diff --git a/QiaoJiaSystem/build/LocalDataDB b/QiaoJiaSystem/build/LocalDataDB
new file mode 100644
index 0000000..da85e28
--- /dev/null
+++ b/QiaoJiaSystem/build/LocalDataDB
Binary files differ
diff --git a/QiaoJiaSystem/build/PerimeterAlarm b/QiaoJiaSystem/build/PerimeterAlarm
new file mode 100644
index 0000000..138700a
--- /dev/null
+++ b/QiaoJiaSystem/build/PerimeterAlarm
Binary files differ
diff --git a/QiaoJiaSystem/build/StructureApp b/QiaoJiaSystem/build/StructureApp
new file mode 100644
index 0000000..ef51c15
--- /dev/null
+++ b/QiaoJiaSystem/build/StructureApp
Binary files differ
diff --git a/QiaoJiaSystem/build/VideoAnalysFromHC b/QiaoJiaSystem/build/VideoAnalysFromHC
new file mode 100644
index 0000000..0f10448
--- /dev/null
+++ b/QiaoJiaSystem/build/VideoAnalysFromHC
Binary files differ
diff --git a/QiaoJiaSystem/build/WebFDSClient.conf b/QiaoJiaSystem/build/WebFDSClient.conf
new file mode 100644
index 0000000..dbe42e9
--- /dev/null
+++ b/QiaoJiaSystem/build/WebFDSClient.conf
@@ -0,0 +1,62 @@
+# connect timeout in seconds
+# default value is 30s
+connect_timeout=30
+
+# network timeout in seconds
+# default value is 30s
+network_timeout=60
+
+# the base path to store log files
+base_path=fastdfs
+
+# tracker_server can ocur more than once, and tracker_server format is
+#  "host:port", host can be hostname or ip address
+tracker_server=192.168.1.185:22122
+
+#standard log level as syslog, case insensitive, value list:
+### emerg for emergency
+### alert
+### crit for critical
+### error
+### warn for warning
+### notice
+### info
+### debug
+log_level=info
+
+# if use connection pool
+# default value is false
+# since V4.05
+use_connection_pool = false
+
+# connections whose the idle time exceeds this time will be closed
+# unit: second
+# default value is 3600
+# since V4.05
+connection_pool_max_idle_time = 3600
+
+# if load FastDFS parameters from tracker server
+# since V4.05
+# default value is false
+load_fdfs_parameters_from_tracker=false
+
+# if use storage ID instead of IP address
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# default value is false
+# since V4.05
+use_storage_id = false
+
+# specify storage ids filename, can use relative or absolute path
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# since V4.05
+storage_ids_filename = storage_ids.conf
+
+
+#HTTP settings
+http.tracker_server_port=80
+
+#use "#include" directive to include HTTP other settiongs
+##include http.conf
+
diff --git a/QiaoJiaSystem/build/cfg/coco.data b/QiaoJiaSystem/build/cfg/coco.data
new file mode 100644
index 0000000..d815bc5
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/coco.data
@@ -0,0 +1,8 @@
+classes= 1
+train  = /home/pjreddie/data/coco/trainvalno5k.txt
+#valid  = coco_testdev
+valid = data/coco_val_5k.list
+names = data/coco.names
+backup = /home/pjreddie/backup/
+eval=coco
+
diff --git a/QiaoJiaSystem/build/cfg/yolov3-voc.cfg b/QiaoJiaSystem/build/cfg/yolov3-voc.cfg
new file mode 100644
index 0000000..3f3e8df
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/yolov3-voc.cfg
@@ -0,0 +1,785 @@
+[net]
+# Testing
+ batch=1
+ subdivisions=1
+# Training
+# batch=64
+# subdivisions=16
+width=416
+height=416
+channels=3
+momentum=0.9
+decay=0.0005
+angle=0
+saturation = 1.5
+exposure = 1.5
+hue=.1
+
+learning_rate=0.001
+burn_in=1000
+max_batches = 50200
+policy=steps
+steps=40000,45000
+scales=.1,.1
+
+
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=3
+stride=1
+pad=1
+activation=leaky
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+######################
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 6,7,8
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 61
+
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 3,4,5
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 36
+
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=75
+activation=linear
+
+[yolo]
+mask = 0,1,2
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=20
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
diff --git a/QiaoJiaSystem/build/cfg/yolov3.cfg b/QiaoJiaSystem/build/cfg/yolov3.cfg
new file mode 100644
index 0000000..5f3ab62
--- /dev/null
+++ b/QiaoJiaSystem/build/cfg/yolov3.cfg
@@ -0,0 +1,789 @@
+[net]
+# Testing
+batch=1
+subdivisions=1
+# Training
+# batch=64
+# subdivisions=16
+width=416
+height=416
+channels=3
+momentum=0.9
+decay=0.0005
+angle=0
+saturation = 1.5
+exposure = 1.5
+hue=.1
+
+learning_rate=0.001
+burn_in=1000
+max_batches = 500200
+policy=steps
+steps=400000,450000
+scales=.1,.1
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=3
+stride=1
+pad=1
+activation=leaky
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=64
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=2
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=1024
+size=3
+stride=1
+pad=1
+activation=leaky
+
+[shortcut]
+from=-3
+activation=linear
+
+######################
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=512
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1024
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 6,7,8
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 61
+
+
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=256
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=512
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 3,4,5
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
+
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[upsample]
+stride=2
+
+[route]
+layers = -1, 36
+
+
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+filters=128
+size=1
+stride=1
+pad=1
+activation=leaky
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=256
+activation=leaky
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=linear
+
+
+[yolo]
+mask = 0,1,2
+anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
+classes=80
+num=9
+jitter=.3
+ignore_thresh = .5
+truth_thresh = 1
+random=1
+
diff --git a/QiaoJiaSystem/build/config.db b/QiaoJiaSystem/build/config.db
new file mode 100644
index 0000000..26c9a27
--- /dev/null
+++ b/QiaoJiaSystem/build/config.db
Binary files differ
diff --git a/QiaoJiaSystem/build/config.json b/QiaoJiaSystem/build/config.json
new file mode 100644
index 0000000..4fbeb0f
--- /dev/null
+++ b/QiaoJiaSystem/build/config.json
@@ -0,0 +1,23 @@
+{
+  "mainServerIp": "192.168.1.203",
+  "mainServerPort": "3697",
+  "logPath": "/home/dell/work/log/",
+  "DEV_ID": "DSVAD010120181119",
+  "ES_IP": "192.168.1.122",
+  "ES_PORT": 9200,
+  "FaceSeachSleepTime": 60,
+  "TotalLoadSize": "500",
+  "buildAddr": "/home/dell/Apps/QiaoJiaSystem/build/",
+  "cutPath": "/home/dell/work/qiaojia/cut",
+  "erlCookie": "",
+  "erlFatherNode": "",
+  "erlNode": "",
+  "erlPath": "",
+  "loadPath": "/home/dell/work/qiaojia/load",
+  "localPasswd": "123456",
+  "netIfName": "eno1",
+  "srsAddr": "rtmp://192.168.1.122:1934/live/",
+  "webPort": 11111 ,
+   "redis_ip": "127.0.0.1",
+   "redis_buf_len" : 750
+}
diff --git "a/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt" "b/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt"
new file mode 100644
index 0000000..580e44a
--- /dev/null
+++ "b/QiaoJiaSystem/build/configjson\350\257\264\346\230\216.txt"
@@ -0,0 +1,16 @@
+{
+   "TotalLoadSize" : "70",      //涓嬭浇鏂囦欢鐨勬渶澶у瓨鍌ㄧ┖闂�
+   "cutPath" : "/media/basic/000FD0310004A153/Qiaojia/cut/",    //瑁佸壀鏂囦欢瀛樺偍鐩綍
+   "loadPath" : "/media/basic/000FD0310004A153/Qiaojia/load/",  //涓嬭浇鏂囦欢瀛樺偍鐩綍
+   "erlCookie" : "123456",      //erlang闆嗙兢鐨刢ookie
+   "erlFatherNode" : "wp1@192.168.1.181",       //erlang闆嗙兢涓昏妭鐐�
+   "erlNode" : "wp5@192.168.1.181",             //erlang鑺傜偣鍚嶇О
+   "erlPath" : "/opt/erlang/wp5",               //erlang鑺傜偣鎵�鍦ㄨ矾寰�
+   "localPasswd" : "basic",     //褰撳墠鏈哄櫒鐨勭敤鎴峰悕
+   "netIfName" : "enp8s0",      //褰撳墠鏈哄櫒鐨勭綉缁滃悕锛屼究浜庢煡璇p鍦板潃绛�
+   "webPort" : 8088,            //webserver缁檍ava鎺ュ彛鐨勭鍙�
+   "ES_IP":"192.168.1.181",     //es闆嗙兢鐨刬p
+   "ES_PORT": 9200,             //es闆嗙兢鐨勭鍙�
+   "srsAddr":"rtmp://192.168.1.181:1934/live/", //rtmp鎺ㄦ祦鐨勫熀纭�鍦板潃
+   "buildAddr":"~/Apps/QiaoJiaSystem/build/"    //鎵ц鏂囦欢鐨勮矾寰�
+}
diff --git a/QiaoJiaSystem/build/data/coco.names b/QiaoJiaSystem/build/data/coco.names
new file mode 100644
index 0000000..ca76c80
--- /dev/null
+++ b/QiaoJiaSystem/build/data/coco.names
@@ -0,0 +1,80 @@
+person
+bicycle
+car
+motorbike
+aeroplane
+bus
+train
+truck
+boat
+traffic light
+fire hydrant
+stop sign
+parking meter
+bench
+bird
+cat
+dog
+horse
+sheep
+cow
+elephant
+bear
+zebra
+giraffe
+backpack
+umbrella
+handbag
+tie
+suitcase
+frisbee
+skis
+snowboard
+sports ball
+kite
+baseball bat
+baseball glove
+skateboard
+surfboard
+tennis racket
+bottle
+wine glass
+cup
+fork
+knife
+spoon
+bowl
+banana
+apple
+sandwich
+orange
+broccoli
+carrot
+hot dog
+pizza
+donut
+cake
+chair
+sofa
+pottedplant
+bed
+diningtable
+toilet
+tvmonitor
+laptop
+mouse
+remote
+keyboard
+cell phone
+microwave
+oven
+toaster
+sink
+refrigerator
+book
+clock
+vase
+scissors
+teddy bear
+hair drier
+toothbrush
diff --git a/QiaoJiaSystem/build/data/coco9k.map b/QiaoJiaSystem/build/data/coco9k.map
new file mode 100644
index 0000000..5155b65
--- /dev/null
+++ b/QiaoJiaSystem/build/data/coco9k.map
@@ -0,0 +1,80 @@
+5177
+3768
+3802
+3800
+4107
+4072
+4071
+3797
+4097
+2645
+5150
+2644
+3257
+2523
+6527
+6866
+6912
+7342
+7255
+7271
+7217
+6858
+7343
+7233
+3704
+4374
+3641
+5001
+3899
+2999
+2631
+5141
+2015
+1133
+1935
+1930
+5144
+5143
+2371
+3916
+3745
+3640
+4749
+4736
+4735
+3678
+58
+42
+771
+81
+152
+141
+786
+700
+218
+791
+2518
+2521
+3637
+2458
+2505
+2519
+3499
+2837
+3503
+2597
+3430
+2080
+5103
+5111
+5102
+3013
+5096
+1102
+3218
+4010
+2266
+1127
+5122
+2360
diff --git a/QiaoJiaSystem/build/data/labels/100_0.png b/QiaoJiaSystem/build/data/labels/100_0.png
new file mode 100644
index 0000000..77878ec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_1.png b/QiaoJiaSystem/build/data/labels/100_1.png
new file mode 100644
index 0000000..86181c0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_2.png b/QiaoJiaSystem/build/data/labels/100_2.png
new file mode 100644
index 0000000..5d43046
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_3.png b/QiaoJiaSystem/build/data/labels/100_3.png
new file mode 100644
index 0000000..353401f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_4.png b/QiaoJiaSystem/build/data/labels/100_4.png
new file mode 100644
index 0000000..d22f891
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_5.png b/QiaoJiaSystem/build/data/labels/100_5.png
new file mode 100644
index 0000000..7f65183
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_6.png b/QiaoJiaSystem/build/data/labels/100_6.png
new file mode 100644
index 0000000..18eb173
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/100_7.png b/QiaoJiaSystem/build/data/labels/100_7.png
new file mode 100644
index 0000000..b45964b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/100_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_0.png b/QiaoJiaSystem/build/data/labels/101_0.png
new file mode 100644
index 0000000..8739bc7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_1.png b/QiaoJiaSystem/build/data/labels/101_1.png
new file mode 100644
index 0000000..5a39331
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_2.png b/QiaoJiaSystem/build/data/labels/101_2.png
new file mode 100644
index 0000000..c223477
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_3.png b/QiaoJiaSystem/build/data/labels/101_3.png
new file mode 100644
index 0000000..09f50e3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_4.png b/QiaoJiaSystem/build/data/labels/101_4.png
new file mode 100644
index 0000000..7d7960b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_5.png b/QiaoJiaSystem/build/data/labels/101_5.png
new file mode 100644
index 0000000..08d8003
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_6.png b/QiaoJiaSystem/build/data/labels/101_6.png
new file mode 100644
index 0000000..9d554db
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/101_7.png b/QiaoJiaSystem/build/data/labels/101_7.png
new file mode 100644
index 0000000..37855f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/101_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_0.png b/QiaoJiaSystem/build/data/labels/102_0.png
new file mode 100644
index 0000000..7b8b0fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_1.png b/QiaoJiaSystem/build/data/labels/102_1.png
new file mode 100644
index 0000000..ade5aa5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_2.png b/QiaoJiaSystem/build/data/labels/102_2.png
new file mode 100644
index 0000000..2068f0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_3.png b/QiaoJiaSystem/build/data/labels/102_3.png
new file mode 100644
index 0000000..00e494e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_4.png b/QiaoJiaSystem/build/data/labels/102_4.png
new file mode 100644
index 0000000..37637d3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_5.png b/QiaoJiaSystem/build/data/labels/102_5.png
new file mode 100644
index 0000000..a86b69b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_6.png b/QiaoJiaSystem/build/data/labels/102_6.png
new file mode 100644
index 0000000..7d6889e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/102_7.png b/QiaoJiaSystem/build/data/labels/102_7.png
new file mode 100644
index 0000000..a9a7381
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/102_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_0.png b/QiaoJiaSystem/build/data/labels/103_0.png
new file mode 100644
index 0000000..17cc959
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_1.png b/QiaoJiaSystem/build/data/labels/103_1.png
new file mode 100644
index 0000000..175794c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_2.png b/QiaoJiaSystem/build/data/labels/103_2.png
new file mode 100644
index 0000000..415038d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_3.png b/QiaoJiaSystem/build/data/labels/103_3.png
new file mode 100644
index 0000000..1101880
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_4.png b/QiaoJiaSystem/build/data/labels/103_4.png
new file mode 100644
index 0000000..b8bf32e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_5.png b/QiaoJiaSystem/build/data/labels/103_5.png
new file mode 100644
index 0000000..6c81a57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_6.png b/QiaoJiaSystem/build/data/labels/103_6.png
new file mode 100644
index 0000000..ce580c0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/103_7.png b/QiaoJiaSystem/build/data/labels/103_7.png
new file mode 100644
index 0000000..1919f01
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/103_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_0.png b/QiaoJiaSystem/build/data/labels/104_0.png
new file mode 100644
index 0000000..4ce801b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_1.png b/QiaoJiaSystem/build/data/labels/104_1.png
new file mode 100644
index 0000000..cdc2ba6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_2.png b/QiaoJiaSystem/build/data/labels/104_2.png
new file mode 100644
index 0000000..aa88c84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_3.png b/QiaoJiaSystem/build/data/labels/104_3.png
new file mode 100644
index 0000000..d574267
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_4.png b/QiaoJiaSystem/build/data/labels/104_4.png
new file mode 100644
index 0000000..71f9662
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_5.png b/QiaoJiaSystem/build/data/labels/104_5.png
new file mode 100644
index 0000000..3159b0e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_6.png b/QiaoJiaSystem/build/data/labels/104_6.png
new file mode 100644
index 0000000..018e0e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/104_7.png b/QiaoJiaSystem/build/data/labels/104_7.png
new file mode 100644
index 0000000..39fbe16
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/104_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_0.png b/QiaoJiaSystem/build/data/labels/105_0.png
new file mode 100644
index 0000000..388be1a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_1.png b/QiaoJiaSystem/build/data/labels/105_1.png
new file mode 100644
index 0000000..284a130
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_2.png b/QiaoJiaSystem/build/data/labels/105_2.png
new file mode 100644
index 0000000..d378969
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_3.png b/QiaoJiaSystem/build/data/labels/105_3.png
new file mode 100644
index 0000000..f9ebb66
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_4.png b/QiaoJiaSystem/build/data/labels/105_4.png
new file mode 100644
index 0000000..afb260b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_5.png b/QiaoJiaSystem/build/data/labels/105_5.png
new file mode 100644
index 0000000..53274dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_6.png b/QiaoJiaSystem/build/data/labels/105_6.png
new file mode 100644
index 0000000..6b952ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/105_7.png b/QiaoJiaSystem/build/data/labels/105_7.png
new file mode 100644
index 0000000..02b1b7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/105_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_0.png b/QiaoJiaSystem/build/data/labels/106_0.png
new file mode 100644
index 0000000..7075259
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_1.png b/QiaoJiaSystem/build/data/labels/106_1.png
new file mode 100644
index 0000000..66e73ab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_2.png b/QiaoJiaSystem/build/data/labels/106_2.png
new file mode 100644
index 0000000..aaf88c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_3.png b/QiaoJiaSystem/build/data/labels/106_3.png
new file mode 100644
index 0000000..bc6b981
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_4.png b/QiaoJiaSystem/build/data/labels/106_4.png
new file mode 100644
index 0000000..b662b7e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_5.png b/QiaoJiaSystem/build/data/labels/106_5.png
new file mode 100644
index 0000000..43b4561
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_6.png b/QiaoJiaSystem/build/data/labels/106_6.png
new file mode 100644
index 0000000..e667664
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/106_7.png b/QiaoJiaSystem/build/data/labels/106_7.png
new file mode 100644
index 0000000..727f3f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/106_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_0.png b/QiaoJiaSystem/build/data/labels/107_0.png
new file mode 100644
index 0000000..9c8d836
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_1.png b/QiaoJiaSystem/build/data/labels/107_1.png
new file mode 100644
index 0000000..7dc3d2b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_2.png b/QiaoJiaSystem/build/data/labels/107_2.png
new file mode 100644
index 0000000..d27cf78
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_3.png b/QiaoJiaSystem/build/data/labels/107_3.png
new file mode 100644
index 0000000..04b6c22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_4.png b/QiaoJiaSystem/build/data/labels/107_4.png
new file mode 100644
index 0000000..cbc4515
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_5.png b/QiaoJiaSystem/build/data/labels/107_5.png
new file mode 100644
index 0000000..bc9730c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_6.png b/QiaoJiaSystem/build/data/labels/107_6.png
new file mode 100644
index 0000000..ffbe415
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/107_7.png b/QiaoJiaSystem/build/data/labels/107_7.png
new file mode 100644
index 0000000..95f81a5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/107_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_0.png b/QiaoJiaSystem/build/data/labels/108_0.png
new file mode 100644
index 0000000..ce05b22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_1.png b/QiaoJiaSystem/build/data/labels/108_1.png
new file mode 100644
index 0000000..70d3895
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_2.png b/QiaoJiaSystem/build/data/labels/108_2.png
new file mode 100644
index 0000000..7a95038
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_3.png b/QiaoJiaSystem/build/data/labels/108_3.png
new file mode 100644
index 0000000..81637b3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_4.png b/QiaoJiaSystem/build/data/labels/108_4.png
new file mode 100644
index 0000000..0ea83f2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_5.png b/QiaoJiaSystem/build/data/labels/108_5.png
new file mode 100644
index 0000000..98d79d8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_6.png b/QiaoJiaSystem/build/data/labels/108_6.png
new file mode 100644
index 0000000..25303aa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/108_7.png b/QiaoJiaSystem/build/data/labels/108_7.png
new file mode 100644
index 0000000..6fb03a5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/108_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_0.png b/QiaoJiaSystem/build/data/labels/109_0.png
new file mode 100644
index 0000000..8169faf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_1.png b/QiaoJiaSystem/build/data/labels/109_1.png
new file mode 100644
index 0000000..16bc989
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_2.png b/QiaoJiaSystem/build/data/labels/109_2.png
new file mode 100644
index 0000000..cf8cf63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_3.png b/QiaoJiaSystem/build/data/labels/109_3.png
new file mode 100644
index 0000000..5f6757b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_4.png b/QiaoJiaSystem/build/data/labels/109_4.png
new file mode 100644
index 0000000..5d9fdab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_5.png b/QiaoJiaSystem/build/data/labels/109_5.png
new file mode 100644
index 0000000..be6b733
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_6.png b/QiaoJiaSystem/build/data/labels/109_6.png
new file mode 100644
index 0000000..a02a117
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/109_7.png b/QiaoJiaSystem/build/data/labels/109_7.png
new file mode 100644
index 0000000..1349d93
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/109_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_0.png b/QiaoJiaSystem/build/data/labels/110_0.png
new file mode 100644
index 0000000..49a2582
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_1.png b/QiaoJiaSystem/build/data/labels/110_1.png
new file mode 100644
index 0000000..10630cc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_2.png b/QiaoJiaSystem/build/data/labels/110_2.png
new file mode 100644
index 0000000..f9004da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_3.png b/QiaoJiaSystem/build/data/labels/110_3.png
new file mode 100644
index 0000000..b0d6ae1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_4.png b/QiaoJiaSystem/build/data/labels/110_4.png
new file mode 100644
index 0000000..8f57528
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_5.png b/QiaoJiaSystem/build/data/labels/110_5.png
new file mode 100644
index 0000000..b335e49
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_6.png b/QiaoJiaSystem/build/data/labels/110_6.png
new file mode 100644
index 0000000..450fbb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/110_7.png b/QiaoJiaSystem/build/data/labels/110_7.png
new file mode 100644
index 0000000..c7b4754
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/110_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_0.png b/QiaoJiaSystem/build/data/labels/111_0.png
new file mode 100644
index 0000000..a0e5883
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_1.png b/QiaoJiaSystem/build/data/labels/111_1.png
new file mode 100644
index 0000000..9c17d57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_2.png b/QiaoJiaSystem/build/data/labels/111_2.png
new file mode 100644
index 0000000..4771086
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_3.png b/QiaoJiaSystem/build/data/labels/111_3.png
new file mode 100644
index 0000000..bfba021
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_4.png b/QiaoJiaSystem/build/data/labels/111_4.png
new file mode 100644
index 0000000..7a4aeda
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_5.png b/QiaoJiaSystem/build/data/labels/111_5.png
new file mode 100644
index 0000000..180a9c5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_6.png b/QiaoJiaSystem/build/data/labels/111_6.png
new file mode 100644
index 0000000..e1482cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/111_7.png b/QiaoJiaSystem/build/data/labels/111_7.png
new file mode 100644
index 0000000..c9355d0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/111_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_0.png b/QiaoJiaSystem/build/data/labels/112_0.png
new file mode 100644
index 0000000..d732efe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_1.png b/QiaoJiaSystem/build/data/labels/112_1.png
new file mode 100644
index 0000000..11243af
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_2.png b/QiaoJiaSystem/build/data/labels/112_2.png
new file mode 100644
index 0000000..c3c4220
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_3.png b/QiaoJiaSystem/build/data/labels/112_3.png
new file mode 100644
index 0000000..f830185
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_4.png b/QiaoJiaSystem/build/data/labels/112_4.png
new file mode 100644
index 0000000..a4b184a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_5.png b/QiaoJiaSystem/build/data/labels/112_5.png
new file mode 100644
index 0000000..02f97a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_6.png b/QiaoJiaSystem/build/data/labels/112_6.png
new file mode 100644
index 0000000..2001b39
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/112_7.png b/QiaoJiaSystem/build/data/labels/112_7.png
new file mode 100644
index 0000000..9a14a71
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/112_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_0.png b/QiaoJiaSystem/build/data/labels/113_0.png
new file mode 100644
index 0000000..e36c84e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_1.png b/QiaoJiaSystem/build/data/labels/113_1.png
new file mode 100644
index 0000000..4c81c21
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_2.png b/QiaoJiaSystem/build/data/labels/113_2.png
new file mode 100644
index 0000000..b29b8d0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_3.png b/QiaoJiaSystem/build/data/labels/113_3.png
new file mode 100644
index 0000000..6233584
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_4.png b/QiaoJiaSystem/build/data/labels/113_4.png
new file mode 100644
index 0000000..d1373f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_5.png b/QiaoJiaSystem/build/data/labels/113_5.png
new file mode 100644
index 0000000..ecfa110
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_6.png b/QiaoJiaSystem/build/data/labels/113_6.png
new file mode 100644
index 0000000..c4e0d98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/113_7.png b/QiaoJiaSystem/build/data/labels/113_7.png
new file mode 100644
index 0000000..55ac8cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/113_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_0.png b/QiaoJiaSystem/build/data/labels/114_0.png
new file mode 100644
index 0000000..9d42671
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_1.png b/QiaoJiaSystem/build/data/labels/114_1.png
new file mode 100644
index 0000000..277eed4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_2.png b/QiaoJiaSystem/build/data/labels/114_2.png
new file mode 100644
index 0000000..9c18af3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_3.png b/QiaoJiaSystem/build/data/labels/114_3.png
new file mode 100644
index 0000000..412f320
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_4.png b/QiaoJiaSystem/build/data/labels/114_4.png
new file mode 100644
index 0000000..65912f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_5.png b/QiaoJiaSystem/build/data/labels/114_5.png
new file mode 100644
index 0000000..fdf7bd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_6.png b/QiaoJiaSystem/build/data/labels/114_6.png
new file mode 100644
index 0000000..8f6b639
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/114_7.png b/QiaoJiaSystem/build/data/labels/114_7.png
new file mode 100644
index 0000000..acf9180
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/114_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_0.png b/QiaoJiaSystem/build/data/labels/115_0.png
new file mode 100644
index 0000000..4767c45
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_1.png b/QiaoJiaSystem/build/data/labels/115_1.png
new file mode 100644
index 0000000..79f5d39
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_2.png b/QiaoJiaSystem/build/data/labels/115_2.png
new file mode 100644
index 0000000..963c068
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_3.png b/QiaoJiaSystem/build/data/labels/115_3.png
new file mode 100644
index 0000000..bc0d24f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_4.png b/QiaoJiaSystem/build/data/labels/115_4.png
new file mode 100644
index 0000000..a39b0f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_5.png b/QiaoJiaSystem/build/data/labels/115_5.png
new file mode 100644
index 0000000..63e0078
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_6.png b/QiaoJiaSystem/build/data/labels/115_6.png
new file mode 100644
index 0000000..344ef84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/115_7.png b/QiaoJiaSystem/build/data/labels/115_7.png
new file mode 100644
index 0000000..c6e743c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/115_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_0.png b/QiaoJiaSystem/build/data/labels/116_0.png
new file mode 100644
index 0000000..bf9b263
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_1.png b/QiaoJiaSystem/build/data/labels/116_1.png
new file mode 100644
index 0000000..2fb12a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_2.png b/QiaoJiaSystem/build/data/labels/116_2.png
new file mode 100644
index 0000000..dd04491
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_3.png b/QiaoJiaSystem/build/data/labels/116_3.png
new file mode 100644
index 0000000..0314e85
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_4.png b/QiaoJiaSystem/build/data/labels/116_4.png
new file mode 100644
index 0000000..cf919a6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_5.png b/QiaoJiaSystem/build/data/labels/116_5.png
new file mode 100644
index 0000000..c9e04ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_6.png b/QiaoJiaSystem/build/data/labels/116_6.png
new file mode 100644
index 0000000..1d0ab79
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/116_7.png b/QiaoJiaSystem/build/data/labels/116_7.png
new file mode 100644
index 0000000..1fcdaa6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/116_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_0.png b/QiaoJiaSystem/build/data/labels/117_0.png
new file mode 100644
index 0000000..917b4a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_1.png b/QiaoJiaSystem/build/data/labels/117_1.png
new file mode 100644
index 0000000..59cae8a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_2.png b/QiaoJiaSystem/build/data/labels/117_2.png
new file mode 100644
index 0000000..d7c7f33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_3.png b/QiaoJiaSystem/build/data/labels/117_3.png
new file mode 100644
index 0000000..18679c3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_4.png b/QiaoJiaSystem/build/data/labels/117_4.png
new file mode 100644
index 0000000..bceedf9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_5.png b/QiaoJiaSystem/build/data/labels/117_5.png
new file mode 100644
index 0000000..c0bddab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_6.png b/QiaoJiaSystem/build/data/labels/117_6.png
new file mode 100644
index 0000000..731fd14
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/117_7.png b/QiaoJiaSystem/build/data/labels/117_7.png
new file mode 100644
index 0000000..c04ed0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/117_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_0.png b/QiaoJiaSystem/build/data/labels/118_0.png
new file mode 100644
index 0000000..4b8dfc6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_1.png b/QiaoJiaSystem/build/data/labels/118_1.png
new file mode 100644
index 0000000..fa886ac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_2.png b/QiaoJiaSystem/build/data/labels/118_2.png
new file mode 100644
index 0000000..958ff5e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_3.png b/QiaoJiaSystem/build/data/labels/118_3.png
new file mode 100644
index 0000000..241b788
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_4.png b/QiaoJiaSystem/build/data/labels/118_4.png
new file mode 100644
index 0000000..9399152
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_5.png b/QiaoJiaSystem/build/data/labels/118_5.png
new file mode 100644
index 0000000..279c954
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_6.png b/QiaoJiaSystem/build/data/labels/118_6.png
new file mode 100644
index 0000000..9379cb9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/118_7.png b/QiaoJiaSystem/build/data/labels/118_7.png
new file mode 100644
index 0000000..b34ca8a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/118_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_0.png b/QiaoJiaSystem/build/data/labels/119_0.png
new file mode 100644
index 0000000..ae03b91
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_1.png b/QiaoJiaSystem/build/data/labels/119_1.png
new file mode 100644
index 0000000..7794fb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_2.png b/QiaoJiaSystem/build/data/labels/119_2.png
new file mode 100644
index 0000000..976c49b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_3.png b/QiaoJiaSystem/build/data/labels/119_3.png
new file mode 100644
index 0000000..2e0160e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_4.png b/QiaoJiaSystem/build/data/labels/119_4.png
new file mode 100644
index 0000000..0540927
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_5.png b/QiaoJiaSystem/build/data/labels/119_5.png
new file mode 100644
index 0000000..4649a59
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_6.png b/QiaoJiaSystem/build/data/labels/119_6.png
new file mode 100644
index 0000000..eb5e0fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/119_7.png b/QiaoJiaSystem/build/data/labels/119_7.png
new file mode 100644
index 0000000..5615e77
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/119_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_0.png b/QiaoJiaSystem/build/data/labels/120_0.png
new file mode 100644
index 0000000..64fd621
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_1.png b/QiaoJiaSystem/build/data/labels/120_1.png
new file mode 100644
index 0000000..e13ecef
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_2.png b/QiaoJiaSystem/build/data/labels/120_2.png
new file mode 100644
index 0000000..b6ae604
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_3.png b/QiaoJiaSystem/build/data/labels/120_3.png
new file mode 100644
index 0000000..13a4c3c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_4.png b/QiaoJiaSystem/build/data/labels/120_4.png
new file mode 100644
index 0000000..af550a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_5.png b/QiaoJiaSystem/build/data/labels/120_5.png
new file mode 100644
index 0000000..38474e4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_6.png b/QiaoJiaSystem/build/data/labels/120_6.png
new file mode 100644
index 0000000..e356cde
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/120_7.png b/QiaoJiaSystem/build/data/labels/120_7.png
new file mode 100644
index 0000000..5a585b4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/120_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_0.png b/QiaoJiaSystem/build/data/labels/121_0.png
new file mode 100644
index 0000000..2c20381
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_1.png b/QiaoJiaSystem/build/data/labels/121_1.png
new file mode 100644
index 0000000..820c17d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_2.png b/QiaoJiaSystem/build/data/labels/121_2.png
new file mode 100644
index 0000000..fabda00
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_3.png b/QiaoJiaSystem/build/data/labels/121_3.png
new file mode 100644
index 0000000..79ac0b1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_4.png b/QiaoJiaSystem/build/data/labels/121_4.png
new file mode 100644
index 0000000..7ded729
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_5.png b/QiaoJiaSystem/build/data/labels/121_5.png
new file mode 100644
index 0000000..5d59b5a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_6.png b/QiaoJiaSystem/build/data/labels/121_6.png
new file mode 100644
index 0000000..49a63f3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/121_7.png b/QiaoJiaSystem/build/data/labels/121_7.png
new file mode 100644
index 0000000..fea7b9e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/121_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_0.png b/QiaoJiaSystem/build/data/labels/122_0.png
new file mode 100644
index 0000000..76ed270
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_1.png b/QiaoJiaSystem/build/data/labels/122_1.png
new file mode 100644
index 0000000..57f2857
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_2.png b/QiaoJiaSystem/build/data/labels/122_2.png
new file mode 100644
index 0000000..d9f27cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_3.png b/QiaoJiaSystem/build/data/labels/122_3.png
new file mode 100644
index 0000000..c065790
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_4.png b/QiaoJiaSystem/build/data/labels/122_4.png
new file mode 100644
index 0000000..62b891e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_5.png b/QiaoJiaSystem/build/data/labels/122_5.png
new file mode 100644
index 0000000..276222e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_6.png b/QiaoJiaSystem/build/data/labels/122_6.png
new file mode 100644
index 0000000..0b2924e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/122_7.png b/QiaoJiaSystem/build/data/labels/122_7.png
new file mode 100644
index 0000000..8708778
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/122_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_0.png b/QiaoJiaSystem/build/data/labels/123_0.png
new file mode 100644
index 0000000..95f92aa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_1.png b/QiaoJiaSystem/build/data/labels/123_1.png
new file mode 100644
index 0000000..e0e4fdd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_2.png b/QiaoJiaSystem/build/data/labels/123_2.png
new file mode 100644
index 0000000..6a9c0b0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_3.png b/QiaoJiaSystem/build/data/labels/123_3.png
new file mode 100644
index 0000000..8783377
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_4.png b/QiaoJiaSystem/build/data/labels/123_4.png
new file mode 100644
index 0000000..c9de4f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_5.png b/QiaoJiaSystem/build/data/labels/123_5.png
new file mode 100644
index 0000000..8deaa3c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_6.png b/QiaoJiaSystem/build/data/labels/123_6.png
new file mode 100644
index 0000000..47ca880
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/123_7.png b/QiaoJiaSystem/build/data/labels/123_7.png
new file mode 100644
index 0000000..bf3a5d7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/123_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_0.png b/QiaoJiaSystem/build/data/labels/124_0.png
new file mode 100644
index 0000000..a54db7c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_1.png b/QiaoJiaSystem/build/data/labels/124_1.png
new file mode 100644
index 0000000..c545361
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_2.png b/QiaoJiaSystem/build/data/labels/124_2.png
new file mode 100644
index 0000000..c5a6a76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_3.png b/QiaoJiaSystem/build/data/labels/124_3.png
new file mode 100644
index 0000000..37b9e82
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_4.png b/QiaoJiaSystem/build/data/labels/124_4.png
new file mode 100644
index 0000000..0521fe2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_5.png b/QiaoJiaSystem/build/data/labels/124_5.png
new file mode 100644
index 0000000..a5ad765
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_6.png b/QiaoJiaSystem/build/data/labels/124_6.png
new file mode 100644
index 0000000..2dbf0f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/124_7.png b/QiaoJiaSystem/build/data/labels/124_7.png
new file mode 100644
index 0000000..0730ca0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/124_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_0.png b/QiaoJiaSystem/build/data/labels/125_0.png
new file mode 100644
index 0000000..67e37b2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_1.png b/QiaoJiaSystem/build/data/labels/125_1.png
new file mode 100644
index 0000000..4dc1ea5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_2.png b/QiaoJiaSystem/build/data/labels/125_2.png
new file mode 100644
index 0000000..6f3babe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_3.png b/QiaoJiaSystem/build/data/labels/125_3.png
new file mode 100644
index 0000000..4c7a26c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_4.png b/QiaoJiaSystem/build/data/labels/125_4.png
new file mode 100644
index 0000000..149eaa9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_5.png b/QiaoJiaSystem/build/data/labels/125_5.png
new file mode 100644
index 0000000..8ae40f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_6.png b/QiaoJiaSystem/build/data/labels/125_6.png
new file mode 100644
index 0000000..5893043
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/125_7.png b/QiaoJiaSystem/build/data/labels/125_7.png
new file mode 100644
index 0000000..47bd85b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/125_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_0.png b/QiaoJiaSystem/build/data/labels/126_0.png
new file mode 100644
index 0000000..f602708
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_1.png b/QiaoJiaSystem/build/data/labels/126_1.png
new file mode 100644
index 0000000..cb8b76e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_2.png b/QiaoJiaSystem/build/data/labels/126_2.png
new file mode 100644
index 0000000..ccef7a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_3.png b/QiaoJiaSystem/build/data/labels/126_3.png
new file mode 100644
index 0000000..9fcf7ab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_4.png b/QiaoJiaSystem/build/data/labels/126_4.png
new file mode 100644
index 0000000..d3f01bf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_5.png b/QiaoJiaSystem/build/data/labels/126_5.png
new file mode 100644
index 0000000..00c57f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_6.png b/QiaoJiaSystem/build/data/labels/126_6.png
new file mode 100644
index 0000000..2c2dbb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/126_7.png b/QiaoJiaSystem/build/data/labels/126_7.png
new file mode 100644
index 0000000..55ee5a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/126_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_0.png b/QiaoJiaSystem/build/data/labels/32_0.png
new file mode 100644
index 0000000..22be2de
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_1.png b/QiaoJiaSystem/build/data/labels/32_1.png
new file mode 100644
index 0000000..21abfa4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_2.png b/QiaoJiaSystem/build/data/labels/32_2.png
new file mode 100644
index 0000000..eae41b9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_3.png b/QiaoJiaSystem/build/data/labels/32_3.png
new file mode 100644
index 0000000..fcc007e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_4.png b/QiaoJiaSystem/build/data/labels/32_4.png
new file mode 100644
index 0000000..f4c498c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_5.png b/QiaoJiaSystem/build/data/labels/32_5.png
new file mode 100644
index 0000000..16248c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_6.png b/QiaoJiaSystem/build/data/labels/32_6.png
new file mode 100644
index 0000000..1e50183
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/32_7.png b/QiaoJiaSystem/build/data/labels/32_7.png
new file mode 100644
index 0000000..81bd1d5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/32_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_0.png b/QiaoJiaSystem/build/data/labels/33_0.png
new file mode 100644
index 0000000..d1a1141
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_1.png b/QiaoJiaSystem/build/data/labels/33_1.png
new file mode 100644
index 0000000..a13dd33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_2.png b/QiaoJiaSystem/build/data/labels/33_2.png
new file mode 100644
index 0000000..57201b2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_3.png b/QiaoJiaSystem/build/data/labels/33_3.png
new file mode 100644
index 0000000..0210160
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_4.png b/QiaoJiaSystem/build/data/labels/33_4.png
new file mode 100644
index 0000000..fd181d1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_5.png b/QiaoJiaSystem/build/data/labels/33_5.png
new file mode 100644
index 0000000..ed4387a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_6.png b/QiaoJiaSystem/build/data/labels/33_6.png
new file mode 100644
index 0000000..1126292
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/33_7.png b/QiaoJiaSystem/build/data/labels/33_7.png
new file mode 100644
index 0000000..1d67d55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/33_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_0.png b/QiaoJiaSystem/build/data/labels/34_0.png
new file mode 100644
index 0000000..7b24cfa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_1.png b/QiaoJiaSystem/build/data/labels/34_1.png
new file mode 100644
index 0000000..39f7edc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_2.png b/QiaoJiaSystem/build/data/labels/34_2.png
new file mode 100644
index 0000000..00c4e87
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_3.png b/QiaoJiaSystem/build/data/labels/34_3.png
new file mode 100644
index 0000000..79d5176
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_4.png b/QiaoJiaSystem/build/data/labels/34_4.png
new file mode 100644
index 0000000..d524830
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_5.png b/QiaoJiaSystem/build/data/labels/34_5.png
new file mode 100644
index 0000000..25a7e43
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_6.png b/QiaoJiaSystem/build/data/labels/34_6.png
new file mode 100644
index 0000000..bf3b613
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/34_7.png b/QiaoJiaSystem/build/data/labels/34_7.png
new file mode 100644
index 0000000..1148f2d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/34_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_0.png b/QiaoJiaSystem/build/data/labels/35_0.png
new file mode 100644
index 0000000..ff572a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_1.png b/QiaoJiaSystem/build/data/labels/35_1.png
new file mode 100644
index 0000000..1bba494
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_2.png b/QiaoJiaSystem/build/data/labels/35_2.png
new file mode 100644
index 0000000..b7d708e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_3.png b/QiaoJiaSystem/build/data/labels/35_3.png
new file mode 100644
index 0000000..302cc73
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_4.png b/QiaoJiaSystem/build/data/labels/35_4.png
new file mode 100644
index 0000000..9e11a20
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_5.png b/QiaoJiaSystem/build/data/labels/35_5.png
new file mode 100644
index 0000000..9ab56b3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_6.png b/QiaoJiaSystem/build/data/labels/35_6.png
new file mode 100644
index 0000000..d75876c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/35_7.png b/QiaoJiaSystem/build/data/labels/35_7.png
new file mode 100644
index 0000000..1bbdc9f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/35_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_0.png b/QiaoJiaSystem/build/data/labels/36_0.png
new file mode 100644
index 0000000..929660a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_1.png b/QiaoJiaSystem/build/data/labels/36_1.png
new file mode 100644
index 0000000..646e770
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_2.png b/QiaoJiaSystem/build/data/labels/36_2.png
new file mode 100644
index 0000000..ba6603c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_3.png b/QiaoJiaSystem/build/data/labels/36_3.png
new file mode 100644
index 0000000..56e5ba3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_4.png b/QiaoJiaSystem/build/data/labels/36_4.png
new file mode 100644
index 0000000..e87046c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_5.png b/QiaoJiaSystem/build/data/labels/36_5.png
new file mode 100644
index 0000000..5a7672d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_6.png b/QiaoJiaSystem/build/data/labels/36_6.png
new file mode 100644
index 0000000..b16b2a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/36_7.png b/QiaoJiaSystem/build/data/labels/36_7.png
new file mode 100644
index 0000000..1f94312
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/36_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_0.png b/QiaoJiaSystem/build/data/labels/37_0.png
new file mode 100644
index 0000000..44b7f4e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_1.png b/QiaoJiaSystem/build/data/labels/37_1.png
new file mode 100644
index 0000000..36712dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_2.png b/QiaoJiaSystem/build/data/labels/37_2.png
new file mode 100644
index 0000000..759aed9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_3.png b/QiaoJiaSystem/build/data/labels/37_3.png
new file mode 100644
index 0000000..03253dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_4.png b/QiaoJiaSystem/build/data/labels/37_4.png
new file mode 100644
index 0000000..ed5e4bd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_5.png b/QiaoJiaSystem/build/data/labels/37_5.png
new file mode 100644
index 0000000..fe20590
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_6.png b/QiaoJiaSystem/build/data/labels/37_6.png
new file mode 100644
index 0000000..11f34eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/37_7.png b/QiaoJiaSystem/build/data/labels/37_7.png
new file mode 100644
index 0000000..dee9ba3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/37_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_0.png b/QiaoJiaSystem/build/data/labels/38_0.png
new file mode 100644
index 0000000..47c51e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_1.png b/QiaoJiaSystem/build/data/labels/38_1.png
new file mode 100644
index 0000000..3abcc8b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_2.png b/QiaoJiaSystem/build/data/labels/38_2.png
new file mode 100644
index 0000000..47a85e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_3.png b/QiaoJiaSystem/build/data/labels/38_3.png
new file mode 100644
index 0000000..1af926e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_4.png b/QiaoJiaSystem/build/data/labels/38_4.png
new file mode 100644
index 0000000..783342a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_5.png b/QiaoJiaSystem/build/data/labels/38_5.png
new file mode 100644
index 0000000..20b9222
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_6.png b/QiaoJiaSystem/build/data/labels/38_6.png
new file mode 100644
index 0000000..f68e4d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/38_7.png b/QiaoJiaSystem/build/data/labels/38_7.png
new file mode 100644
index 0000000..c6ffc54
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/38_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_0.png b/QiaoJiaSystem/build/data/labels/39_0.png
new file mode 100644
index 0000000..860f831
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_1.png b/QiaoJiaSystem/build/data/labels/39_1.png
new file mode 100644
index 0000000..021b232
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_2.png b/QiaoJiaSystem/build/data/labels/39_2.png
new file mode 100644
index 0000000..7ac7b15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_3.png b/QiaoJiaSystem/build/data/labels/39_3.png
new file mode 100644
index 0000000..82baf94
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_4.png b/QiaoJiaSystem/build/data/labels/39_4.png
new file mode 100644
index 0000000..4fb4186
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_5.png b/QiaoJiaSystem/build/data/labels/39_5.png
new file mode 100644
index 0000000..1c613c5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_6.png b/QiaoJiaSystem/build/data/labels/39_6.png
new file mode 100644
index 0000000..e570bcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/39_7.png b/QiaoJiaSystem/build/data/labels/39_7.png
new file mode 100644
index 0000000..5cb309f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/39_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_0.png b/QiaoJiaSystem/build/data/labels/40_0.png
new file mode 100644
index 0000000..346c633
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_1.png b/QiaoJiaSystem/build/data/labels/40_1.png
new file mode 100644
index 0000000..7dfa7b5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_2.png b/QiaoJiaSystem/build/data/labels/40_2.png
new file mode 100644
index 0000000..a2b0e0f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_3.png b/QiaoJiaSystem/build/data/labels/40_3.png
new file mode 100644
index 0000000..f727425
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_4.png b/QiaoJiaSystem/build/data/labels/40_4.png
new file mode 100644
index 0000000..4c89b55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_5.png b/QiaoJiaSystem/build/data/labels/40_5.png
new file mode 100644
index 0000000..35b4fcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_6.png b/QiaoJiaSystem/build/data/labels/40_6.png
new file mode 100644
index 0000000..215972b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/40_7.png b/QiaoJiaSystem/build/data/labels/40_7.png
new file mode 100644
index 0000000..0d8eb55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/40_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_0.png b/QiaoJiaSystem/build/data/labels/41_0.png
new file mode 100644
index 0000000..42dd387
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_1.png b/QiaoJiaSystem/build/data/labels/41_1.png
new file mode 100644
index 0000000..0e1da96
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_2.png b/QiaoJiaSystem/build/data/labels/41_2.png
new file mode 100644
index 0000000..31cf47d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_3.png b/QiaoJiaSystem/build/data/labels/41_3.png
new file mode 100644
index 0000000..e512186
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_4.png b/QiaoJiaSystem/build/data/labels/41_4.png
new file mode 100644
index 0000000..150cb57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_5.png b/QiaoJiaSystem/build/data/labels/41_5.png
new file mode 100644
index 0000000..7ac1a18
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_6.png b/QiaoJiaSystem/build/data/labels/41_6.png
new file mode 100644
index 0000000..4bdd2f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/41_7.png b/QiaoJiaSystem/build/data/labels/41_7.png
new file mode 100644
index 0000000..50568ba
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/41_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_0.png b/QiaoJiaSystem/build/data/labels/42_0.png
new file mode 100644
index 0000000..f41cd84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_1.png b/QiaoJiaSystem/build/data/labels/42_1.png
new file mode 100644
index 0000000..4aee8e6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_2.png b/QiaoJiaSystem/build/data/labels/42_2.png
new file mode 100644
index 0000000..e045f1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_3.png b/QiaoJiaSystem/build/data/labels/42_3.png
new file mode 100644
index 0000000..edc194b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_4.png b/QiaoJiaSystem/build/data/labels/42_4.png
new file mode 100644
index 0000000..e417c3e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_5.png b/QiaoJiaSystem/build/data/labels/42_5.png
new file mode 100644
index 0000000..d6593c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_6.png b/QiaoJiaSystem/build/data/labels/42_6.png
new file mode 100644
index 0000000..ffcaaed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/42_7.png b/QiaoJiaSystem/build/data/labels/42_7.png
new file mode 100644
index 0000000..4895af7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/42_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_0.png b/QiaoJiaSystem/build/data/labels/43_0.png
new file mode 100644
index 0000000..af5295e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_1.png b/QiaoJiaSystem/build/data/labels/43_1.png
new file mode 100644
index 0000000..0e20f34
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_2.png b/QiaoJiaSystem/build/data/labels/43_2.png
new file mode 100644
index 0000000..be2fbb3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_3.png b/QiaoJiaSystem/build/data/labels/43_3.png
new file mode 100644
index 0000000..5183eb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_4.png b/QiaoJiaSystem/build/data/labels/43_4.png
new file mode 100644
index 0000000..526b500
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_5.png b/QiaoJiaSystem/build/data/labels/43_5.png
new file mode 100644
index 0000000..03d62ff
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_6.png b/QiaoJiaSystem/build/data/labels/43_6.png
new file mode 100644
index 0000000..b245a4c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/43_7.png b/QiaoJiaSystem/build/data/labels/43_7.png
new file mode 100644
index 0000000..e21688a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/43_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_0.png b/QiaoJiaSystem/build/data/labels/44_0.png
new file mode 100644
index 0000000..63e66ff
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_1.png b/QiaoJiaSystem/build/data/labels/44_1.png
new file mode 100644
index 0000000..49f2fe2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_2.png b/QiaoJiaSystem/build/data/labels/44_2.png
new file mode 100644
index 0000000..32fd2de
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_3.png b/QiaoJiaSystem/build/data/labels/44_3.png
new file mode 100644
index 0000000..bb1118f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_4.png b/QiaoJiaSystem/build/data/labels/44_4.png
new file mode 100644
index 0000000..cd80bbd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_5.png b/QiaoJiaSystem/build/data/labels/44_5.png
new file mode 100644
index 0000000..f83e115
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_6.png b/QiaoJiaSystem/build/data/labels/44_6.png
new file mode 100644
index 0000000..1f8ad89
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/44_7.png b/QiaoJiaSystem/build/data/labels/44_7.png
new file mode 100644
index 0000000..8c5d632
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/44_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_0.png b/QiaoJiaSystem/build/data/labels/45_0.png
new file mode 100644
index 0000000..701bdc8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_1.png b/QiaoJiaSystem/build/data/labels/45_1.png
new file mode 100644
index 0000000..976103f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_2.png b/QiaoJiaSystem/build/data/labels/45_2.png
new file mode 100644
index 0000000..4bc50cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_3.png b/QiaoJiaSystem/build/data/labels/45_3.png
new file mode 100644
index 0000000..335c2c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_4.png b/QiaoJiaSystem/build/data/labels/45_4.png
new file mode 100644
index 0000000..8fc2738
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_5.png b/QiaoJiaSystem/build/data/labels/45_5.png
new file mode 100644
index 0000000..acc4c09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_6.png b/QiaoJiaSystem/build/data/labels/45_6.png
new file mode 100644
index 0000000..0077104
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/45_7.png b/QiaoJiaSystem/build/data/labels/45_7.png
new file mode 100644
index 0000000..d486ccd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/45_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_0.png b/QiaoJiaSystem/build/data/labels/46_0.png
new file mode 100644
index 0000000..44fa798
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_1.png b/QiaoJiaSystem/build/data/labels/46_1.png
new file mode 100644
index 0000000..0f35bbb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_2.png b/QiaoJiaSystem/build/data/labels/46_2.png
new file mode 100644
index 0000000..e3355f5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_3.png b/QiaoJiaSystem/build/data/labels/46_3.png
new file mode 100644
index 0000000..9226458
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_4.png b/QiaoJiaSystem/build/data/labels/46_4.png
new file mode 100644
index 0000000..77a841c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_5.png b/QiaoJiaSystem/build/data/labels/46_5.png
new file mode 100644
index 0000000..e86cbaf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_6.png b/QiaoJiaSystem/build/data/labels/46_6.png
new file mode 100644
index 0000000..5011ded
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/46_7.png b/QiaoJiaSystem/build/data/labels/46_7.png
new file mode 100644
index 0000000..53c8871
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/46_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_0.png b/QiaoJiaSystem/build/data/labels/47_0.png
new file mode 100644
index 0000000..9b7c050
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_1.png b/QiaoJiaSystem/build/data/labels/47_1.png
new file mode 100644
index 0000000..75ba112
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_2.png b/QiaoJiaSystem/build/data/labels/47_2.png
new file mode 100644
index 0000000..2f07656
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_3.png b/QiaoJiaSystem/build/data/labels/47_3.png
new file mode 100644
index 0000000..3fd0728
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_4.png b/QiaoJiaSystem/build/data/labels/47_4.png
new file mode 100644
index 0000000..9e503eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_5.png b/QiaoJiaSystem/build/data/labels/47_5.png
new file mode 100644
index 0000000..fddef15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_6.png b/QiaoJiaSystem/build/data/labels/47_6.png
new file mode 100644
index 0000000..0117b55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/47_7.png b/QiaoJiaSystem/build/data/labels/47_7.png
new file mode 100644
index 0000000..fff1323
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/47_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_0.png b/QiaoJiaSystem/build/data/labels/48_0.png
new file mode 100644
index 0000000..4775310
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_1.png b/QiaoJiaSystem/build/data/labels/48_1.png
new file mode 100644
index 0000000..231cd3f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_2.png b/QiaoJiaSystem/build/data/labels/48_2.png
new file mode 100644
index 0000000..b653e9c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_3.png b/QiaoJiaSystem/build/data/labels/48_3.png
new file mode 100644
index 0000000..d148a75
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_4.png b/QiaoJiaSystem/build/data/labels/48_4.png
new file mode 100644
index 0000000..9e1b0d5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_5.png b/QiaoJiaSystem/build/data/labels/48_5.png
new file mode 100644
index 0000000..f554133
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_6.png b/QiaoJiaSystem/build/data/labels/48_6.png
new file mode 100644
index 0000000..d841928
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/48_7.png b/QiaoJiaSystem/build/data/labels/48_7.png
new file mode 100644
index 0000000..145ed36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/48_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_0.png b/QiaoJiaSystem/build/data/labels/49_0.png
new file mode 100644
index 0000000..f979710
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_1.png b/QiaoJiaSystem/build/data/labels/49_1.png
new file mode 100644
index 0000000..0cb26d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_2.png b/QiaoJiaSystem/build/data/labels/49_2.png
new file mode 100644
index 0000000..0684a71
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_3.png b/QiaoJiaSystem/build/data/labels/49_3.png
new file mode 100644
index 0000000..ce89eb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_4.png b/QiaoJiaSystem/build/data/labels/49_4.png
new file mode 100644
index 0000000..a8f6b14
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_5.png b/QiaoJiaSystem/build/data/labels/49_5.png
new file mode 100644
index 0000000..c7e8033
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_6.png b/QiaoJiaSystem/build/data/labels/49_6.png
new file mode 100644
index 0000000..a091704
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/49_7.png b/QiaoJiaSystem/build/data/labels/49_7.png
new file mode 100644
index 0000000..f385b75
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/49_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_0.png b/QiaoJiaSystem/build/data/labels/50_0.png
new file mode 100644
index 0000000..6af169d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_1.png b/QiaoJiaSystem/build/data/labels/50_1.png
new file mode 100644
index 0000000..a3c0300
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_2.png b/QiaoJiaSystem/build/data/labels/50_2.png
new file mode 100644
index 0000000..1ea6ff6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_3.png b/QiaoJiaSystem/build/data/labels/50_3.png
new file mode 100644
index 0000000..3c0bf1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_4.png b/QiaoJiaSystem/build/data/labels/50_4.png
new file mode 100644
index 0000000..eb6a9d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_5.png b/QiaoJiaSystem/build/data/labels/50_5.png
new file mode 100644
index 0000000..acdb5ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_6.png b/QiaoJiaSystem/build/data/labels/50_6.png
new file mode 100644
index 0000000..c74ac5a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/50_7.png b/QiaoJiaSystem/build/data/labels/50_7.png
new file mode 100644
index 0000000..6d3f530
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/50_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_0.png b/QiaoJiaSystem/build/data/labels/51_0.png
new file mode 100644
index 0000000..48bad97
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_1.png b/QiaoJiaSystem/build/data/labels/51_1.png
new file mode 100644
index 0000000..7703a74
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_2.png b/QiaoJiaSystem/build/data/labels/51_2.png
new file mode 100644
index 0000000..804e21b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_3.png b/QiaoJiaSystem/build/data/labels/51_3.png
new file mode 100644
index 0000000..5b08757
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_4.png b/QiaoJiaSystem/build/data/labels/51_4.png
new file mode 100644
index 0000000..30727fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_5.png b/QiaoJiaSystem/build/data/labels/51_5.png
new file mode 100644
index 0000000..de240ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_6.png b/QiaoJiaSystem/build/data/labels/51_6.png
new file mode 100644
index 0000000..c252b01
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/51_7.png b/QiaoJiaSystem/build/data/labels/51_7.png
new file mode 100644
index 0000000..806f99b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/51_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_0.png b/QiaoJiaSystem/build/data/labels/52_0.png
new file mode 100644
index 0000000..a554b31
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_1.png b/QiaoJiaSystem/build/data/labels/52_1.png
new file mode 100644
index 0000000..936c84f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_2.png b/QiaoJiaSystem/build/data/labels/52_2.png
new file mode 100644
index 0000000..57e3f05
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_3.png b/QiaoJiaSystem/build/data/labels/52_3.png
new file mode 100644
index 0000000..6a8f99e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_4.png b/QiaoJiaSystem/build/data/labels/52_4.png
new file mode 100644
index 0000000..91f97f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_5.png b/QiaoJiaSystem/build/data/labels/52_5.png
new file mode 100644
index 0000000..a78504f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_6.png b/QiaoJiaSystem/build/data/labels/52_6.png
new file mode 100644
index 0000000..f52bd2c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/52_7.png b/QiaoJiaSystem/build/data/labels/52_7.png
new file mode 100644
index 0000000..621b8e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/52_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_0.png b/QiaoJiaSystem/build/data/labels/53_0.png
new file mode 100644
index 0000000..a750615
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_1.png b/QiaoJiaSystem/build/data/labels/53_1.png
new file mode 100644
index 0000000..1c4e097
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_2.png b/QiaoJiaSystem/build/data/labels/53_2.png
new file mode 100644
index 0000000..f523856
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_3.png b/QiaoJiaSystem/build/data/labels/53_3.png
new file mode 100644
index 0000000..85505f8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_4.png b/QiaoJiaSystem/build/data/labels/53_4.png
new file mode 100644
index 0000000..14e8da1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_5.png b/QiaoJiaSystem/build/data/labels/53_5.png
new file mode 100644
index 0000000..79781fc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_6.png b/QiaoJiaSystem/build/data/labels/53_6.png
new file mode 100644
index 0000000..a6e1863
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/53_7.png b/QiaoJiaSystem/build/data/labels/53_7.png
new file mode 100644
index 0000000..bff5eb6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/53_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_0.png b/QiaoJiaSystem/build/data/labels/54_0.png
new file mode 100644
index 0000000..98ce423
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_1.png b/QiaoJiaSystem/build/data/labels/54_1.png
new file mode 100644
index 0000000..643ef36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_2.png b/QiaoJiaSystem/build/data/labels/54_2.png
new file mode 100644
index 0000000..2c3894e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_3.png b/QiaoJiaSystem/build/data/labels/54_3.png
new file mode 100644
index 0000000..6190fdc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_4.png b/QiaoJiaSystem/build/data/labels/54_4.png
new file mode 100644
index 0000000..92afc20
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_5.png b/QiaoJiaSystem/build/data/labels/54_5.png
new file mode 100644
index 0000000..feab352
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_6.png b/QiaoJiaSystem/build/data/labels/54_6.png
new file mode 100644
index 0000000..c46698f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/54_7.png b/QiaoJiaSystem/build/data/labels/54_7.png
new file mode 100644
index 0000000..175dbeb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/54_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_0.png b/QiaoJiaSystem/build/data/labels/55_0.png
new file mode 100644
index 0000000..644838b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_1.png b/QiaoJiaSystem/build/data/labels/55_1.png
new file mode 100644
index 0000000..b84e0eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_2.png b/QiaoJiaSystem/build/data/labels/55_2.png
new file mode 100644
index 0000000..3896d08
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_3.png b/QiaoJiaSystem/build/data/labels/55_3.png
new file mode 100644
index 0000000..21e9266
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_4.png b/QiaoJiaSystem/build/data/labels/55_4.png
new file mode 100644
index 0000000..d6aed1b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_5.png b/QiaoJiaSystem/build/data/labels/55_5.png
new file mode 100644
index 0000000..1f60c36
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_6.png b/QiaoJiaSystem/build/data/labels/55_6.png
new file mode 100644
index 0000000..2a7f1fb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/55_7.png b/QiaoJiaSystem/build/data/labels/55_7.png
new file mode 100644
index 0000000..80c527b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/55_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_0.png b/QiaoJiaSystem/build/data/labels/56_0.png
new file mode 100644
index 0000000..8a1e0c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_1.png b/QiaoJiaSystem/build/data/labels/56_1.png
new file mode 100644
index 0000000..a0a81a0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_2.png b/QiaoJiaSystem/build/data/labels/56_2.png
new file mode 100644
index 0000000..367f20e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_3.png b/QiaoJiaSystem/build/data/labels/56_3.png
new file mode 100644
index 0000000..cf56f8f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_4.png b/QiaoJiaSystem/build/data/labels/56_4.png
new file mode 100644
index 0000000..e57cce7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_5.png b/QiaoJiaSystem/build/data/labels/56_5.png
new file mode 100644
index 0000000..c206547
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_6.png b/QiaoJiaSystem/build/data/labels/56_6.png
new file mode 100644
index 0000000..040692a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/56_7.png b/QiaoJiaSystem/build/data/labels/56_7.png
new file mode 100644
index 0000000..4c27c10
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/56_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_0.png b/QiaoJiaSystem/build/data/labels/57_0.png
new file mode 100644
index 0000000..e20a46f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_1.png b/QiaoJiaSystem/build/data/labels/57_1.png
new file mode 100644
index 0000000..17cd262
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_2.png b/QiaoJiaSystem/build/data/labels/57_2.png
new file mode 100644
index 0000000..98fad29
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_3.png b/QiaoJiaSystem/build/data/labels/57_3.png
new file mode 100644
index 0000000..ba80aa0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_4.png b/QiaoJiaSystem/build/data/labels/57_4.png
new file mode 100644
index 0000000..e982243
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_5.png b/QiaoJiaSystem/build/data/labels/57_5.png
new file mode 100644
index 0000000..e947ff8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_6.png b/QiaoJiaSystem/build/data/labels/57_6.png
new file mode 100644
index 0000000..c4ae076
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/57_7.png b/QiaoJiaSystem/build/data/labels/57_7.png
new file mode 100644
index 0000000..bd4ca16
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/57_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_0.png b/QiaoJiaSystem/build/data/labels/58_0.png
new file mode 100644
index 0000000..d9e35f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_1.png b/QiaoJiaSystem/build/data/labels/58_1.png
new file mode 100644
index 0000000..0dd6dd0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_2.png b/QiaoJiaSystem/build/data/labels/58_2.png
new file mode 100644
index 0000000..b9f1319
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_3.png b/QiaoJiaSystem/build/data/labels/58_3.png
new file mode 100644
index 0000000..0604337
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_4.png b/QiaoJiaSystem/build/data/labels/58_4.png
new file mode 100644
index 0000000..7283e03
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_5.png b/QiaoJiaSystem/build/data/labels/58_5.png
new file mode 100644
index 0000000..2df3db9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_6.png b/QiaoJiaSystem/build/data/labels/58_6.png
new file mode 100644
index 0000000..e120909
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/58_7.png b/QiaoJiaSystem/build/data/labels/58_7.png
new file mode 100644
index 0000000..e85fc0a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/58_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_0.png b/QiaoJiaSystem/build/data/labels/59_0.png
new file mode 100644
index 0000000..09b2120
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_1.png b/QiaoJiaSystem/build/data/labels/59_1.png
new file mode 100644
index 0000000..4b91814
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_2.png b/QiaoJiaSystem/build/data/labels/59_2.png
new file mode 100644
index 0000000..cc302c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_3.png b/QiaoJiaSystem/build/data/labels/59_3.png
new file mode 100644
index 0000000..6921796
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_4.png b/QiaoJiaSystem/build/data/labels/59_4.png
new file mode 100644
index 0000000..4b77147
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_5.png b/QiaoJiaSystem/build/data/labels/59_5.png
new file mode 100644
index 0000000..4325e62
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_6.png b/QiaoJiaSystem/build/data/labels/59_6.png
new file mode 100644
index 0000000..135da33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/59_7.png b/QiaoJiaSystem/build/data/labels/59_7.png
new file mode 100644
index 0000000..353ae33
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/59_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_0.png b/QiaoJiaSystem/build/data/labels/60_0.png
new file mode 100644
index 0000000..210e77d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_1.png b/QiaoJiaSystem/build/data/labels/60_1.png
new file mode 100644
index 0000000..507c736
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_2.png b/QiaoJiaSystem/build/data/labels/60_2.png
new file mode 100644
index 0000000..4227322
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_3.png b/QiaoJiaSystem/build/data/labels/60_3.png
new file mode 100644
index 0000000..ac4d026
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_4.png b/QiaoJiaSystem/build/data/labels/60_4.png
new file mode 100644
index 0000000..5cf89ed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_5.png b/QiaoJiaSystem/build/data/labels/60_5.png
new file mode 100644
index 0000000..5ceb7fe
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_6.png b/QiaoJiaSystem/build/data/labels/60_6.png
new file mode 100644
index 0000000..45121a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/60_7.png b/QiaoJiaSystem/build/data/labels/60_7.png
new file mode 100644
index 0000000..33eb9e3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/60_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_0.png b/QiaoJiaSystem/build/data/labels/61_0.png
new file mode 100644
index 0000000..72bc6bf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_1.png b/QiaoJiaSystem/build/data/labels/61_1.png
new file mode 100644
index 0000000..50def57
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_2.png b/QiaoJiaSystem/build/data/labels/61_2.png
new file mode 100644
index 0000000..a0e9a67
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_3.png b/QiaoJiaSystem/build/data/labels/61_3.png
new file mode 100644
index 0000000..0b7d149
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_4.png b/QiaoJiaSystem/build/data/labels/61_4.png
new file mode 100644
index 0000000..c0b71d8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_5.png b/QiaoJiaSystem/build/data/labels/61_5.png
new file mode 100644
index 0000000..cf39e63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_6.png b/QiaoJiaSystem/build/data/labels/61_6.png
new file mode 100644
index 0000000..95282d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/61_7.png b/QiaoJiaSystem/build/data/labels/61_7.png
new file mode 100644
index 0000000..6da5c02
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/61_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_0.png b/QiaoJiaSystem/build/data/labels/62_0.png
new file mode 100644
index 0000000..bb12109
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_1.png b/QiaoJiaSystem/build/data/labels/62_1.png
new file mode 100644
index 0000000..5b82445
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_2.png b/QiaoJiaSystem/build/data/labels/62_2.png
new file mode 100644
index 0000000..d4ca5a6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_3.png b/QiaoJiaSystem/build/data/labels/62_3.png
new file mode 100644
index 0000000..24ddea8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_4.png b/QiaoJiaSystem/build/data/labels/62_4.png
new file mode 100644
index 0000000..34130a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_5.png b/QiaoJiaSystem/build/data/labels/62_5.png
new file mode 100644
index 0000000..823d996
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_6.png b/QiaoJiaSystem/build/data/labels/62_6.png
new file mode 100644
index 0000000..63dd85d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/62_7.png b/QiaoJiaSystem/build/data/labels/62_7.png
new file mode 100644
index 0000000..7c6158f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/62_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_0.png b/QiaoJiaSystem/build/data/labels/63_0.png
new file mode 100644
index 0000000..2d9571e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_1.png b/QiaoJiaSystem/build/data/labels/63_1.png
new file mode 100644
index 0000000..5376e07
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_2.png b/QiaoJiaSystem/build/data/labels/63_2.png
new file mode 100644
index 0000000..746ffa0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_3.png b/QiaoJiaSystem/build/data/labels/63_3.png
new file mode 100644
index 0000000..58bb35a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_4.png b/QiaoJiaSystem/build/data/labels/63_4.png
new file mode 100644
index 0000000..ff1dc1a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_5.png b/QiaoJiaSystem/build/data/labels/63_5.png
new file mode 100644
index 0000000..13e34ce
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_6.png b/QiaoJiaSystem/build/data/labels/63_6.png
new file mode 100644
index 0000000..9407c83
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/63_7.png b/QiaoJiaSystem/build/data/labels/63_7.png
new file mode 100644
index 0000000..e9c3edf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/63_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_0.png b/QiaoJiaSystem/build/data/labels/64_0.png
new file mode 100644
index 0000000..0a3a101
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_1.png b/QiaoJiaSystem/build/data/labels/64_1.png
new file mode 100644
index 0000000..6313960
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_2.png b/QiaoJiaSystem/build/data/labels/64_2.png
new file mode 100644
index 0000000..c49565c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_3.png b/QiaoJiaSystem/build/data/labels/64_3.png
new file mode 100644
index 0000000..c697f9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_4.png b/QiaoJiaSystem/build/data/labels/64_4.png
new file mode 100644
index 0000000..de194c7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_5.png b/QiaoJiaSystem/build/data/labels/64_5.png
new file mode 100644
index 0000000..9905004
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_6.png b/QiaoJiaSystem/build/data/labels/64_6.png
new file mode 100644
index 0000000..7b91569
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/64_7.png b/QiaoJiaSystem/build/data/labels/64_7.png
new file mode 100644
index 0000000..b9ebcee
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/64_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_0.png b/QiaoJiaSystem/build/data/labels/65_0.png
new file mode 100644
index 0000000..c388066
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_1.png b/QiaoJiaSystem/build/data/labels/65_1.png
new file mode 100644
index 0000000..9f7d7f7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_2.png b/QiaoJiaSystem/build/data/labels/65_2.png
new file mode 100644
index 0000000..6f76694
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_3.png b/QiaoJiaSystem/build/data/labels/65_3.png
new file mode 100644
index 0000000..3593128
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_4.png b/QiaoJiaSystem/build/data/labels/65_4.png
new file mode 100644
index 0000000..23f4814
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_5.png b/QiaoJiaSystem/build/data/labels/65_5.png
new file mode 100644
index 0000000..8eae6d7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_6.png b/QiaoJiaSystem/build/data/labels/65_6.png
new file mode 100644
index 0000000..02fec76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/65_7.png b/QiaoJiaSystem/build/data/labels/65_7.png
new file mode 100644
index 0000000..c80822e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/65_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_0.png b/QiaoJiaSystem/build/data/labels/66_0.png
new file mode 100644
index 0000000..278a401
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_1.png b/QiaoJiaSystem/build/data/labels/66_1.png
new file mode 100644
index 0000000..47c3735
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_2.png b/QiaoJiaSystem/build/data/labels/66_2.png
new file mode 100644
index 0000000..dfcf8c4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_3.png b/QiaoJiaSystem/build/data/labels/66_3.png
new file mode 100644
index 0000000..d8d69a7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_4.png b/QiaoJiaSystem/build/data/labels/66_4.png
new file mode 100644
index 0000000..842976a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_5.png b/QiaoJiaSystem/build/data/labels/66_5.png
new file mode 100644
index 0000000..991caf8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_6.png b/QiaoJiaSystem/build/data/labels/66_6.png
new file mode 100644
index 0000000..32c5284
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/66_7.png b/QiaoJiaSystem/build/data/labels/66_7.png
new file mode 100644
index 0000000..14e8609
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/66_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_0.png b/QiaoJiaSystem/build/data/labels/67_0.png
new file mode 100644
index 0000000..7f2786a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_1.png b/QiaoJiaSystem/build/data/labels/67_1.png
new file mode 100644
index 0000000..798b421
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_2.png b/QiaoJiaSystem/build/data/labels/67_2.png
new file mode 100644
index 0000000..802aaab
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_3.png b/QiaoJiaSystem/build/data/labels/67_3.png
new file mode 100644
index 0000000..9d975ca
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_4.png b/QiaoJiaSystem/build/data/labels/67_4.png
new file mode 100644
index 0000000..94ee577
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_5.png b/QiaoJiaSystem/build/data/labels/67_5.png
new file mode 100644
index 0000000..021a877
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_6.png b/QiaoJiaSystem/build/data/labels/67_6.png
new file mode 100644
index 0000000..c358732
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/67_7.png b/QiaoJiaSystem/build/data/labels/67_7.png
new file mode 100644
index 0000000..46acdf2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/67_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_0.png b/QiaoJiaSystem/build/data/labels/68_0.png
new file mode 100644
index 0000000..9e86a2f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_1.png b/QiaoJiaSystem/build/data/labels/68_1.png
new file mode 100644
index 0000000..d7d3ac3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_2.png b/QiaoJiaSystem/build/data/labels/68_2.png
new file mode 100644
index 0000000..3a48f05
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_3.png b/QiaoJiaSystem/build/data/labels/68_3.png
new file mode 100644
index 0000000..808603a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_4.png b/QiaoJiaSystem/build/data/labels/68_4.png
new file mode 100644
index 0000000..d4f9bd4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_5.png b/QiaoJiaSystem/build/data/labels/68_5.png
new file mode 100644
index 0000000..25d8a96
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_6.png b/QiaoJiaSystem/build/data/labels/68_6.png
new file mode 100644
index 0000000..0059c7f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/68_7.png b/QiaoJiaSystem/build/data/labels/68_7.png
new file mode 100644
index 0000000..c2aa922
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/68_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_0.png b/QiaoJiaSystem/build/data/labels/69_0.png
new file mode 100644
index 0000000..51140e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_1.png b/QiaoJiaSystem/build/data/labels/69_1.png
new file mode 100644
index 0000000..bcf7311
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_2.png b/QiaoJiaSystem/build/data/labels/69_2.png
new file mode 100644
index 0000000..582b289
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_3.png b/QiaoJiaSystem/build/data/labels/69_3.png
new file mode 100644
index 0000000..e331123
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_4.png b/QiaoJiaSystem/build/data/labels/69_4.png
new file mode 100644
index 0000000..a310f84
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_5.png b/QiaoJiaSystem/build/data/labels/69_5.png
new file mode 100644
index 0000000..ad69668
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_6.png b/QiaoJiaSystem/build/data/labels/69_6.png
new file mode 100644
index 0000000..a7b8f45
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/69_7.png b/QiaoJiaSystem/build/data/labels/69_7.png
new file mode 100644
index 0000000..7f3200c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/69_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_0.png b/QiaoJiaSystem/build/data/labels/70_0.png
new file mode 100644
index 0000000..e0fb76c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_1.png b/QiaoJiaSystem/build/data/labels/70_1.png
new file mode 100644
index 0000000..40c8217
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_2.png b/QiaoJiaSystem/build/data/labels/70_2.png
new file mode 100644
index 0000000..63c811b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_3.png b/QiaoJiaSystem/build/data/labels/70_3.png
new file mode 100644
index 0000000..7c93cf7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_4.png b/QiaoJiaSystem/build/data/labels/70_4.png
new file mode 100644
index 0000000..6033fb1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_5.png b/QiaoJiaSystem/build/data/labels/70_5.png
new file mode 100644
index 0000000..bfcf028
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_6.png b/QiaoJiaSystem/build/data/labels/70_6.png
new file mode 100644
index 0000000..5fe9cdb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/70_7.png b/QiaoJiaSystem/build/data/labels/70_7.png
new file mode 100644
index 0000000..027af86
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/70_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_0.png b/QiaoJiaSystem/build/data/labels/71_0.png
new file mode 100644
index 0000000..679b5e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_1.png b/QiaoJiaSystem/build/data/labels/71_1.png
new file mode 100644
index 0000000..6f5271b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_2.png b/QiaoJiaSystem/build/data/labels/71_2.png
new file mode 100644
index 0000000..93dc749
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_3.png b/QiaoJiaSystem/build/data/labels/71_3.png
new file mode 100644
index 0000000..03a4bc6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_4.png b/QiaoJiaSystem/build/data/labels/71_4.png
new file mode 100644
index 0000000..3976418
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_5.png b/QiaoJiaSystem/build/data/labels/71_5.png
new file mode 100644
index 0000000..b0c4295
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_6.png b/QiaoJiaSystem/build/data/labels/71_6.png
new file mode 100644
index 0000000..bb8710d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/71_7.png b/QiaoJiaSystem/build/data/labels/71_7.png
new file mode 100644
index 0000000..68148a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/71_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_0.png b/QiaoJiaSystem/build/data/labels/72_0.png
new file mode 100644
index 0000000..a2edd04
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_1.png b/QiaoJiaSystem/build/data/labels/72_1.png
new file mode 100644
index 0000000..f1e8bcd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_2.png b/QiaoJiaSystem/build/data/labels/72_2.png
new file mode 100644
index 0000000..a9516f1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_3.png b/QiaoJiaSystem/build/data/labels/72_3.png
new file mode 100644
index 0000000..5b94490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_4.png b/QiaoJiaSystem/build/data/labels/72_4.png
new file mode 100644
index 0000000..83f7dbf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_5.png b/QiaoJiaSystem/build/data/labels/72_5.png
new file mode 100644
index 0000000..5a40ad3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_6.png b/QiaoJiaSystem/build/data/labels/72_6.png
new file mode 100644
index 0000000..b889837
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/72_7.png b/QiaoJiaSystem/build/data/labels/72_7.png
new file mode 100644
index 0000000..4ec34df
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/72_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_0.png b/QiaoJiaSystem/build/data/labels/73_0.png
new file mode 100644
index 0000000..e554432
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_1.png b/QiaoJiaSystem/build/data/labels/73_1.png
new file mode 100644
index 0000000..08d1924
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_2.png b/QiaoJiaSystem/build/data/labels/73_2.png
new file mode 100644
index 0000000..3c87085
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_3.png b/QiaoJiaSystem/build/data/labels/73_3.png
new file mode 100644
index 0000000..11d0f76
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_4.png b/QiaoJiaSystem/build/data/labels/73_4.png
new file mode 100644
index 0000000..ebacf1f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_5.png b/QiaoJiaSystem/build/data/labels/73_5.png
new file mode 100644
index 0000000..d58377d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_6.png b/QiaoJiaSystem/build/data/labels/73_6.png
new file mode 100644
index 0000000..293b96b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/73_7.png b/QiaoJiaSystem/build/data/labels/73_7.png
new file mode 100644
index 0000000..80f409d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/73_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_0.png b/QiaoJiaSystem/build/data/labels/74_0.png
new file mode 100644
index 0000000..cc1d9f3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_1.png b/QiaoJiaSystem/build/data/labels/74_1.png
new file mode 100644
index 0000000..9171332
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_2.png b/QiaoJiaSystem/build/data/labels/74_2.png
new file mode 100644
index 0000000..c08cea8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_3.png b/QiaoJiaSystem/build/data/labels/74_3.png
new file mode 100644
index 0000000..ce8e8c8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_4.png b/QiaoJiaSystem/build/data/labels/74_4.png
new file mode 100644
index 0000000..b112fa6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_5.png b/QiaoJiaSystem/build/data/labels/74_5.png
new file mode 100644
index 0000000..c9a7bbb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_6.png b/QiaoJiaSystem/build/data/labels/74_6.png
new file mode 100644
index 0000000..8f72aac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/74_7.png b/QiaoJiaSystem/build/data/labels/74_7.png
new file mode 100644
index 0000000..f85a9f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/74_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_0.png b/QiaoJiaSystem/build/data/labels/75_0.png
new file mode 100644
index 0000000..b1f3ac4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_1.png b/QiaoJiaSystem/build/data/labels/75_1.png
new file mode 100644
index 0000000..9f06109
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_2.png b/QiaoJiaSystem/build/data/labels/75_2.png
new file mode 100644
index 0000000..9224666
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_3.png b/QiaoJiaSystem/build/data/labels/75_3.png
new file mode 100644
index 0000000..eb76489
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_4.png b/QiaoJiaSystem/build/data/labels/75_4.png
new file mode 100644
index 0000000..7dfee15
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_5.png b/QiaoJiaSystem/build/data/labels/75_5.png
new file mode 100644
index 0000000..8b081f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_6.png b/QiaoJiaSystem/build/data/labels/75_6.png
new file mode 100644
index 0000000..95631cf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/75_7.png b/QiaoJiaSystem/build/data/labels/75_7.png
new file mode 100644
index 0000000..db915ea
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/75_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_0.png b/QiaoJiaSystem/build/data/labels/76_0.png
new file mode 100644
index 0000000..5ceef1d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_1.png b/QiaoJiaSystem/build/data/labels/76_1.png
new file mode 100644
index 0000000..5386831
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_2.png b/QiaoJiaSystem/build/data/labels/76_2.png
new file mode 100644
index 0000000..6c8393a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_3.png b/QiaoJiaSystem/build/data/labels/76_3.png
new file mode 100644
index 0000000..fbe5712
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_4.png b/QiaoJiaSystem/build/data/labels/76_4.png
new file mode 100644
index 0000000..e47a6eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_5.png b/QiaoJiaSystem/build/data/labels/76_5.png
new file mode 100644
index 0000000..f349490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_6.png b/QiaoJiaSystem/build/data/labels/76_6.png
new file mode 100644
index 0000000..e661143
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/76_7.png b/QiaoJiaSystem/build/data/labels/76_7.png
new file mode 100644
index 0000000..64d0834
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/76_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_0.png b/QiaoJiaSystem/build/data/labels/77_0.png
new file mode 100644
index 0000000..05aab7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_1.png b/QiaoJiaSystem/build/data/labels/77_1.png
new file mode 100644
index 0000000..64cb608
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_2.png b/QiaoJiaSystem/build/data/labels/77_2.png
new file mode 100644
index 0000000..2da938c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_3.png b/QiaoJiaSystem/build/data/labels/77_3.png
new file mode 100644
index 0000000..14179d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_4.png b/QiaoJiaSystem/build/data/labels/77_4.png
new file mode 100644
index 0000000..894b470
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_5.png b/QiaoJiaSystem/build/data/labels/77_5.png
new file mode 100644
index 0000000..a55e5b6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_6.png b/QiaoJiaSystem/build/data/labels/77_6.png
new file mode 100644
index 0000000..4f0e714
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/77_7.png b/QiaoJiaSystem/build/data/labels/77_7.png
new file mode 100644
index 0000000..804e8c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/77_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_0.png b/QiaoJiaSystem/build/data/labels/78_0.png
new file mode 100644
index 0000000..e1fede7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_1.png b/QiaoJiaSystem/build/data/labels/78_1.png
new file mode 100644
index 0000000..23b2a74
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_2.png b/QiaoJiaSystem/build/data/labels/78_2.png
new file mode 100644
index 0000000..5471820
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_3.png b/QiaoJiaSystem/build/data/labels/78_3.png
new file mode 100644
index 0000000..bc9659a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_4.png b/QiaoJiaSystem/build/data/labels/78_4.png
new file mode 100644
index 0000000..54b95f9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_5.png b/QiaoJiaSystem/build/data/labels/78_5.png
new file mode 100644
index 0000000..2c67a51
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_6.png b/QiaoJiaSystem/build/data/labels/78_6.png
new file mode 100644
index 0000000..44326f5
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/78_7.png b/QiaoJiaSystem/build/data/labels/78_7.png
new file mode 100644
index 0000000..4d5d8dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/78_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_0.png b/QiaoJiaSystem/build/data/labels/79_0.png
new file mode 100644
index 0000000..f3f4c1e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_1.png b/QiaoJiaSystem/build/data/labels/79_1.png
new file mode 100644
index 0000000..23d960e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_2.png b/QiaoJiaSystem/build/data/labels/79_2.png
new file mode 100644
index 0000000..ce5c52b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_3.png b/QiaoJiaSystem/build/data/labels/79_3.png
new file mode 100644
index 0000000..b80a4f2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_4.png b/QiaoJiaSystem/build/data/labels/79_4.png
new file mode 100644
index 0000000..7fa16f8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_5.png b/QiaoJiaSystem/build/data/labels/79_5.png
new file mode 100644
index 0000000..c67c5bb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_6.png b/QiaoJiaSystem/build/data/labels/79_6.png
new file mode 100644
index 0000000..e89ecd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/79_7.png b/QiaoJiaSystem/build/data/labels/79_7.png
new file mode 100644
index 0000000..d964ae4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/79_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_0.png b/QiaoJiaSystem/build/data/labels/80_0.png
new file mode 100644
index 0000000..61403c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_1.png b/QiaoJiaSystem/build/data/labels/80_1.png
new file mode 100644
index 0000000..992338d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_2.png b/QiaoJiaSystem/build/data/labels/80_2.png
new file mode 100644
index 0000000..cfbd431
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_3.png b/QiaoJiaSystem/build/data/labels/80_3.png
new file mode 100644
index 0000000..5de9472
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_4.png b/QiaoJiaSystem/build/data/labels/80_4.png
new file mode 100644
index 0000000..0fecaf1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_5.png b/QiaoJiaSystem/build/data/labels/80_5.png
new file mode 100644
index 0000000..cbf65bd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_6.png b/QiaoJiaSystem/build/data/labels/80_6.png
new file mode 100644
index 0000000..ff54a38
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/80_7.png b/QiaoJiaSystem/build/data/labels/80_7.png
new file mode 100644
index 0000000..3d6f415
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/80_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_0.png b/QiaoJiaSystem/build/data/labels/81_0.png
new file mode 100644
index 0000000..5a2025f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_1.png b/QiaoJiaSystem/build/data/labels/81_1.png
new file mode 100644
index 0000000..511aec0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_2.png b/QiaoJiaSystem/build/data/labels/81_2.png
new file mode 100644
index 0000000..8e2f7e9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_3.png b/QiaoJiaSystem/build/data/labels/81_3.png
new file mode 100644
index 0000000..52edfd4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_4.png b/QiaoJiaSystem/build/data/labels/81_4.png
new file mode 100644
index 0000000..e60c7a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_5.png b/QiaoJiaSystem/build/data/labels/81_5.png
new file mode 100644
index 0000000..d58df4f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_6.png b/QiaoJiaSystem/build/data/labels/81_6.png
new file mode 100644
index 0000000..d31ba09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/81_7.png b/QiaoJiaSystem/build/data/labels/81_7.png
new file mode 100644
index 0000000..0770576
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/81_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_0.png b/QiaoJiaSystem/build/data/labels/82_0.png
new file mode 100644
index 0000000..1bc3a98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_1.png b/QiaoJiaSystem/build/data/labels/82_1.png
new file mode 100644
index 0000000..e5931dc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_2.png b/QiaoJiaSystem/build/data/labels/82_2.png
new file mode 100644
index 0000000..a5f8bb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_3.png b/QiaoJiaSystem/build/data/labels/82_3.png
new file mode 100644
index 0000000..8b138a9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_4.png b/QiaoJiaSystem/build/data/labels/82_4.png
new file mode 100644
index 0000000..8a57060
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_5.png b/QiaoJiaSystem/build/data/labels/82_5.png
new file mode 100644
index 0000000..f4dc04e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_6.png b/QiaoJiaSystem/build/data/labels/82_6.png
new file mode 100644
index 0000000..2c7073a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/82_7.png b/QiaoJiaSystem/build/data/labels/82_7.png
new file mode 100644
index 0000000..f4d966d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/82_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_0.png b/QiaoJiaSystem/build/data/labels/83_0.png
new file mode 100644
index 0000000..c048782
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_1.png b/QiaoJiaSystem/build/data/labels/83_1.png
new file mode 100644
index 0000000..3515f98
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_2.png b/QiaoJiaSystem/build/data/labels/83_2.png
new file mode 100644
index 0000000..4a13b8d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_3.png b/QiaoJiaSystem/build/data/labels/83_3.png
new file mode 100644
index 0000000..0944ac8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_4.png b/QiaoJiaSystem/build/data/labels/83_4.png
new file mode 100644
index 0000000..8b9f82f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_5.png b/QiaoJiaSystem/build/data/labels/83_5.png
new file mode 100644
index 0000000..67f70ad
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_6.png b/QiaoJiaSystem/build/data/labels/83_6.png
new file mode 100644
index 0000000..0d3c0e1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/83_7.png b/QiaoJiaSystem/build/data/labels/83_7.png
new file mode 100644
index 0000000..0daab32
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/83_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_0.png b/QiaoJiaSystem/build/data/labels/84_0.png
new file mode 100644
index 0000000..ffc3eb4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_1.png b/QiaoJiaSystem/build/data/labels/84_1.png
new file mode 100644
index 0000000..956e5eb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_2.png b/QiaoJiaSystem/build/data/labels/84_2.png
new file mode 100644
index 0000000..a1e94fa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_3.png b/QiaoJiaSystem/build/data/labels/84_3.png
new file mode 100644
index 0000000..2369b0c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_4.png b/QiaoJiaSystem/build/data/labels/84_4.png
new file mode 100644
index 0000000..6d82ee8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_5.png b/QiaoJiaSystem/build/data/labels/84_5.png
new file mode 100644
index 0000000..6e95b70
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_6.png b/QiaoJiaSystem/build/data/labels/84_6.png
new file mode 100644
index 0000000..9d62561
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/84_7.png b/QiaoJiaSystem/build/data/labels/84_7.png
new file mode 100644
index 0000000..accde30
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/84_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_0.png b/QiaoJiaSystem/build/data/labels/85_0.png
new file mode 100644
index 0000000..48e9906
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_1.png b/QiaoJiaSystem/build/data/labels/85_1.png
new file mode 100644
index 0000000..3080720
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_2.png b/QiaoJiaSystem/build/data/labels/85_2.png
new file mode 100644
index 0000000..e5a9369
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_3.png b/QiaoJiaSystem/build/data/labels/85_3.png
new file mode 100644
index 0000000..5816c66
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_4.png b/QiaoJiaSystem/build/data/labels/85_4.png
new file mode 100644
index 0000000..7d18ec0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_5.png b/QiaoJiaSystem/build/data/labels/85_5.png
new file mode 100644
index 0000000..f7b5550
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_6.png b/QiaoJiaSystem/build/data/labels/85_6.png
new file mode 100644
index 0000000..7106103
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/85_7.png b/QiaoJiaSystem/build/data/labels/85_7.png
new file mode 100644
index 0000000..7179daf
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/85_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_0.png b/QiaoJiaSystem/build/data/labels/86_0.png
new file mode 100644
index 0000000..2412ea1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_1.png b/QiaoJiaSystem/build/data/labels/86_1.png
new file mode 100644
index 0000000..7de1777
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_2.png b/QiaoJiaSystem/build/data/labels/86_2.png
new file mode 100644
index 0000000..aae67da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_3.png b/QiaoJiaSystem/build/data/labels/86_3.png
new file mode 100644
index 0000000..e932d2e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_4.png b/QiaoJiaSystem/build/data/labels/86_4.png
new file mode 100644
index 0000000..9a580c8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_5.png b/QiaoJiaSystem/build/data/labels/86_5.png
new file mode 100644
index 0000000..6766a5d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_6.png b/QiaoJiaSystem/build/data/labels/86_6.png
new file mode 100644
index 0000000..462e729
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/86_7.png b/QiaoJiaSystem/build/data/labels/86_7.png
new file mode 100644
index 0000000..7843c12
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/86_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_0.png b/QiaoJiaSystem/build/data/labels/87_0.png
new file mode 100644
index 0000000..e7c1285
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_1.png b/QiaoJiaSystem/build/data/labels/87_1.png
new file mode 100644
index 0000000..e0af6e0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_2.png b/QiaoJiaSystem/build/data/labels/87_2.png
new file mode 100644
index 0000000..4bdce94
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_3.png b/QiaoJiaSystem/build/data/labels/87_3.png
new file mode 100644
index 0000000..2d446b9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_4.png b/QiaoJiaSystem/build/data/labels/87_4.png
new file mode 100644
index 0000000..2719131
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_5.png b/QiaoJiaSystem/build/data/labels/87_5.png
new file mode 100644
index 0000000..f635def
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_6.png b/QiaoJiaSystem/build/data/labels/87_6.png
new file mode 100644
index 0000000..25ddeb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/87_7.png b/QiaoJiaSystem/build/data/labels/87_7.png
new file mode 100644
index 0000000..b26e702
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/87_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_0.png b/QiaoJiaSystem/build/data/labels/88_0.png
new file mode 100644
index 0000000..43b1427
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_1.png b/QiaoJiaSystem/build/data/labels/88_1.png
new file mode 100644
index 0000000..5703b63
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_2.png b/QiaoJiaSystem/build/data/labels/88_2.png
new file mode 100644
index 0000000..b3b565a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_3.png b/QiaoJiaSystem/build/data/labels/88_3.png
new file mode 100644
index 0000000..4afd6dd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_4.png b/QiaoJiaSystem/build/data/labels/88_4.png
new file mode 100644
index 0000000..198f7b0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_5.png b/QiaoJiaSystem/build/data/labels/88_5.png
new file mode 100644
index 0000000..e46b641
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_6.png b/QiaoJiaSystem/build/data/labels/88_6.png
new file mode 100644
index 0000000..81830a0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/88_7.png b/QiaoJiaSystem/build/data/labels/88_7.png
new file mode 100644
index 0000000..a916e4e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/88_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_0.png b/QiaoJiaSystem/build/data/labels/89_0.png
new file mode 100644
index 0000000..b6f9c4b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_1.png b/QiaoJiaSystem/build/data/labels/89_1.png
new file mode 100644
index 0000000..e5e7a1e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_2.png b/QiaoJiaSystem/build/data/labels/89_2.png
new file mode 100644
index 0000000..9f9d361
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_3.png b/QiaoJiaSystem/build/data/labels/89_3.png
new file mode 100644
index 0000000..4404891
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_4.png b/QiaoJiaSystem/build/data/labels/89_4.png
new file mode 100644
index 0000000..802bfe4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_5.png b/QiaoJiaSystem/build/data/labels/89_5.png
new file mode 100644
index 0000000..d77e019
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_6.png b/QiaoJiaSystem/build/data/labels/89_6.png
new file mode 100644
index 0000000..4a4fa6b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/89_7.png b/QiaoJiaSystem/build/data/labels/89_7.png
new file mode 100644
index 0000000..b3dd798
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/89_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_0.png b/QiaoJiaSystem/build/data/labels/90_0.png
new file mode 100644
index 0000000..3e10db1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_1.png b/QiaoJiaSystem/build/data/labels/90_1.png
new file mode 100644
index 0000000..9c4e67e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_2.png b/QiaoJiaSystem/build/data/labels/90_2.png
new file mode 100644
index 0000000..92d0167
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_3.png b/QiaoJiaSystem/build/data/labels/90_3.png
new file mode 100644
index 0000000..9d346a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_4.png b/QiaoJiaSystem/build/data/labels/90_4.png
new file mode 100644
index 0000000..ba6012b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_5.png b/QiaoJiaSystem/build/data/labels/90_5.png
new file mode 100644
index 0000000..b664cd2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_6.png b/QiaoJiaSystem/build/data/labels/90_6.png
new file mode 100644
index 0000000..500c099
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/90_7.png b/QiaoJiaSystem/build/data/labels/90_7.png
new file mode 100644
index 0000000..3e899a8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/90_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_0.png b/QiaoJiaSystem/build/data/labels/91_0.png
new file mode 100644
index 0000000..0ad0d55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_1.png b/QiaoJiaSystem/build/data/labels/91_1.png
new file mode 100644
index 0000000..afbe0f0
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_2.png b/QiaoJiaSystem/build/data/labels/91_2.png
new file mode 100644
index 0000000..d2c8899
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_3.png b/QiaoJiaSystem/build/data/labels/91_3.png
new file mode 100644
index 0000000..002032d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_4.png b/QiaoJiaSystem/build/data/labels/91_4.png
new file mode 100644
index 0000000..795ce7d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_5.png b/QiaoJiaSystem/build/data/labels/91_5.png
new file mode 100644
index 0000000..1d1eb22
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_6.png b/QiaoJiaSystem/build/data/labels/91_6.png
new file mode 100644
index 0000000..bb31267
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/91_7.png b/QiaoJiaSystem/build/data/labels/91_7.png
new file mode 100644
index 0000000..70c2cf3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/91_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_0.png b/QiaoJiaSystem/build/data/labels/92_0.png
new file mode 100644
index 0000000..e730aed
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_1.png b/QiaoJiaSystem/build/data/labels/92_1.png
new file mode 100644
index 0000000..7f9b51d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_2.png b/QiaoJiaSystem/build/data/labels/92_2.png
new file mode 100644
index 0000000..f01916f
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_3.png b/QiaoJiaSystem/build/data/labels/92_3.png
new file mode 100644
index 0000000..b850533
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_4.png b/QiaoJiaSystem/build/data/labels/92_4.png
new file mode 100644
index 0000000..ece1682
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_5.png b/QiaoJiaSystem/build/data/labels/92_5.png
new file mode 100644
index 0000000..8216690
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_6.png b/QiaoJiaSystem/build/data/labels/92_6.png
new file mode 100644
index 0000000..9b581fa
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/92_7.png b/QiaoJiaSystem/build/data/labels/92_7.png
new file mode 100644
index 0000000..e57b2e8
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/92_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_0.png b/QiaoJiaSystem/build/data/labels/93_0.png
new file mode 100644
index 0000000..c21f522
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_1.png b/QiaoJiaSystem/build/data/labels/93_1.png
new file mode 100644
index 0000000..64cbba6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_2.png b/QiaoJiaSystem/build/data/labels/93_2.png
new file mode 100644
index 0000000..a81e1cd
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_3.png b/QiaoJiaSystem/build/data/labels/93_3.png
new file mode 100644
index 0000000..273f35c
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_4.png b/QiaoJiaSystem/build/data/labels/93_4.png
new file mode 100644
index 0000000..b44e4c6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_5.png b/QiaoJiaSystem/build/data/labels/93_5.png
new file mode 100644
index 0000000..1e96e9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_6.png b/QiaoJiaSystem/build/data/labels/93_6.png
new file mode 100644
index 0000000..3407e55
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/93_7.png b/QiaoJiaSystem/build/data/labels/93_7.png
new file mode 100644
index 0000000..428e072
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/93_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_0.png b/QiaoJiaSystem/build/data/labels/94_0.png
new file mode 100644
index 0000000..baa512b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_1.png b/QiaoJiaSystem/build/data/labels/94_1.png
new file mode 100644
index 0000000..5f1b116
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_2.png b/QiaoJiaSystem/build/data/labels/94_2.png
new file mode 100644
index 0000000..1cd051e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_3.png b/QiaoJiaSystem/build/data/labels/94_3.png
new file mode 100644
index 0000000..a0a7264
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_4.png b/QiaoJiaSystem/build/data/labels/94_4.png
new file mode 100644
index 0000000..26e82bc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_5.png b/QiaoJiaSystem/build/data/labels/94_5.png
new file mode 100644
index 0000000..19c32ec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_6.png b/QiaoJiaSystem/build/data/labels/94_6.png
new file mode 100644
index 0000000..e753cad
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/94_7.png b/QiaoJiaSystem/build/data/labels/94_7.png
new file mode 100644
index 0000000..7d4dfb7
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/94_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_0.png b/QiaoJiaSystem/build/data/labels/95_0.png
new file mode 100644
index 0000000..2b25519
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_1.png b/QiaoJiaSystem/build/data/labels/95_1.png
new file mode 100644
index 0000000..6fea8c2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_2.png b/QiaoJiaSystem/build/data/labels/95_2.png
new file mode 100644
index 0000000..d170be1
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_3.png b/QiaoJiaSystem/build/data/labels/95_3.png
new file mode 100644
index 0000000..fe5501e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_4.png b/QiaoJiaSystem/build/data/labels/95_4.png
new file mode 100644
index 0000000..ec87fee
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_5.png b/QiaoJiaSystem/build/data/labels/95_5.png
new file mode 100644
index 0000000..efa9f0b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_6.png b/QiaoJiaSystem/build/data/labels/95_6.png
new file mode 100644
index 0000000..6840b82
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/95_7.png b/QiaoJiaSystem/build/data/labels/95_7.png
new file mode 100644
index 0000000..85f887d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/95_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_0.png b/QiaoJiaSystem/build/data/labels/96_0.png
new file mode 100644
index 0000000..2033d9b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_1.png b/QiaoJiaSystem/build/data/labels/96_1.png
new file mode 100644
index 0000000..c60d36a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_2.png b/QiaoJiaSystem/build/data/labels/96_2.png
new file mode 100644
index 0000000..878dd1b
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_3.png b/QiaoJiaSystem/build/data/labels/96_3.png
new file mode 100644
index 0000000..f7429a2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_4.png b/QiaoJiaSystem/build/data/labels/96_4.png
new file mode 100644
index 0000000..6dff9da
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_5.png b/QiaoJiaSystem/build/data/labels/96_5.png
new file mode 100644
index 0000000..4869f9d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_6.png b/QiaoJiaSystem/build/data/labels/96_6.png
new file mode 100644
index 0000000..f6a8a69
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/96_7.png b/QiaoJiaSystem/build/data/labels/96_7.png
new file mode 100644
index 0000000..89b19d4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/96_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_0.png b/QiaoJiaSystem/build/data/labels/97_0.png
new file mode 100644
index 0000000..6426224
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_1.png b/QiaoJiaSystem/build/data/labels/97_1.png
new file mode 100644
index 0000000..f9a61f4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_2.png b/QiaoJiaSystem/build/data/labels/97_2.png
new file mode 100644
index 0000000..d1d02ac
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_3.png b/QiaoJiaSystem/build/data/labels/97_3.png
new file mode 100644
index 0000000..7e9e936
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_4.png b/QiaoJiaSystem/build/data/labels/97_4.png
new file mode 100644
index 0000000..21dd17e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_5.png b/QiaoJiaSystem/build/data/labels/97_5.png
new file mode 100644
index 0000000..5e59fa2
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_6.png b/QiaoJiaSystem/build/data/labels/97_6.png
new file mode 100644
index 0000000..6f279a4
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/97_7.png b/QiaoJiaSystem/build/data/labels/97_7.png
new file mode 100644
index 0000000..6447e6d
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/97_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_0.png b/QiaoJiaSystem/build/data/labels/98_0.png
new file mode 100644
index 0000000..3d25931
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_1.png b/QiaoJiaSystem/build/data/labels/98_1.png
new file mode 100644
index 0000000..c76706a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_2.png b/QiaoJiaSystem/build/data/labels/98_2.png
new file mode 100644
index 0000000..6dceadb
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_3.png b/QiaoJiaSystem/build/data/labels/98_3.png
new file mode 100644
index 0000000..d3cf1bc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_4.png b/QiaoJiaSystem/build/data/labels/98_4.png
new file mode 100644
index 0000000..5d5addc
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_5.png b/QiaoJiaSystem/build/data/labels/98_5.png
new file mode 100644
index 0000000..55479d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_6.png b/QiaoJiaSystem/build/data/labels/98_6.png
new file mode 100644
index 0000000..4d8f3d9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/98_7.png b/QiaoJiaSystem/build/data/labels/98_7.png
new file mode 100644
index 0000000..cec6017
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/98_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_0.png b/QiaoJiaSystem/build/data/labels/99_0.png
new file mode 100644
index 0000000..f5975c9
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_0.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_1.png b/QiaoJiaSystem/build/data/labels/99_1.png
new file mode 100644
index 0000000..3cdfdec
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_1.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_2.png b/QiaoJiaSystem/build/data/labels/99_2.png
new file mode 100644
index 0000000..a0dc573
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_2.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_3.png b/QiaoJiaSystem/build/data/labels/99_3.png
new file mode 100644
index 0000000..e183f6a
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_3.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_4.png b/QiaoJiaSystem/build/data/labels/99_4.png
new file mode 100644
index 0000000..bc1a490
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_4.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_5.png b/QiaoJiaSystem/build/data/labels/99_5.png
new file mode 100644
index 0000000..c568d5e
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_5.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_6.png b/QiaoJiaSystem/build/data/labels/99_6.png
new file mode 100644
index 0000000..e274446
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_6.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/99_7.png b/QiaoJiaSystem/build/data/labels/99_7.png
new file mode 100644
index 0000000..f7b9e09
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/99_7.png
Binary files differ
diff --git a/QiaoJiaSystem/build/data/labels/make_labels.py b/QiaoJiaSystem/build/data/labels/make_labels.py
new file mode 100644
index 0000000..c8146f6
--- /dev/null
+++ b/QiaoJiaSystem/build/data/labels/make_labels.py
@@ -0,0 +1,23 @@
+import os
+import string
+import pipes
+
+font = 'futura-normal'
+
+def make_labels(s):
+    l = string.printable
+    for word in l:
+        if word == ' ':
+            os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\ " 32_%d.png'%(font,s,s/12-1))
+        if word == '@':
+            os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\@" 64_%d.png'%(font,s,s/12-1))
+        elif word == '\\':
+            os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\\\\\\\\" 92_%d.png'%(font,s,s/12-1))
+        elif ord(word) in [9,10,11,12,13,14]:
+            pass
+        else:
+            os.system("convert -fill black -background white -bordercolor white -font %s -pointsize %d label:%s \"%d_%d.png\""%(font,s,pipes.quote(word), ord(word),s/12-1))
+
+for i in [12,24,36,48,60,72,84,96]:
+    make_labels(i)
+
diff --git a/QiaoJiaSystem/build/data/voc.names b/QiaoJiaSystem/build/data/voc.names
new file mode 100644
index 0000000..8420ab3
--- /dev/null
+++ b/QiaoJiaSystem/build/data/voc.names
@@ -0,0 +1,20 @@
+aeroplane
+bicycle
+bird
+boat
+bottle
+bus
+car
+cat
+chair
+cow
+diningtable
+dog
+horse
+motorbike
+person
+pottedplant
+sheep
+sofa
+train
+tvmonitor
diff --git a/QiaoJiaSystem/build/erl_crash.dump b/QiaoJiaSystem/build/erl_crash.dump
new file mode 100644
index 0000000..f896370
--- /dev/null
+++ b/QiaoJiaSystem/build/erl_crash.dump
@@ -0,0 +1,10393 @@
+=erl_crash_dump:0.3
+Mon Nov 26 19:32:45 2018
+Slogan: Kernel pid terminated (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{k
+System version: Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]
+Compiled: Thu Dec  7 17:08:04 2017
+Taints: 
+Atoms: 4844
+Calling Thread: scheduler:2
+=scheduler:1
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work: 
+Current Port: 
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process: 
+=scheduler:2
+Scheduler Sleep Info Flags: 
+Scheduler Sleep Info Aux Work: THR_PRGR_LATER_OP
+Current Port: 
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | UNKNOWN(134217728)
+Current Process: <0.0.0>
+Current Process State: Running
+Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT
+Current Process Program counter: 0x00007fbf48bd9f10 (init:sleep/1 + 64)
+Current Process CP: 0x0000000000000000 (invalid)
+Current Process Limited Stack Trace:
+0x00007fbf42d77148:SReturn addr 0x48BD6438 (init:boot_loop/2 + 3688)
+0x00007fbf42d77150:SReturn addr 0x894628 (<terminate process normally>)
+=scheduler:3
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work: 
+Current Port: 
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process: 
+=scheduler:4
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work: 
+Current Port: 
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process: 
+=memory
+total: 106591120
+processes: 3394512
+processes_used: 3381992
+system: 103196608
+atom: 132249
+atom_used: 115700
+binary: 231264
+code: 2857091
+ets: 70392
+=hash_table:atom_tab
+size: 3203
+used: 2475
+objs: 4844
+depth: 7
+=index_table:atom_tab
+size: 5120
+limit: 1048576
+entries: 4844
+=hash_table:module_code
+size: 47
+used: 33
+objs: 53
+depth: 3
+=index_table:module_code
+size: 1024
+limit: 65536
+entries: 53
+=hash_table:export_list
+size: 3203
+used: 1461
+objs: 1984
+depth: 5
+=index_table:export_list
+size: 2048
+limit: 524288
+entries: 1984
+=hash_table:export_list
+size: 3203
+used: 1424
+objs: 1918
+depth: 5
+=hash_table:process_reg
+size: 11
+used: 3
+objs: 4
+depth: 2
+=hash_table:fun_table
+size: 397
+used: 223
+objs: 315
+depth: 3
+=hash_table:node_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 11
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+sys_misc: 83952322
+static: 2098336
+atom_space: 65552 49003
+atom_table: 66697
+module_table: 39552
+export_table: 126372
+export_list: 349184
+register_table: 180
+fun_table: 3266
+module_refs: 2496
+loaded_code: 2336221
+dist_table: 539
+node_table: 227
+bits_bufs_size: 0
+bif_timer: 0
+link_lh: 0
+process_table: 3145728
+port_table: 12582912
+ets_misc: 49192
+=allocator:sys_alloc
+option e: true
+option m: libc
+option tt: 131072
+option tp: 0
+=allocator:temp_alloc[0]
+versions: 2.1 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option mbsd: 3
+option as: gf
+mbcs blocks: 0 5 5
+mbcs blocks size: 0 10136 10136
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 8825
+temp_free calls: 8825
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 5 5
+mbcs blocks size: 0 65544 65544
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 44066
+temp_free calls: 44066
+temp_realloc calls: 6
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option as: af
+mbcs blocks: 0 1 1
+mbcs blocks size: 0 40 40
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131192 131192 131192
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131192
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 1 183 183
+mbcs blocks size: 520 46560 46560
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 663
+sl_free calls: 662
+sl_realloc calls: 1
+mseg_alloc calls: 3
+mseg_dealloc calls: 3
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 261 261
+mbcs blocks size: 0 61752 61752
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 3244
+sl_free calls: 3244
+sl_realloc calls: 0
+mseg_alloc calls: 11
+mseg_dealloc calls: 11
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 17 22 22
+mbcs blocks size: 132864 140760 140760
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 295088 295088 295088
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 39
+std_free calls: 22
+std_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 10 33 33
+mbcs blocks size: 6192 14048 14048
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 117
+std_free calls: 107
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 0
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 3092 3093 3093
+mbcs blocks size: 103433088 103452384 103452384
+mbcs carriers: 5 5 5
+mbcs mseg carriers: 4
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 155713704 155713704 155713704
+mbcs mseg carriers size: 155189248
+mbcs sys_alloc carriers size: 524456
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 3093
+ll_free calls: 1
+ll_realloc calls: 24
+mseg_alloc calls: 4
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 4641 4641 4641
+mbcs blocks size: 2513016 2527320 2527320
+mbcs carriers: 4 4 4
+mbcs mseg carriers: 3
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 3932328 3932328 3932328
+mbcs mseg carriers size: 3407872
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 4641
+ll_free calls: 0
+ll_realloc calls: 97
+mseg_alloc calls: 3
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524278
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524456 524456 524456
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524456
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 8 29 29
+mbcs blocks size: 66208 69784 69784
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 29
+eheap_free calls: 21
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 8 35 35
+mbcs blocks size: 166296 509808 509808
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1179824 1441968 1441968
+mbcs mseg carriers size: 1048576
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 436
+eheap_free calls: 428
+eheap_realloc calls: 30
+mseg_alloc calls: 2
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131248 131248 131248
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131248
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 6 6 6
+mbcs blocks size: 21200 21200 21200
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 6
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 383 383
+mbcs blocks size: 0 145424 145424
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 383
+ets_free calls: 383
+ets_realloc calls: 4
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+fix type: driver_select_data_state 0 0
+fix type: driver_event_data_state 0 0
+fix type: nlink_sh 0 0
+fix type: monitor_sh 0 0
+fix type: sl_thr_q_element 0 0
+fix type: bif_timer 0 0
+fix type: hl_ptimer 0 0
+fix type: ll_ptimer 0 0
+fix type: msg_ref 0 0
+fix type: proc 704 704
+mbcs blocks: 1 1 1
+mbcs blocks size: 712 712 712
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 1
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 69 69 69
+mbcs blocks size: 16888 16888 16888
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 821
+fix_free calls: 811
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 6 10 10
+mbcs blocks size: 229664 282640 282640
+mbcs carriers: 2 3 3
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 295088 1343664 1343664
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 56
+binary_free calls: 50
+binary_realloc calls: 0
+mseg_alloc calls: 3
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 2 22 22
+mbcs blocks size: 1600 9504 9504
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 448
+binary_free calls: 446
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option as: aoffcbf
+mbcs blocks: 9 12 12
+mbcs blocks size: 1552 124504 124504
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 295088 295088
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 14
+driver_free calls: 5
+driver_realloc calls: 0
+mseg_alloc calls: 2
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 6 11 11
+mbcs blocks size: 1320 11968 11968
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 1677
+driver_free calls: 1671
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 5
+option ramv: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option as: aoffcbf
+mbcs blocks: 0 0 0
+mbcs blocks size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32944 32944 32944
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32944
+mbcs_pool blocks: 0
+mbcs_pool blocks size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks: 0 0 0
+sbcs blocks size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:test_alloc
+option e: false
+=allocator:mseg_alloc[0]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 2
+cache_hits: 5
+segments: 6 8 8
+segments_size: 155713536 157024256 157024256
+segments_watermark: 8
+mseg_alloc calls: 13
+mseg_dealloc calls: 7
+mseg_realloc calls: 0
+mseg_create calls: 8
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[1]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[2]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 3
+cache_hits: 10
+segments: 4 7 7
+segments_size: 4456448 5242880 5242880
+segments_watermark: 7
+mseg_alloc calls: 17
+mseg_dealloc calls: 13
+mseg_realloc calls: 0
+mseg_create calls: 7
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[3]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[4]
+version: 0.9
+option scs: 0
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_size: 0 0 0
+segments_watermark: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc.erts_mmap
+os mmap size used: 162267136
+=allocator:alloc_util
+option mmc: 18446744073709551615
+option ycs: 1048576
+option sac: true
+=allocator:instr
+option m: false
+option s: false
+option t: false
+=proc:<0.0.0>
+State: Running
+Name: init
+Spawned as: otp_ring0:start/2
+Spawned by: []
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 1
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.6.0>, <0.3.0>]
+Reductions: 4522
+Stack+heap: 4185
+OldHeap: 610
+Heap unused: 2391
+OldHeap unused: 463
+Memory: 39176
+Program counter: 0x00007fbf48bd9f10 (init:sleep/1 + 64)
+CP: 0x0000000000000000 (invalid)
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | TRAP_EXIT
+=proc:<0.1.0>
+State: Waiting
+Name: init__boot__on_load_handler
+Spawned as: erlang:apply/2
+Spawned by: <0.0.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 5
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 220
+OldHeap unused: 0
+Memory: 2568
+Program counter: 0x00007fbf48be1b28 (init:on_load_loop/2 + 56)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.3.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.2.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>, #Port<0.0>]
+Reductions: 98713
+Stack+heap: 6772
+OldHeap: 6772
+Heap unused: 1481
+OldHeap unused: 6623
+Memory: 109136
+Program counter: 0x00007fbf48c2bc18 (erl_prim_loader:loop/3 + 160)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=proc:<0.6.0>
+State: Waiting
+Name: error_logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.2.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>]
+Reductions: 317
+Stack+heap: 1598
+OldHeap: 376
+Heap unused: 548
+OldHeap unused: 364
+Memory: 16640
+Program counter: 0x00007fbf514a06e8 (gen_event:fetch_msg/5 + 88)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=proc:<0.15.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.14.0>
+Started: Mon Nov 26 19:32:44 2018
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 25
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 153
+OldHeap unused: 0
+Memory: 2568
+Program counter: 0x00007fbf42ff3638 (global:loop_the_locker/1 + 752)
+CP: 0x0000000000000000 (invalid)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | TRAP_EXIT
+=port:#Port<0.0>
+Slot: 0
+Connected: <0.3.0>
+Links: <0.3.0>
+Port controls linked-in driver: efile
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 2336221
+Old code: 0
+=mod:otp_ring0
+Current size: 1176
+=mod:init
+Current size: 67344
+=mod:prim_eval
+Current size: 640
+=mod:prim_inet
+Current size: 111453
+=mod:prim_file
+Current size: 63499
+=mod:zlib
+Current size: 14936
+=mod:prim_zip
+Current size: 28312
+=mod:erl_prim_loader
+Current size: 81200
+=mod:erlang
+Current size: 89929
+=mod:erts_internal
+Current size: 4344
+=mod:error_handler
+Current size: 4715
+Current attributes: 836C00000001680264000376736E6C000000016E1000818140EB0BAE1F3E7B017B161DB5F21A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
+=mod:heart
+Current size: 17837
+Current attributes: 836C00000002680264000376736E6C000000016E10006D0D71EFA7B0A279C8F601EADE9CC1F16A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000E73656E645F68656172745F636D6461026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003E2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
+=mod:error_logger
+Current size: 12982
+Current attributes: 836C00000001680264000376736E6C000000016E10004C7FCFFE18EC4CA6888C36F511970B576A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00452F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
+=mod:gen_event
+Current size: 53819
+Current attributes: 836C00000009680264000376736E6C000000016E1000B4D7193F7E5EF25F18741722BE9045C86A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00014864000366756E6C000000026804640004747970656B00014864000770726F647563746C000000016803640008616E6E5F747970656B0001486C0000000268036400037661726B000148640008496E6974417267736804640004747970656B0001486400047465726D6A6A6A6804640004747970656B000149640005756E696F6E6C000000036804640004747970656B0001496400057475706C656C00000002680364000461746F6D6B0001496400026F6B6803640008616E6E5F747970656B0001496C0000000268036400037661726B00014964000553746174656804640004747970656B0001496400047465726D6A6A6A6804640004747970656B00014A6400057475706C656C00000003680364000461746F6D6B00014A6400026F6B6803640008616E6E5F747970656B00014A6C0000000268036400037661726B00014A64000553746174656804640004747970656B00014A6400047465726D6A6A680364000461746F6D6B00014A64000968696265726E6174656A6804640004747970656B00014B6400057475706C656C00000002680364000461746F6D6B00014B6400056572726F726803640008616E6E5F747970656B00014B6C0000000268036400037661726B00014B640006526561736F6E6804640004747970656B00014B6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000C68616E646C655F6576656E7461026C000000016804640004747970656B00014C64000366756E6C000000026804640004747970656B00014C64000770726F647563746C000000026803640008616E6E5F747970656B00014C6C0000000268036400037661726B00014C6400054576656E746804640004747970656B00014C6400047465726D6A6A6803640008616E6E5F747970656B00014C6C0000000268036400037661726B00014C64000553746174656804640004747970656B00014C6400047465726D6A6A6A6804640004747970656B00014D640005756E696F6E6C000000046804640004747970656B00014D6400057475706C656C00000002680364000461746F6D6B00014D6400026F6B6803640008616E6E5F747970656B00014D6C0000000268036400037661726B00014D6400084E657753746174656804640004747970656B00014D6400047465726D6A6A6A6804640004747970656B00014E6400057475706C656C00000003680364000461746F6D6B00014E6400026F6B6803640008616E6E5F747970656B00014E6C0000000268036400037661726B00014E6400084E657753746174656804640004747970656B00014E6400047465726D6A6A680364000461746F6D6B00014E64000968696265726E6174656A6804640004747970656B00014F6400057475706C656C00000005680364000461746F6D6B00014F64000C737761705F68616E646C65726803640008616E6E5F747970656B00014F6C0000000268036400037661726B00014F64000541726773316804640004747970656B00014F6400047465726D6A6A6803640008616E6E5F747970656B00014F6C0000000268036400037661726B00014F6400084E657753746174656804640004747970656B00014F6400047465726D6A6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000848616E646C6572326804640004747970656B000150640005756E696F6E6C000000026804640004747970656B00015064000461746F6D6A6804640004747970656B0001506400057475706C656C000000026804640004747970656B00015064000461746F6D6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000249646804640004747970656B0001506400047465726D6A6A6A6A6A6803640008616E6E5F747970656B0001506C0000000268036400037661726B00015064000541726773326804640004747970656B0001506400047465726D6A6A6A680364000461746F6D6B00015164000E72656D6F76655F68616E646C65726A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F63616C6C61026C000000016804640004747970656B00015264000366756E6C000000026804640004747970656B00015264000770726F647563746C000000026803640008616E6E5F747970656B0001526C0000000268036400037661726B000152640007526571756573746804640004747970656B0001526400047465726D6A6A6803640008616E6E5F747970656B0001526C0000000268036400037661726B00015264000553746174656804640004747970656B0001526400047465726D6A6A6A6804640004747970656B000153640005756E696F6E6C000000046804640004747970656B0001536400057475706C656C00000003680364000461746F6D6B0001536400026F6B6803640008616E6E5F747970656B0001536C0000000268036400037661726B0001536400055265706C796804640004747970656B0001536400047465726D6A6A6803640008616E6E5F747970656B0001536C0000000268036400037661726B0001536400084E657753746174656804640004747970656B0001536400047465726D6A6A6A6804640004747970656B0001546400057475706C656C00000004680364000461746F6D6B0001546400026F6B6803640008616E6E5F747970656B0001546C0000000268036400037661726B0001546400055265706C796804640004747970656B0001546400047465726D6A6A6803640008616E6E5F747970656B0001546C0000000268036400037661726B0001546400084E657753746174656804640004747970656B0001546400047465726D6A6A680364000461746F6D6B00015464000968696265726E6174656A6804640004747970656B0001556400057475706C656C00000006680364000461746F6D6B00015564000C737761705F68616E646C65726803640008616E6E5F747970656B0001556C0000000268036400037661726B0001556400055265706C796804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001556C0000000268036400037661726B00015564000541726773316804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001556C0000000268036400037661726B0001556400084E657753746174656804640004747970656B0001556400047465726D6A6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000848616E646C6572326804640004747970656B000156640005756E696F6E6C000000026804640004747970656B00015664000461746F6D6A6804640004747970656B0001566400057475706C656C000000026804640004747970656B00015664000461746F6D6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000249646804640004747970656B0001566400047465726D6A6A6A6A6A6803640008616E6E5F747970656B0001566C0000000268036400037661726B00015664000541726773326804640004747970656B0001566400047465726D6A6A6A6804640004747970656B0001576400057475706C656C00000002680364000461746F6D6B00015764000E72656D6F76655F68616E646C65726803640008616E6E5F747970656B0001576C0000000268036400037661726B0001576400055265706C796804640004747970656B0001576400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F696E666F61026C000000016804640004747970656B00015864000366756E6C000000026804640004747970656B00015864000770726F647563746C000000026803640008616E6E5F747970656B0001586C0000000268036400037661726B000158640004496E666F6804640004747970656B0001586400047465726D6A6A6803640008616E6E5F747970656B0001586C0000000268036400037661726B00015864000553746174656804640004747970656B0001586400047465726D6A6A6A6804640004747970656B000159640005756E696F6E6C000000046804640004747970656B0001596400057475706C656C00000002680364000461746F6D6B0001596400026F6B6803640008616E6E5F747970656B0001596C0000000268036400037661726B0001596400084E657753746174656804640004747970656B0001596400047465726D6A6A6A6804640004747970656B00015A6400057475706C656C00000003680364000461746F6D6B00015A6400026F6B6803640008616E6E5F747970656B00015A6C0000000268036400037661726B00015A6400084E657753746174656804640004747970656B00015A6400047465726D6A6A680364000461746F6D6B00015A64000968696265726E6174656A6804640004747970656B00015B6400057475706C656C00000005680364000461746F6D6B00015B64000C737761705F68616E646C65726803640008616E6E5F747970656B00015B6C0000000268036400037661726B00015B64000541726773316804640004747970656B00015B6400047465726D6A6A6803640008616E6E5F747970656B00015B6C0000000268036400037661726B00015B6400084E657753746174656804640004747970656B00015B6400047465726D6A6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000848616E646C6572326804640004747970656B00015C640005756E696F6E6C000000026804640004747970656B00015C64000461746F6D6A6804640004747970656B00015C6400057475706C656C000000026804640004747970656B00015C64000461746F6D6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000249646804640004747970656B00015C6400047465726D6A6A6A6A6A6803640008616E6E5F747970656B00015C6C0000000268036400037661726B00015C64000541726773326804640004747970656B00015C6400047465726D6A6A6A680364000461746F6D6B00015D64000E72656D6F76655F68616E646C65726A6A6A6A680264000863616C6C6261636B6C00000001680268026400097465726D696E61746561026C000000016804640004747970656B00015E64000366756E6C000000026804640004747970656B00015E64000770726F647563746C000000026803640008616E6E5F747970656B00015E6C0000000268036400037661726B00015E640004417267736804640004747970656B00015E640005756E696F6E6C000000066804640004747970656B00015E6400047465726D6A6804640004747970656B00015E6400057475706C656C00000002680364000461746F6D6B00015E64000473746F706803640008616E6E5F747970656B00015E6C0000000268036400037661726B00015E640006526561736F6E6804640004747970656B00015E6400047465726D6A6A6A680364000461746F6D6B00015F64000473746F70680364000461746F6D6B00015F64000E72656D6F76655F68616E646C65726804640004747970656B0001606400057475706C656C00000002680364000461746F6D6B0001606400056572726F726804640004747970656B0001606400057475706C656C00000002680364000461746F6D6B000160640004455849546803640008616E6E5F747970656B0001606C0000000268036400037661726B000160640006526561736F6E6804640004747970656B0001606400047465726D6A6A6A6A6804640004747970656B0001616400057475706C656C00000002680364000461746F6D6B0001616400056572726F726804640004747970656B0001616400047465726D6A6A6A6A6803640008616E6E5F747970656B0001626C0000000268036400037661726B00016264000553746174656804640004747970656B0001626400047465726D6A6A6A6804640004747970656B0001636400047465726D6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B636F64655F6368616E676561036C000000016804640004747970656B00016464000366756E6C000000026804640004747970656B00016464000770726F647563746C000000036803640008616E6E5F747970656B0001646C0000000268036400037661726B0001646400064F6C6456736E6804640004747970656B000164640005756E696F6E6C000000026804640004747970656B0001646400047465726D6A6804640004747970656B0001646400057475706C656C00000002680364000461746F6D6B000164640004646F776E6804640004747970656B0001646400047465726D6A6A6A6A6803640008616E6E5F747970656B0001656C0000000268036400037661726B00016564000553746174656804640004747970656B0001656400047465726D6A6A6803640008616E6E5F747970656B0001656C0000000268036400037661726B00016564000545787472616804640004747970656B0001656400047465726D6A6A6A6804640004747970656B0001666400057475706C656C00000002680364000461746F6D6B0001666400026F6B6803640008616E6E5F747970656B0001666C0000000268036400037661726B0001666400084E657753746174656804640004747970656B0001666400047465726D6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000D666F726D61745F73746174757361026C000000016804640004747970656B00016764000B626F756E6465645F66756E6C000000026804640004747970656B00016764000366756E6C000000026804640004747970656B00016764000770726F647563746C0000000268036400037661726B0001676400034F707468036400037661726B00016764000A537461747573446174616A68036400037661726B0001676400065374617475736A6C000000056804640004747970656B00016864000A636F6E73747261696E746C00000002680364000461746F6D6B00016864000A69735F737562747970656C0000000268036400037661726B0001686400034F70746804640004747970656B000168640005756E696F6E6C00000002680364000461746F6D6B0001686400066E6F726D616C680364000461746F6D6B0001686400097465726D696E6174656A6A6A6804640004747970656B00016964000A636F6E73747261696E746C00000002680364000461746F6D6B00016964000A69735F737562747970656C0000000268036400037661726B00016964000A537461747573446174616804640004747970656B0001696400046C6973746C000000016804640004747970656B000169640005756E696F6E6C0000000268036400037661726B000169640005504469637468036400037661726B00016964000553746174656A6A6A6A6804640004747970656B00016A64000A636F6E73747261696E746C00000002680364000461746F6D6B00016A64000A69735F737562747970656C0000000268036400037661726B00016A64000550446963746804640004747970656B00016A6400046C6973746C000000016804640004747970656B00016A6400057475706C656C000000026803640008616E6E5F747970656B00016A6C0000000268036400037661726B00016A6400034B65796804640004747970656B00016A6400047465726D6A6A6803640008616E6E5F747970656B00016A6C0000000268036400037661726B00016A64000556616C75656804640004747970656B00016A6400047465726D6A6A6A6A6A6A6804640004747970656B00016B64000A636F6E73747261696E746C00000002680364000461746F6D6B00016B64000A69735F737562747970656C0000000268036400037661726B00016B64000553746174656804640004747970656B00016B6400047465726D6A6A6A6804640004747970656B00016C64000A636F6E73747261696E746C00000002680364000461746F6D6B00016C64000A69735F737562747970656C0000000268036400037661726B00016C6400065374617475736804640004747970656B00016C6400047465726D6A6A6A6A6A6A6A68026400126F7074696F6E616C5F63616C6C6261636B736C00000001680264000D666F726D61745F73746174757361026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00422F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
+=mod:gen
+Current size: 13507
+Current attributes: 836C00000001680264000376736E6C000000016E10001134B4BD76C6A257431EE32DD1D4C2FC6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E2E65726C6A
+=mod:proc_lib
+Current size: 34658
+Current attributes: 836C00000001680264000376736E6C000000016E1000E98A4C92109BB3FD70A88946ABD5A03D6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961346802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
+=mod:application_controller
+Current size: 112060
+Current attributes: 836C00000001680264000376736E6C000000016E1000F47343BD6F7E99C1857144D07676EEE76A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B004F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
+=mod:lists
+Current size: 114921
+Current attributes: 836C00000002680264000376736E6C000000016E100035E51F81BE3CBC7B45860F41CF5775D86A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000A756B65796D657267656C61036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961346802640006736F757263656B003E2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6C697374732E65726C6A
+=mod:gen_server
+Current size: 55426
+Current attributes: 836C00000009680264000376736E6C000000016E10008EA09A5218A03E4B2926B16DCA8A0C4E6A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00017464000366756E6C000000026804640004747970656B00017464000770726F647563746C000000016803640008616E6E5F747970656B0001746C0000000268036400037661726B000174640004417267736804640004747970656B0001746400047465726D6A6A6A6804640004747970656B000175640005756E696F6E6C000000046804640004747970656B0001756400057475706C656C00000002680364000461746F6D6B0001756400026F6B6803640008616E6E5F747970656B0001756C0000000268036400037661726B00017564000553746174656804640004747970656B0001756400047465726D6A6A6A6804640004747970656B0001756400057475706C656C00000003680364000461746F6D6B0001756400026F6B6803640008616E6E5F747970656B0001756C0000000268036400037661726B00017564000553746174656804640004747970656B0001756400047465726D6A6A6804640004747970656B000175640005756E696F6E6C000000026804640004747970656B00017564000774696D656F75746A680364000461746F6D6B00017564000968696265726E6174656A6A6804640004747970656B0001766400057475706C656C00000002680364000461746F6D6B00017664000473746F706803640008616E6E5F747970656B0001766C0000000268036400037661726B000176640006526561736F6E6804640004747970656B0001766400047465726D6A6A6A680364000461746F6D6B00017664000669676E6F72656A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F63616C6C61036C000000016804640004747970656B00017764000366756E6C000000026804640004747970656B00017764000770726F647563746C000000036803640008616E6E5F747970656B0001776C0000000268036400037661726B000177640007526571756573746804640004747970656B0001776400047465726D6A6A6803640008616E6E5F747970656B0001776C0000000268036400037661726B00017764000446726F6D6804640004747970656B0001776400057475706C656C000000026804640004747970656B0001776400037069646A6803640008616E6E5F747970656B0001776C0000000268036400037661726B0001776400035461676804640004747970656B0001776400047465726D6A6A6A6A6803640008616E6E5F747970656B0001786C0000000268036400037661726B00017864000553746174656804640004747970656B0001786400047465726D6A6A6A6804640004747970656B000179640005756E696F6E6C000000066804640004747970656B0001796400057475706C656C00000003680364000461746F6D6B0001796400057265706C796803640008616E6E5F747970656B0001796C0000000268036400037661726B0001796400055265706C796804640004747970656B0001796400047465726D6A6A6803640008616E6E5F747970656B0001796C0000000268036400037661726B0001796400084E657753746174656804640004747970656B0001796400047465726D6A6A6A6804640004747970656B00017A6400057475706C656C00000004680364000461746F6D6B00017A6400057265706C796803640008616E6E5F747970656B00017A6C0000000268036400037661726B00017A6400055265706C796804640004747970656B00017A6400047465726D6A6A6803640008616E6E5F747970656B00017A6C0000000268036400037661726B00017A6400084E657753746174656804640004747970656B00017A6400047465726D6A6A6804640004747970656B00017A640005756E696F6E6C000000026804640004747970656B00017A64000774696D656F75746A680364000461746F6D6B00017A64000968696265726E6174656A6A6804640004747970656B00017B6400057475706C656C00000002680364000461746F6D6B00017B6400076E6F7265706C796803640008616E6E5F747970656B00017B6C0000000268036400037661726B00017B6400084E657753746174656804640004747970656B00017B6400047465726D6A6A6A6804640004747970656B00017C6400057475706C656C00000003680364000461746F6D6B00017C6400076E6F7265706C796803640008616E6E5F747970656B00017C6C0000000268036400037661726B00017C6400084E657753746174656804640004747970656B00017C6400047465726D6A6A6804640004747970656B00017C640005756E696F6E6C000000026804640004747970656B00017C64000774696D656F75746A680364000461746F6D6B00017C64000968696265726E6174656A6A6804640004747970656B00017D6400057475706C656C00000004680364000461746F6D6B00017D64000473746F706803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D640006526561736F6E6804640004747970656B00017D6400047465726D6A6A6803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D6400055265706C796804640004747970656B00017D6400047465726D6A6A6803640008616E6E5F747970656B00017D6C0000000268036400037661726B00017D6400084E657753746174656804640004747970656B00017D6400047465726D6A6A6A6804640004747970656B00017E6400057475706C656C00000003680364000461746F6D6B00017E64000473746F706803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E640006526561736F6E6804640004747970656B00017E6400047465726D6A6A6803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E6400084E657753746174656804640004747970656B00017E6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F6361737461026C000000016804640004747970656B00017F64000366756E6C000000026804640004747970656B00017F64000770726F647563746C000000026803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F640007526571756573746804640004747970656B00017F6400047465726D6A6A6803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F64000553746174656804640004747970656B00017F6400047465726D6A6A6A6804640004747970656B000180640005756E696F6E6C000000036804640004747970656B0001806400057475706C656C00000002680364000461746F6D6B0001806400076E6F7265706C796803640008616E6E5F747970656B0001806C0000000268036400037661726B0001806400084E657753746174656804640004747970656B0001806400047465726D6A6A6A6804640004747970656B0001816400057475706C656C00000003680364000461746F6D6B0001816400076E6F7265706C796803640008616E6E5F747970656B0001816C0000000268036400037661726B0001816400084E657753746174656804640004747970656B0001816400047465726D6A6A6804640004747970656B000181640005756E696F6E6C000000026804640004747970656B00018164000774696D656F75746A680364000461746F6D6B00018164000968696265726E6174656A6A6804640004747970656B0001826400057475706C656C00000003680364000461746F6D6B00018264000473746F706803640008616E6E5F747970656B0001826C0000000268036400037661726B000182640006526561736F6E6804640004747970656B0001826400047465726D6A6A6803640008616E6E5F747970656B0001826C0000000268036400037661726B0001826400084E657753746174656804640004747970656B0001826400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B68616E646C655F696E666F61026C000000016804640004747970656B00018364000366756E6C000000026804640004747970656B00018364000770726F647563746C000000026803640008616E6E5F747970656B0001836C0000000268036400037661726B000183640004496E666F6804640004747970656B000183640005756E696F6E6C00000002680364000461746F6D6B00018364000774696D656F75746804640004747970656B0001836400047465726D6A6A6A6803640008616E6E5F747970656B0001836C0000000268036400037661726B00018364000553746174656804640004747970656B0001836400047465726D6A6A6A6804640004747970656B000184640005756E696F6E6C000000036804640004747970656B0001846400057475706C656C00000002680364000461746F6D6B0001846400076E6F7265706C796803640008616E6E5F747970656B0001846C0000000268036400037661726B0001846400084E657753746174656804640004747970656B0001846400047465726D6A6A6A6804640004747970656B0001856400057475706C656C00000003680364000461746F6D6B0001856400076E6F7265706C796803640008616E6E5F747970656B0001856C0000000268036400037661726B0001856400084E657753746174656804640004747970656B0001856400047465726D6A6A6804640004747970656B000185640005756E696F6E6C000000026804640004747970656B00018564000774696D656F75746A680364000461746F6D6B00018564000968696265726E6174656A6A6804640004747970656B0001866400057475706C656C00000003680364000461746F6D6B00018664000473746F706803640008616E6E5F747970656B0001866C0000000268036400037661726B000186640006526561736F6E6804640004747970656B0001866400047465726D6A6A6803640008616E6E5F747970656B0001866C0000000268036400037661726B0001866400084E657753746174656804640004747970656B0001866400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C00000001680268026400097465726D696E61746561026C000000016804640004747970656B00018764000366756E6C000000026804640004747970656B00018764000770726F647563746C000000026803640008616E6E5F747970656B0001876C0000000268036400037661726B000187640006526561736F6E6804640004747970656B000187640005756E696F6E6C00000004680364000461746F6D6B0001876400066E6F726D616C680364000461746F6D6B00018764000873687574646F776E6804640004747970656B0001876400057475706C656C00000002680364000461746F6D6B00018764000873687574646F776E6804640004747970656B0001876400047465726D6A6A6804640004747970656B0001886400047465726D6A6A6A6803640008616E6E5F747970656B0001896C0000000268036400037661726B00018964000553746174656804640004747970656B0001896400047465726D6A6A6A6804640004747970656B00018A6400047465726D6A6A6A6A680264000863616C6C6261636B6C000000016802680264000B636F64655F6368616E676561036C000000016804640004747970656B00018B64000366756E6C000000026804640004747970656B00018B64000770726F647563746C000000036803640008616E6E5F747970656B00018B6C0000000268036400037661726B00018B6400064F6C6456736E6804640004747970656B00018B640005756E696F6E6C000000026804640004747970656B00018B6400047465726D6A6804640004747970656B00018B6400057475706C656C00000002680364000461746F6D6B00018B640004646F776E6804640004747970656B00018B6400047465726D6A6A6A6A6803640008616E6E5F747970656B00018B6C0000000268036400037661726B00018B64000553746174656804640004747970656B00018B6400047465726D6A6A6803640008616E6E5F747970656B00018C6C0000000268036400037661726B00018C64000545787472616804640004747970656B00018C6400047465726D6A6A6A6804640004747970656B00018D640005756E696F6E6C000000026804640004747970656B00018D6400057475706C656C00000002680364000461746F6D6B00018D6400026F6B6803640008616E6E5F747970656B00018D6C0000000268036400037661726B00018D6400084E657753746174656804640004747970656B00018D6400047465726D6A6A6A6804640004747970656B00018D6400057475706C656C00000002680364000461746F6D6B00018D6400056572726F726803640008616E6E5F747970656B00018D6C0000000268036400037661726B00018D640006526561736F6E6804640004747970656B00018D6400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000D666F726D61745F73746174757361026C000000016804640004747970656B00018E64000B626F756E6465645F66756E6C000000026804640004747970656B00018E64000366756E6C000000026804640004747970656B00018E64000770726F647563746C0000000268036400037661726B00018E6400034F707468036400037661726B00018E64000A537461747573446174616A68036400037661726B00018E6400065374617475736A6C000000056804640004747970656B00018F64000A636F6E73747261696E746C00000002680364000461746F6D6B00018F64000A69735F737562747970656C0000000268036400037661726B00018F6400034F70746804640004747970656B00018F640005756E696F6E6C00000002680364000461746F6D6B00018F6400066E6F726D616C680364000461746F6D6B00018F6400097465726D696E6174656A6A6A6804640004747970656B00019064000A636F6E73747261696E746C00000002680364000461746F6D6B00019064000A69735F737562747970656C0000000268036400037661726B00019064000A537461747573446174616804640004747970656B0001906400046C6973746C000000016804640004747970656B000190640005756E696F6E6C0000000268036400037661726B000190640005504469637468036400037661726B00019064000553746174656A6A6A6A6804640004747970656B00019164000A636F6E73747261696E746C00000002680364000461746F6D6B00019164000A69735F737562747970656C0000000268036400037661726B00019164000550446963746804640004747970656B0001916400046C6973746C000000016804640004747970656B0001916400057475706C656C000000026803640008616E6E5F747970656B0001916C0000000268036400037661726B0001916400034B65796804640004747970656B0001916400047465726D6A6A6803640008616E6E5F747970656B0001916C0000000268036400037661726B00019164000556616C75656804640004747970656B0001916400047465726D6A6A6A6A6A6A6804640004747970656B00019264000A636F6E73747261696E746C00000002680364000461746F6D6B00019264000A69735F737562747970656C0000000268036400037661726B00019264000553746174656804640004747970656B0001926400047465726D6A6A6A6804640004747970656B00019364000A636F6E73747261696E746C00000002680364000461746F6D6B00019364000A69735F737562747970656C0000000268036400037661726B0001936400065374617475736804640004747970656B0001936400047465726D6A6A6A6A6A6A6A68026400126F7074696F6E616C5F63616C6C6261636B736C00000001680264000D666F726D61745F73746174757361026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
+=mod:application
+Current size: 9612
+Current attributes: 836C00000003680264000376736E6C000000016E100039DE1853DFECBDB4A498182AD55734A56A680264000863616C6C6261636B6C0000000168026802640005737461727461026C000000016804640004747970656B00014064000366756E6C000000026804640004747970656B00014064000770726F647563746C000000026803640008616E6E5F747970656B0001406C0000000268036400037661726B0001406400095374617274547970656804640009757365725F747970656B00014064000A73746172745F747970656A6A6803640008616E6E5F747970656B0001406C0000000268036400037661726B0001406400095374617274417267736804640004747970656B0001406400047465726D6A6A6A6804640004747970656B000141640005756E696F6E6C000000036804640004747970656B0001416400057475706C656C00000002680364000461746F6D6B0001416400026F6B6804640004747970656B0001416400037069646A6A6804640004747970656B0001416400057475706C656C00000003680364000461746F6D6B0001416400026F6B6804640004747970656B0001416400037069646A6803640008616E6E5F747970656B0001416C0000000268036400037661726B00014164000553746174656804640004747970656B0001416400047465726D6A6A6A6804640004747970656B0001416400057475706C656C00000002680364000461746F6D6B0001416400056572726F726803640008616E6E5F747970656B0001416C0000000268036400037661726B000141640006526561736F6E6804640004747970656B0001416400047465726D6A6A6A6A6A6A6A680264000863616C6C6261636B6C000000016802680264000473746F7061016C000000016804640004747970656B00014364000366756E6C000000026804640004747970656B00014364000770726F647563746C000000016803640008616E6E5F747970656B0001436C0000000268036400037661726B00014364000553746174656804640004747970656B0001436400047465726D6A6A6A6804640004747970656B0001446400047465726D6A6A6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
+=mod:application_master
+Current size: 21182
+Current attributes: 836C00000001680264000376736E6C000000016E1000BC11116AA3C54EDFE28A96250EC0F7CE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B004B2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
+=mod:kernel
+Current size: 15203
+Current attributes: 836C00000002680264000376736E6C000000016E10007133686472752CF09B5C4B29004DC8726A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
+=mod:supervisor
+Current size: 78005
+Current attributes: 836C00000003680264000376736E6C000000016E10007628F5DA8AB53477405ED3F141D33CFF6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000863616C6C6261636B6C0000000168026802640004696E697461016C000000016804640004747970656B00017E64000366756E6C000000026804640004747970656B00017E64000770726F647563746C000000016803640008616E6E5F747970656B00017E6C0000000268036400037661726B00017E640004417267736804640004747970656B00017E6400047465726D6A6A6A6804640004747970656B00017F640005756E696F6E6C000000026804640004747970656B00017F6400057475706C656C00000002680364000461746F6D6B00017F6400026F6B6804640004747970656B00017F6400057475706C656C000000026803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F640008537570466C6167736804640009757365725F747970656B00017F6400097375705F666C6167736A6A6804640004747970656B00017F6400046C6973746C000000016803640008616E6E5F747970656B00017F6C0000000268036400037661726B00017F6400094368696C64537065636804640009757365725F747970656B00017F64000A6368696C645F737065636A6A6A6A6A680364000461746F6D6B00018064000669676E6F72656A6A6A6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961356802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
+=mod:code
+Current size: 20764
+Current attributes: 836C00000001680264000376736E6C000000016E1000E08E92DA5C4C22F52473AF6A487872486A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
+=mod:binary
+Current size: 12858
+Current attributes: 836C00000001680264000376736E6C000000016E100003F9F4263F28BBC6106DB4ECA80DE0FE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961306802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F62696E6172792E65726C6A
+=mod:ets
+Current size: 72577
+Current attributes: 836C00000001680264000376736E6C000000016E100063BC752FD967CD9F0928EE0FE96216DE6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961326802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6574732E65726C6A
+=mod:filename
+Current size: 43221
+Current attributes: 836C00000001680264000376736E6C000000016E1000E833CDDF95816FC98B6FAD591BEBF1E86A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
+=mod:gb_sets
+Current size: 27961
+Current attributes: 836C00000001680264000376736E6C000000016E100085D06C0C4879E6CAB974E2489DF10A626A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67625F736574732E65726C6A
+=mod:gb_trees
+Current size: 17032
+Current attributes: 836C00000001680264000376736E6C000000016E100046A2393F013833EAFFECC48059BDBE986A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
+=mod:hipe_unified_loader
+Current size: 45549
+Current attributes: 836C00000001680264000376736E6C000000016E1000AEC66591D1F0FE79B86D70AE7E4CE50E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B004C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
+=mod:os
+Current size: 18314
+Current attributes: 836C00000001680264000376736E6C000000016E1000BCAF143B4F482BEF329FF35693DC37AA6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003B2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6F732E65726C6A
+=mod:unicode
+Current size: 38763
+Current attributes: 836C00000002680264000376736E6C000000016E100014AF9A5A2F3E07677B81A62CFC3423BF6A68026400086469616C797A65726C0000000168026400116E6F5F696D70726F7065725F6C69737473680264000C646F5F6F5F62696E6172793261026A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961356802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F756E69636F64652E65726C6A
+=mod:code_server
+Current size: 94705
+Current attributes: 836C00000001680264000376736E6C000000016E1000EAF3A2E1E0ECA23DBA3D3C06A4E5D9736A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
+=mod:rpc
+Current size: 26139
+Current attributes: 836C00000003680264000376736E6C000000016E100081ABD8B1DEE43D27DE8689BD23CB05DF6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000A646570726563617465646C000000026802640016736166655F6D756C74695F7365727665725F63616C6C61026802640016736166655F6D756C74695F7365727665725F63616C6C61036A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F7270632E65726C6A
+=mod:global
+Current size: 113313
+Current attributes: 836C00000002680264000376736E6C000000016E1000352A93924513845E949DC3140FDC886E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
+=mod:inet_db
+Current size: 81409
+Current attributes: 836C00000001680264000376736E6C000000016E10006145303A81171F45174C660812E812A46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
+=mod:inet_config
+Current size: 29475
+Current attributes: 836C00000001680264000376736E6C000000016E1000B2BF24AF51E7B5C3E5398B60ACE6D7946A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00442F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
+=mod:inet_udp
+Current size: 5184
+Current attributes: 836C00000001680264000376736E6C000000016E100036E688390111A722F6D2ACBB7211DFD46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
+=mod:inet
+Current size: 73376
+Current attributes: 836C00000001680264000376736E6C000000016E10009BE07117F12F78C8E17E6608CFDD215E6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
+=mod:inet_parse
+Current size: 44906
+Current attributes: 836C00000001680264000376736E6C000000016E1000EA7F83B4829BD2B638F6A7859D501FD96A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
+=mod:inet_gethost_native
+Current size: 33557
+Current attributes: 836C00000002680264000376736E6C000000016E1000DF33C123DA3D5C59B285473F39B29DDF6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61036802640006736F757263656B004C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
+=mod:erl_distribution
+Current size: 4507
+Current attributes: 836C00000002680264000376736E6C000000016E1000FF25C4DA21202BD37B56486B509AA4166A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
+=mod:net_kernel
+Current size: 78717
+Current attributes: 836C00000002680264000376736E6C000000016E1000F72EE655757D78037989103C96DF87D56A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00432F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
+=mod:inet_tcp_dist
+Current size: 24749
+Current attributes: 836C00000001680264000376736E6C000000016E100077EB2B230A5AFEFCED80399E3EEDC2696A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7463705F646973742E65726C6A
+=mod:erl_epmd
+Current size: 24107
+Current attributes: 836C00000002680264000376736E6C000000016E100068F7C63A40C348791A162D077EA51ABD6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968036400016464001265726C616E675F6461656D6F6E5F706F7274620000111168036400016464000E65706D645F646973745F68696768610568036400016464000D65706D645F646973745F6C6F77610568036400016464000E65706D645F6E6F64655F74797065616E68036400016464000C65706D645F706F72745F6E6F620000111168026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F65726C5F65706D642E65726C6A
+=mod:auth
+Current size: 24437
+Current attributes: 836C00000003680264000376736E6C000000016E100065B309FD7869DCD7D26AA10AE8C5A1DE6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A680264000A646570726563617465646C00000003680264000769735F6175746861016802640006636F6F6B69656400015F680264000B6E6F64655F636F6F6B69656400015F6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61016802640006736F757263656B003D2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F617574682E65726C6A
+=mod:inet_tcp
+Current size: 7068
+Current attributes: 836C00000001680264000376736E6C000000016E1000B46D593BFC2C89C71235422D4AD9AEB26A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61046802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
+=mod:gen_tcp
+Current size: 7171
+Current attributes: 836C00000001680264000376736E6C000000016E100052566B1DBC6040CA42722A601889F54C6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610A61026802640006736F757263656B00402F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
+=mod:io_lib
+Current size: 31343
+Current attributes: 836C00000001680264000376736E6C000000016E10004D342C89413B45904290F5A39C5D9CEA6A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
+=mod:io_lib_format
+Current size: 49161
+Current attributes: 836C00000001680264000376736E6C000000016E10000C354469565C6F1370BBFE19A99045C46A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
+=mod:io_lib_pretty
+Current size: 57771
+Current attributes: 836C00000001680264000376736E6C000000016E10009F452CD29375A4E9138ADC95CB1D20B66A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961336802640006736F757263656B00462F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
+=mod:epp
+Current size: 102247
+Current attributes: 836C00000001680264000376736E6C000000016E10001F628E9091F310D2288D87F3E0AAD6F96A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961316802640006736F757263656B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F6570702E65726C6A
+=mod:erl_scan
+Current size: 119080
+Current attributes: 836C00000002680264000376736E6C000000016E1000C37F7804BC9DB94EEA3CEF67B921B40A6A680264000A646570726563617465646C00000005680364000F617474726962757465735F696E666F61016400126E6578745F6D616A6F725F72656C65617365680364000F617474726962757465735F696E666F61026400126E6578745F6D616A6F725F72656C65617365680364000D7365745F61747472696275746561036400126E6578745F6D616A6F725F72656C65617365680364000A746F6B656E5F696E666F61016400126E6578745F6D616A6F725F72656C65617365680364000A746F6B656E5F696E666F61026400126E6578745F6D616A6F725F72656C656173656A6A
+Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400066F75746469726B003C2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B003F2F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00492F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400127761726E696E67735F61735F6572726F727364000A64656275675F696E666F6A680264000776657273696F6E6B0005362E302E33680264000474696D65680662000007E1610C61076111610961326802640006736F757263656B00412F6275696C642F65726C616E672D7075664251462F65726C616E672D31382E332D646673672F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
+=fun
+Module: gen
+Uniq: 132519590
+Index: 0
+Address: 0x00007fbf514aefa0
+Refc: 2
+=fun
+Module: gen
+Uniq: 132519590
+Index: 1
+Address: 0x00007fbf514aef30
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 4
+Address: 0x00007fbf48c295c8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 5
+Address: 0x00007fbf48c29530
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 6
+Address: 0x00007fbf48c294c0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 4
+Address: 0x00007fbf48c17be0
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 0
+Address: 0x00007fbf48c29718
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 0
+Address: 0x00007fbf514a8ab0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 5
+Address: 0x00007fbf48c17ad8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 1
+Address: 0x00007fbf48c296a8
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 1
+Address: 0x00007fbf514a8998
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 2
+Address: 0x00007fbf48c29670
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 2
+Address: 0x00007fbf514a87b8
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 35971057
+Index: 3
+Address: 0x00007fbf48c29638
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 105000069
+Index: 3
+Address: 0x00007fbf514a85c8
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 0
+Address: 0x00007fbf48c17e28
+Refc: 2
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 1
+Address: 0x00007fbf48c17df0
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 2
+Address: 0x00007fbf48c17db8
+Refc: 1
+=fun
+Module: prim_file
+Uniq: 45351011
+Index: 3
+Address: 0x00007fbf48c17d80
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 2
+Address: 0x00007fbf42b4b1d8
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 3
+Address: 0x00007fbf42b4b040
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 0
+Address: 0x00007fbf42b4b768
+Refc: 1
+=fun
+Module: epp
+Uniq: 130987351
+Index: 1
+Address: 0x00007fbf42b4b610
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 1
+Address: 0x00007fbf42fd6928
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 0
+Address: 0x00007fbf42fd6b28
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 3
+Address: 0x00007fbf42fd6790
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 2
+Address: 0x00007fbf42fd68f0
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 5
+Address: 0x00007fbf42fd6608
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 24
+Address: 0x00007fbf42fb18c0
+Refc: 1
+=fun
+Module: rpc
+Uniq: 116928089
+Index: 4
+Address: 0x00007fbf42fd6738
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 25
+Address: 0x00007fbf42fb1a78
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 26
+Address: 0x00007fbf42fb1b98
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 27
+Address: 0x00007fbf42fb1cf8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 20
+Address: 0x00007fbf42fb1b10
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 21
+Address: 0x00007fbf42fb19f0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 22
+Address: 0x00007fbf42fb1998
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 23
+Address: 0x00007fbf42fb17a0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 16
+Address: 0x00007fbf42fb1ea8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 17
+Address: 0x00007fbf42fb1838
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 18
+Address: 0x00007fbf42fb1718
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 19
+Address: 0x00007fbf42fb1c70
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 12
+Address: 0x00007fbf42fb1dc8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 11
+Address: 0x00007fbf42ffc7a0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 13
+Address: 0x00007fbf42fb1f70
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 10
+Address: 0x00007fbf42ffc828
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 14
+Address: 0x00007fbf42fb1f38
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 9
+Address: 0x00007fbf42ffc8f0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 15
+Address: 0x00007fbf42fb1f00
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 8
+Address: 0x00007fbf42ffc9f8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 8
+Address: 0x00007fbf42fb2088
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 15
+Address: 0x00007fbf42ffbc70
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 9
+Address: 0x00007fbf42fb1e70
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 14
+Address: 0x00007fbf42ffbdc0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 10
+Address: 0x00007fbf42fb1e38
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 13
+Address: 0x00007fbf42ffc2b8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 11
+Address: 0x00007fbf42fb1e00
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 12
+Address: 0x00007fbf42ffc740
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 4
+Address: 0x00007fbf42fb1fa8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 3
+Address: 0x00007fbf42ffcf08
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 5
+Address: 0x00007fbf42fb2150
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 2
+Address: 0x00007fbf42ffcf40
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 6
+Address: 0x00007fbf42fb2118
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 1
+Address: 0x00007fbf42ffd0d8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 7
+Address: 0x00007fbf42fb20e0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 0
+Address: 0x00007fbf42ffd268
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 0
+Address: 0x00007fbf42fb2188
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 7
+Address: 0x00007fbf42ffcbd0
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 1
+Address: 0x00007fbf42fb2050
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 6
+Address: 0x00007fbf42ffccb8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 2
+Address: 0x00007fbf42fb2018
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 5
+Address: 0x00007fbf42ffce18
+Refc: 1
+=fun
+Module: unicode
+Uniq: 100211111
+Index: 3
+Address: 0x00007fbf42fb1fe0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 4
+Address: 0x00007fbf42ffce50
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 11
+Address: 0x00007fbf42f50580
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 27
+Address: 0x00007fbf42ffc998
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 10
+Address: 0x00007fbf42f505e8
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 26
+Address: 0x00007fbf42ffbc10
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 9
+Address: 0x00007fbf42f509e0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 25
+Address: 0x00007fbf42fface8
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 8
+Address: 0x00007fbf42f50c80
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 24
+Address: 0x00007fbf42ffae98
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 12
+Address: 0x00007fbf42f504e8
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 3
+Address: 0x00007fbf42f51068
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 19
+Address: 0x00007fbf42ffb238
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 2
+Address: 0x00007fbf42f510a0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 18
+Address: 0x00007fbf42ffb2d0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 1
+Address: 0x00007fbf42f51218
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 17
+Address: 0x00007fbf42ffb6f8
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 0
+Address: 0x00007fbf42f51388
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 16
+Address: 0x00007fbf42ffbb90
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 7
+Address: 0x00007fbf42f50d48
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 23
+Address: 0x00007fbf42ffaed0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 6
+Address: 0x00007fbf42f50db0
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 22
+Address: 0x00007fbf42ffaf38
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 5
+Address: 0x00007fbf42f50e18
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 21
+Address: 0x00007fbf42ffafa0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 133818010
+Index: 4
+Address: 0x00007fbf42f50e80
+Refc: 1
+=fun
+Module: global
+Uniq: 57951968
+Index: 20
+Address: 0x00007fbf42ffb000
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 1
+Address: 0x00007fbf514d4030
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 0
+Address: 0x00007fbf514d4068
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 3
+Address: 0x00007fbf514d3f50
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 2
+Address: 0x00007fbf514d3fc0
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 5
+Address: 0x00007fbf514d3bd8
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 4
+Address: 0x00007fbf514d3f18
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 7
+Address: 0x00007fbf514d38c8
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 6
+Address: 0x00007fbf514d3b78
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 9
+Address: 0x00007fbf514d3298
+Refc: 1
+=fun
+Module: inet
+Uniq: 49352430
+Index: 8
+Address: 0x00007fbf514d3748
+Refc: 1
+=fun
+Module: io_lib_pretty
+Uniq: 95486190
+Index: 0
+Address: 0x00007fbf42b351b8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 16
+Address: 0x00007fbf48c3ad10
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 17
+Address: 0x00007fbf48c3aa90
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 18
+Address: 0x00007fbf48c3a6a8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 19
+Address: 0x00007fbf48c3a678
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 20
+Address: 0x00007fbf48c3a640
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 21
+Address: 0x00007fbf48c3a4a8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 8
+Address: 0x00007fbf48be21e0
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 22
+Address: 0x00007fbf48c3a2b0
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 6
+Address: 0x00007fbf48be2270
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 8
+Address: 0x00007fbf48c3bbf0
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 7
+Address: 0x00007fbf48be2238
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 9
+Address: 0x00007fbf48c3ba88
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 4
+Address: 0x00007fbf48be2948
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 10
+Address: 0x00007fbf48c3b910
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 5
+Address: 0x00007fbf48be2560
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 11
+Address: 0x00007fbf48c3b7a8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 2
+Address: 0x00007fbf48be2b58
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 12
+Address: 0x00007fbf48c3b640
+Refc: 2
+=fun
+Module: init
+Uniq: 24720724
+Index: 3
+Address: 0x00007fbf48be2af8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 0
+Address: 0x00007fbf48be2bc8
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 13
+Address: 0x00007fbf48c3b4d8
+Refc: 1
+=fun
+Module: init
+Uniq: 24720724
+Index: 1
+Address: 0x00007fbf48be2b90
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 14
+Address: 0x00007fbf48c3b440
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 38
+Address: 0x00007fbf42b70090
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 15
+Address: 0x00007fbf48c3b290
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 0
+Address: 0x00007fbf48c3c780
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 36
+Address: 0x00007fbf42b70100
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 1
+Address: 0x00007fbf48c3c5e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 37
+Address: 0x00007fbf42b700c8
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 2
+Address: 0x00007fbf514b6540
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 2
+Address: 0x00007fbf48c3c478
+Refc: 6
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 34
+Address: 0x00007fbf42b70170
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 1
+Address: 0x00007fbf514b6700
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 3
+Address: 0x00007fbf48c3c310
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 35
+Address: 0x00007fbf42b70138
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 32310957
+Index: 0
+Address: 0x00007fbf514b6810
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 4
+Address: 0x00007fbf48c3c170
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 32
+Address: 0x00007fbf42b70218
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 5
+Address: 0x00007fbf48c3c038
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 33
+Address: 0x00007fbf42b701a8
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 8
+Address: 0x00007fbf42aed558
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 6
+Address: 0x00007fbf48c3bed0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 7
+Address: 0x00007fbf42aed618
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 111532781
+Index: 7
+Address: 0x00007fbf48c3bd68
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 6
+Address: 0x00007fbf42aed650
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 5
+Address: 0x00007fbf42aed6b0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 4
+Address: 0x00007fbf42aed710
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 3
+Address: 0x00007fbf42aed7d0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 2
+Address: 0x00007fbf42aed890
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 1
+Address: 0x00007fbf42aed9c0
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 111951612
+Index: 0
+Address: 0x00007fbf42aedaa0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 6
+Address: 0x00007fbf42b70758
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 7
+Address: 0x00007fbf42b706e8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 4
+Address: 0x00007fbf42b70790
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 5
+Address: 0x00007fbf42b707c8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 2
+Address: 0x00007fbf42b70870
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 3
+Address: 0x00007fbf42b70838
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 0
+Address: 0x00007fbf42b708e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 1
+Address: 0x00007fbf42b708a8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 14
+Address: 0x00007fbf42b70598
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 15
+Address: 0x00007fbf42b70560
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 12
+Address: 0x00007fbf42b70608
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 13
+Address: 0x00007fbf42b705d0
+Refc: 1
+=fun
+Module: code
+Uniq: 37983170
+Index: 0
+Address: 0x00007fbf42f5d9a8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 10
+Address: 0x00007fbf42b70678
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 11
+Address: 0x00007fbf42b70640
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 8
+Address: 0x00007fbf42b706b0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 9
+Address: 0x00007fbf42b70720
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 22
+Address: 0x00007fbf42b70410
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 23
+Address: 0x00007fbf42b703d8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 20
+Address: 0x00007fbf42b70480
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 21
+Address: 0x00007fbf42b70448
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 18
+Address: 0x00007fbf42b704f0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 19
+Address: 0x00007fbf42b704b8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 16
+Address: 0x00007fbf42b70800
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 17
+Address: 0x00007fbf42b70528
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 30
+Address: 0x00007fbf42b70250
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 31
+Address: 0x00007fbf42b701e0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 28
+Address: 0x00007fbf42b702f8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 29
+Address: 0x00007fbf42b70288
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 26
+Address: 0x00007fbf42b70330
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 27
+Address: 0x00007fbf42b702c0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 24
+Address: 0x00007fbf42b703a0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 5611789
+Index: 25
+Address: 0x00007fbf42b70368
+Refc: 1
+=fun
+Module: lists
+Uniq: 113486526
+Index: 0
+Address: 0x00007fbf4307d478
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 117239185
+Index: 0
+Address: 0x00007fbf42ad80a8
+Refc: 1
+=fun
+Module: inet_gethost_native
+Uniq: 117239185
+Index: 1
+Address: 0x00007fbf42ad7d40
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 17
+Address: 0x00007fbf42f75ca0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 16
+Address: 0x00007fbf42f75268
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 5
+Address: 0x00007fbf42f75fd8
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 4
+Address: 0x00007fbf42f75e68
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 7
+Address: 0x00007fbf42f75ec8
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 6
+Address: 0x00007fbf42f75f58
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 1
+Address: 0x00007fbf42f76690
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 0
+Address: 0x00007fbf42f76798
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 3
+Address: 0x00007fbf42f76058
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 2
+Address: 0x00007fbf42f76308
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 13
+Address: 0x00007fbf42f753b0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 12
+Address: 0x00007fbf42f75460
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 15
+Address: 0x00007fbf42f752a0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 14
+Address: 0x00007fbf42f75300
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 9
+Address: 0x00007fbf42f75d88
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 8
+Address: 0x00007fbf42f75df0
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 11
+Address: 0x00007fbf42f75b88
+Refc: 1
+=fun
+Module: ets
+Uniq: 116437783
+Index: 10
+Address: 0x00007fbf42f75d28
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 4
+Address: 0x00007fbf42fcdc68
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 5
+Address: 0x00007fbf42fcda40
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 6
+Address: 0x00007fbf42fcd708
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 7
+Address: 0x00007fbf42fcd840
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 0
+Address: 0x00007fbf42fce220
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 5
+Address: 0x00007fbf514f8cd0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 1
+Address: 0x00007fbf42fce128
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 4
+Address: 0x00007fbf514f89e0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 2
+Address: 0x00007fbf42fcdda8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 7
+Address: 0x00007fbf514f8d38
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 3
+Address: 0x00007fbf42fcdd08
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 6
+Address: 0x00007fbf514f8c28
+Refc: 1
+=fun
+Module: os
+Uniq: 89243364
+Index: 0
+Address: 0x00007fbf42fa8cf8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 12
+Address: 0x00007fbf42fccd08
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 1
+Address: 0x00007fbf514f9040
+Refc: 1
+=fun
+Module: os
+Uniq: 89243364
+Index: 1
+Address: 0x00007fbf42fa8cc0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 13
+Address: 0x00007fbf42fccc70
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 0
+Address: 0x00007fbf514f9210
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 14
+Address: 0x00007fbf42fccc18
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 3
+Address: 0x00007fbf514f8b00
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 15
+Address: 0x00007fbf42fcc958
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 2
+Address: 0x00007fbf514f8f80
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 8
+Address: 0x00007fbf42fcd318
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 13
+Address: 0x00007fbf514f8050
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 9
+Address: 0x00007fbf42fcd290
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 12
+Address: 0x00007fbf514f80c8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 10
+Address: 0x00007fbf42fccf40
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 15
+Address: 0x00007fbf514f7d60
+Refc: 1
+=fun
+Module: code_server
+Uniq: 60739373
+Index: 11
+Address: 0x00007fbf42fccdc0
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 14
+Address: 0x00007fbf514f7ef8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 9
+Address: 0x00007fbf514f8430
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 8
+Address: 0x00007fbf514f85c8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 11
+Address: 0x00007fbf514f81f0
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 10
+Address: 0x00007fbf514f8318
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 20
+Address: 0x00007fbf514f7530
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 17
+Address: 0x00007fbf514f7b98
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 16
+Address: 0x00007fbf514f7cd8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 19
+Address: 0x00007fbf514f7620
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 121598899
+Index: 18
+Address: 0x00007fbf514f7b18
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 6
+Address: 0x00007fbf430503b8
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 4
+Address: 0x00007fbf43050428
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 5
+Address: 0x00007fbf430503f0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 7
+Address: 0x00007fbf42fa1970
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 2
+Address: 0x00007fbf43050498
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 6
+Address: 0x00007fbf42fa19a8
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 3
+Address: 0x00007fbf43050460
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 5
+Address: 0x00007fbf42fa19e0
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 0
+Address: 0x00007fbf430508b8
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 4
+Address: 0x00007fbf42fa1d70
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 1
+Address: 0x00007fbf42ac9550
+Refc: 1
+=fun
+Module: gen_server
+Uniq: 40920150
+Index: 1
+Address: 0x00007fbf430504d0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 3
+Address: 0x00007fbf42fa1e00
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 0
+Address: 0x00007fbf42ac9630
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 2
+Address: 0x00007fbf42fa2000
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 3
+Address: 0x00007fbf42ac8f90
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 1
+Address: 0x00007fbf42fa21f0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 2
+Address: 0x00007fbf42ac92e0
+Refc: 1
+=fun
+Module: hipe_unified_loader
+Uniq: 7809635
+Index: 0
+Address: 0x00007fbf42fa27b8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 5
+Address: 0x00007fbf42ac8e40
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 4
+Address: 0x00007fbf42ac8eb0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 7
+Address: 0x00007fbf42ac8cd8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 6
+Address: 0x00007fbf42ac8d88
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 9
+Address: 0x00007fbf42ac89b8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 8
+Address: 0x00007fbf42ac8b70
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 11
+Address: 0x00007fbf42ac8888
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 10
+Address: 0x00007fbf42ac88c0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 13
+Address: 0x00007fbf42ac8818
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 113834628
+Index: 12
+Address: 0x00007fbf42ac8850
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 16
+Address: 0x00007fbf4301f5e0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 4
+Address: 0x00007fbf4302b4d0
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 1
+Address: 0x00007fbf42af5958
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 0
+Address: 0x00007fbf42af5a40
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 1
+Address: 0x00007fbf4302b6b8
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 3
+Address: 0x00007fbf42af58c0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 0
+Address: 0x00007fbf4302b718
+Refc: 1
+=fun
+Module: application_master
+Uniq: 108510720
+Index: 0
+Address: 0x00007fbf514c4ee8
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 2
+Address: 0x00007fbf42af5920
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 1
+Address: 0x00007fbf430202c0
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 3
+Address: 0x00007fbf4302b508
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 5
+Address: 0x00007fbf42af5790
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 0
+Address: 0x00007fbf430202f8
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 78036789
+Index: 2
+Address: 0x00007fbf4302b610
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 4
+Address: 0x00007fbf42af5860
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 3
+Address: 0x00007fbf43020250
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 7
+Address: 0x00007fbf42af5610
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 2
+Address: 0x00007fbf43020288
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 6
+Address: 0x00007fbf42af56a8
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 5
+Address: 0x00007fbf430201e0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 4
+Address: 0x00007fbf43020218
+Refc: 1
+=fun
+Module: inet_tcp_dist
+Uniq: 55449449
+Index: 8
+Address: 0x00007fbf42af55b0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 7
+Address: 0x00007fbf43020170
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 6
+Address: 0x00007fbf430201a8
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 9
+Address: 0x00007fbf4301fe90
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 8
+Address: 0x00007fbf43020138
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 11
+Address: 0x00007fbf4301f2d0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 10
+Address: 0x00007fbf4301fb98
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 13
+Address: 0x00007fbf4301ead0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 12
+Address: 0x00007fbf4301f198
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 15
+Address: 0x00007fbf4301e958
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 86021952
+Index: 14
+Address: 0x00007fbf4301e990
+Refc: 1
+=fun
+Module: erlang
+Uniq: 23316051
+Index: 0
+Address: 0x00007fbf48c58718
+Refc: 1
+=proc_messages:<0.0.0>
+H7FBF42D6FA10:N
+=proc_stack:<0.0.0>
+0x00007fbf42d77148:SReturn addr 0x48BD6438 (init:boot_loop/2 + 3688)
+0x00007fbf42d77150:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+y1:H7FBF42D6F9B8
+y2:P<0.2.0>
+=proc_heap:<0.0.0>
+7FBF42D6F9B8:tA:A5:state,H7FBF42D41098,N,N,H7FBF42D410A8,P<0.2.0>,H7FBF42D410B8,H7FBF42D410D0,H7FBF42D6FA50,N
+7FBF42D6FA50:lH7FBF42D6FA88|H7FBF42D6FAA0
+7FBF42D6FA88:t2:A8:erl_scan,H7FBF42D6FAF0
+7FBF42D6FAF0:lI47|H7FBF42D6FB58
+7FBF42D6FB58:lI117|H7FBF42D6FBD0
+7FBF42D6FBD0:lI115|H7FBF42D6FC70
+7FBF42D6FC70:lI114|H7FBF42D6FCE8
+7FBF42D6FCE8:lI47|H7FBF42D6FD58
+7FBF42D6FD58:lI108|H7FBF42D6FDC8
+7FBF42D6FDC8:lI105|H7FBF42D6FE38
+7FBF42D6FE38:lI98|H7FBF42D6FEA8
+7FBF42D6FEA8:lI47|H7FBF42D6FF18
+7FBF42D6FF18:lI101|H7FBF42D6FF88
+7FBF42D6FF88:lI114|H7FBF42D6FFF8
+7FBF42D6FFF8:lI108|H7FBF42D70068
+7FBF42D70068:lI97|H7FBF42D700D8
+7FBF42D700D8:lI110|H7FBF42D70148
+7FBF42D70148:lI103|H7FBF42D701B8
+7FBF42D701B8:lI47|H7FBF42D70228
+7FBF42D70228:lI108|H7FBF42D70298
+7FBF42D70298:lI105|H7FBF42D70308
+7FBF42D70308:lI98|H7FBF42D70368
+7FBF42D70368:lI47|H7FBF42D703C8
+7FBF42D703C8:lI115|H7FBF42D70428
+7FBF42D70428:lI116|H7FBF42D70488
+7FBF42D70488:lI100|H7FBF42D704E8
+7FBF42D704E8:lI108|H7FBF42D70548
+7FBF42D70548:lI105|H7FBF42D705A8
+7FBF42D705A8:lI98|H7FBF42D70608
+7FBF42D70608:lI45|H7FBF42D70668
+7FBF42D70668:lI50|H7FBF42D706C8
+7FBF42D706C8:lI46|H7FBF42D70728
+7FBF42D70728:lI56|H7FBF42D70788
+7FBF42D70788:lI47|H7FBF42D707E8
+7FBF42D707E8:lI101|H7FBF42D70848
+7FBF42D70848:lI98|H7FBF42D708A8
+7FBF42D708A8:lI105|H7FBF42D70908
+7FBF42D70908:lI110|H7FBF42D70968
+7FBF42D70968:lI47|H7FBF42D709C8
+7FBF42D709C8:lI101|H7FBF42D70A28
+7FBF42D70A28:lI114|H7FBF42D70A88
+7FBF42D70A88:lI108|H7FBF42D70AE8
+7FBF42D70AE8:lI95|H7FBF42D70B48
+7FBF42D70B48:lI115|H7FBF42D70BA8
+7FBF42D70BA8:lI99|H7FBF42D70C08
+7FBF42D70C08:lI97|H7FBF42D70C68
+7FBF42D70C68:lI110|H7FBF42D70CC8
+7FBF42D70CC8:lI46|H7FBF42D70D28
+7FBF42D70D28:lI98|H7FBF42D70D78
+7FBF42D70D78:lI101|H7FBF42D70DC8
+7FBF42D70DC8:lI97|H7FBF42D70E18
+7FBF42D70E18:lI109|N
+7FBF42D6FAA0:lH7FBF42D6FB00|H7FBF42D6FB18
+7FBF42D6FB00:t2:A3:epp,H7FBF42D6FB68
+7FBF42D6FB68:lI47|H7FBF42D6FBE0
+7FBF42D6FBE0:lI117|H7FBF42D6FC80
+7FBF42D6FC80:lI115|H7FBF42D6FCF8
+7FBF42D6FCF8:lI114|H7FBF42D6FD68
+7FBF42D6FD68:lI47|H7FBF42D6FDD8
+7FBF42D6FDD8:lI108|H7FBF42D6FE48
+7FBF42D6FE48:lI105|H7FBF42D6FEB8
+7FBF42D6FEB8:lI98|H7FBF42D6FF28
+7FBF42D6FF28:lI47|H7FBF42D6FF98
+7FBF42D6FF98:lI101|H7FBF42D70008
+7FBF42D70008:lI114|H7FBF42D70078
+7FBF42D70078:lI108|H7FBF42D700E8
+7FBF42D700E8:lI97|H7FBF42D70158
+7FBF42D70158:lI110|H7FBF42D701C8
+7FBF42D701C8:lI103|H7FBF42D70238
+7FBF42D70238:lI47|H7FBF42D702A8
+7FBF42D702A8:lI108|H7FBF42D70318
+7FBF42D70318:lI105|H7FBF42D70378
+7FBF42D70378:lI98|H7FBF42D703D8
+7FBF42D703D8:lI47|H7FBF42D70438
+7FBF42D70438:lI115|H7FBF42D70498
+7FBF42D70498:lI116|H7FBF42D704F8
+7FBF42D704F8:lI100|H7FBF42D70558
+7FBF42D70558:lI108|H7FBF42D705B8
+7FBF42D705B8:lI105|H7FBF42D70618
+7FBF42D70618:lI98|H7FBF42D70678
+7FBF42D70678:lI45|H7FBF42D706D8
+7FBF42D706D8:lI50|H7FBF42D70738
+7FBF42D70738:lI46|H7FBF42D70798
+7FBF42D70798:lI56|H7FBF42D707F8
+7FBF42D707F8:lI47|H7FBF42D70858
+7FBF42D70858:lI101|H7FBF42D708B8
+7FBF42D708B8:lI98|H7FBF42D70918
+7FBF42D70918:lI105|H7FBF42D70978
+7FBF42D70978:lI110|H7FBF42D709D8
+7FBF42D709D8:lI47|H7FBF42D70A38
+7FBF42D70A38:lI101|H7FBF42D70A98
+7FBF42D70A98:lI112|H7FBF42D70AF8
+7FBF42D70AF8:lI112|H7FBF42D70B58
+7FBF42D70B58:lI46|H7FBF42D70BB8
+7FBF42D70BB8:lI98|H7FBF42D70C18
+7FBF42D70C18:lI101|H7FBF42D70C78
+7FBF42D70C78:lI97|H7FBF42D70CD8
+7FBF42D70CD8:lI109|N
+7FBF42D6FB18:lH7FBF42D6FB78|H7FBF42D6FB90
+7FBF42D6FB78:t2:AD:io_lib_pretty,H7FBF42D6FBF0
+7FBF42D6FBF0:lI47|H7FBF42D6FC90
+7FBF42D6FC90:lI117|H7FBF42D6FD08
+7FBF42D6FD08:lI115|H7FBF42D6FD78
+7FBF42D6FD78:lI114|H7FBF42D6FDE8
+7FBF42D6FDE8:lI47|H7FBF42D6FE58
+7FBF42D6FE58:lI108|H7FBF42D6FEC8
+7FBF42D6FEC8:lI105|H7FBF42D6FF38
+7FBF42D6FF38:lI98|H7FBF42D6FFA8
+7FBF42D6FFA8:lI47|H7FBF42D70018
+7FBF42D70018:lI101|H7FBF42D70088
+7FBF42D70088:lI114|H7FBF42D700F8
+7FBF42D700F8:lI108|H7FBF42D70168
+7FBF42D70168:lI97|H7FBF42D701D8
+7FBF42D701D8:lI110|H7FBF42D70248
+7FBF42D70248:lI103|H7FBF42D702B8
+7FBF42D702B8:lI47|H7FBF42D70328
+7FBF42D70328:lI108|H7FBF42D70388
+7FBF42D70388:lI105|H7FBF42D703E8
+7FBF42D703E8:lI98|H7FBF42D70448
+7FBF42D70448:lI47|H7FBF42D704A8
+7FBF42D704A8:lI115|H7FBF42D70508
+7FBF42D70508:lI116|H7FBF42D70568
+7FBF42D70568:lI100|H7FBF42D705C8
+7FBF42D705C8:lI108|H7FBF42D70628
+7FBF42D70628:lI105|H7FBF42D70688
+7FBF42D70688:lI98|H7FBF42D706E8
+7FBF42D706E8:lI45|H7FBF42D70748
+7FBF42D70748:lI50|H7FBF42D707A8
+7FBF42D707A8:lI46|H7FBF42D70808
+7FBF42D70808:lI56|H7FBF42D70868
+7FBF42D70868:lI47|H7FBF42D708C8
+7FBF42D708C8:lI101|H7FBF42D70928
+7FBF42D70928:lI98|H7FBF42D70988
+7FBF42D70988:lI105|H7FBF42D709E8
+7FBF42D709E8:lI110|H7FBF42D70A48
+7FBF42D70A48:lI47|H7FBF42D70AA8
+7FBF42D70AA8:lI105|H7FBF42D70B08
+7FBF42D70B08:lI111|H7FBF42D70B68
+7FBF42D70B68:lI95|H7FBF42D70BC8
+7FBF42D70BC8:lI108|H7FBF42D70C28
+7FBF42D70C28:lI105|H7FBF42D70C88
+7FBF42D70C88:lI98|H7FBF42D70CE8
+7FBF42D70CE8:lI95|H7FBF42D70D38
+7FBF42D70D38:lI112|H7FBF42D70D88
+7FBF42D70D88:lI114|H7FBF42D70DD8
+7FBF42D70DD8:lI101|H7FBF42D70E28
+7FBF42D70E28:lI116|H7FBF42D70E68
+7FBF42D70E68:lI116|H7FBF42D70EA8
+7FBF42D70EA8:lI121|H7FBF42D70EE8
+7FBF42D70EE8:lI46|H7FBF42D70F18
+7FBF42D70F18:lI98|H7FBF42D70F48
+7FBF42D70F48:lI101|H7FBF42D70F78
+7FBF42D70F78:lI97|H7FBF42D70FA8
+7FBF42D70FA8:lI109|N
+7FBF42D6FB90:lH7FBF42D6FC00|H7FBF42D6FC18
+7FBF42D6FC00:t2:AD:io_lib_format,H7FBF42D6FCA0
+7FBF42D6FCA0:lI47|H7FBF42D6FD18
+7FBF42D6FD18:lI117|H7FBF42D6FD88
+7FBF42D6FD88:lI115|H7FBF42D6FDF8
+7FBF42D6FDF8:lI114|H7FBF42D6FE68
+7FBF42D6FE68:lI47|H7FBF42D6FED8
+7FBF42D6FED8:lI108|H7FBF42D6FF48
+7FBF42D6FF48:lI105|H7FBF42D6FFB8
+7FBF42D6FFB8:lI98|H7FBF42D70028
+7FBF42D70028:lI47|H7FBF42D70098
+7FBF42D70098:lI101|H7FBF42D70108
+7FBF42D70108:lI114|H7FBF42D70178
+7FBF42D70178:lI108|H7FBF42D701E8
+7FBF42D701E8:lI97|H7FBF42D70258
+7FBF42D70258:lI110|H7FBF42D702C8
+7FBF42D702C8:lI103|H7FBF42D70338
+7FBF42D70338:lI47|H7FBF42D70398
+7FBF42D70398:lI108|H7FBF42D703F8
+7FBF42D703F8:lI105|H7FBF42D70458
+7FBF42D70458:lI98|H7FBF42D704B8
+7FBF42D704B8:lI47|H7FBF42D70518
+7FBF42D70518:lI115|H7FBF42D70578
+7FBF42D70578:lI116|H7FBF42D705D8
+7FBF42D705D8:lI100|H7FBF42D70638
+7FBF42D70638:lI108|H7FBF42D70698
+7FBF42D70698:lI105|H7FBF42D706F8
+7FBF42D706F8:lI98|H7FBF42D70758
+7FBF42D70758:lI45|H7FBF42D707B8
+7FBF42D707B8:lI50|H7FBF42D70818
+7FBF42D70818:lI46|H7FBF42D70878
+7FBF42D70878:lI56|H7FBF42D708D8
+7FBF42D708D8:lI47|H7FBF42D70938
+7FBF42D70938:lI101|H7FBF42D70998
+7FBF42D70998:lI98|H7FBF42D709F8
+7FBF42D709F8:lI105|H7FBF42D70A58
+7FBF42D70A58:lI110|H7FBF42D70AB8
+7FBF42D70AB8:lI47|H7FBF42D70B18
+7FBF42D70B18:lI105|H7FBF42D70B78
+7FBF42D70B78:lI111|H7FBF42D70BD8
+7FBF42D70BD8:lI95|H7FBF42D70C38
+7FBF42D70C38:lI108|H7FBF42D70C98
+7FBF42D70C98:lI105|H7FBF42D70CF8
+7FBF42D70CF8:lI98|H7FBF42D70D48
+7FBF42D70D48:lI95|H7FBF42D70D98
+7FBF42D70D98:lI102|H7FBF42D70DE8
+7FBF42D70DE8:lI111|H7FBF42D70E38
+7FBF42D70E38:lI114|H7FBF42D70E78
+7FBF42D70E78:lI109|H7FBF42D70EB8
+7FBF42D70EB8:lI97|H7FBF42D70EF8
+7FBF42D70EF8:lI116|H7FBF42D70F28
+7FBF42D70F28:lI46|H7FBF42D70F58
+7FBF42D70F58:lI98|H7FBF42D70F88
+7FBF42D70F88:lI101|H7FBF42D70FB8
+7FBF42D70FB8:lI97|H7FBF42D70FD8
+7FBF42D70FD8:lI109|N
+7FBF42D6FC18:lH7FBF42D6FCB0|N
+7FBF42D6FCB0:t2:A6:io_lib,H7FBF42D6FD28
+7FBF42D6FD28:lI47|H7FBF42D6FD98
+7FBF42D6FD98:lI117|H7FBF42D6FE08
+7FBF42D6FE08:lI115|H7FBF42D6FE78
+7FBF42D6FE78:lI114|H7FBF42D6FEE8
+7FBF42D6FEE8:lI47|H7FBF42D6FF58
+7FBF42D6FF58:lI108|H7FBF42D6FFC8
+7FBF42D6FFC8:lI105|H7FBF42D70038
+7FBF42D70038:lI98|H7FBF42D700A8
+7FBF42D700A8:lI47|H7FBF42D70118
+7FBF42D70118:lI101|H7FBF42D70188
+7FBF42D70188:lI114|H7FBF42D701F8
+7FBF42D701F8:lI108|H7FBF42D70268
+7FBF42D70268:lI97|H7FBF42D702D8
+7FBF42D702D8:lI110|H7FBF42D70348
+7FBF42D70348:lI103|H7FBF42D703A8
+7FBF42D703A8:lI47|H7FBF42D70408
+7FBF42D70408:lI108|H7FBF42D70468
+7FBF42D70468:lI105|H7FBF42D704C8
+7FBF42D704C8:lI98|H7FBF42D70528
+7FBF42D70528:lI47|H7FBF42D70588
+7FBF42D70588:lI115|H7FBF42D705E8
+7FBF42D705E8:lI116|H7FBF42D70648
+7FBF42D70648:lI100|H7FBF42D706A8
+7FBF42D706A8:lI108|H7FBF42D70708
+7FBF42D70708:lI105|H7FBF42D70768
+7FBF42D70768:lI98|H7FBF42D707C8
+7FBF42D707C8:lI45|H7FBF42D70828
+7FBF42D70828:lI50|H7FBF42D70888
+7FBF42D70888:lI46|H7FBF42D708E8
+7FBF42D708E8:lI56|H7FBF42D70948
+7FBF42D70948:lI47|H7FBF42D709A8
+7FBF42D709A8:lI101|H7FBF42D70A08
+7FBF42D70A08:lI98|H7FBF42D70A68
+7FBF42D70A68:lI105|H7FBF42D70AC8
+7FBF42D70AC8:lI110|H7FBF42D70B28
+7FBF42D70B28:lI47|H7FBF42D70B88
+7FBF42D70B88:lI105|H7FBF42D70BE8
+7FBF42D70BE8:lI111|H7FBF42D70C48
+7FBF42D70C48:lI95|H7FBF42D70CA8
+7FBF42D70CA8:lI108|H7FBF42D70D08
+7FBF42D70D08:lI105|H7FBF42D70D58
+7FBF42D70D58:lI98|H7FBF42D70DA8
+7FBF42D70DA8:lI46|H7FBF42D70DF8
+7FBF42D70DF8:lI98|H7FBF42D70E48
+7FBF42D70E48:lI101|H7FBF42D70E88
+7FBF42D70E88:lI97|H7FBF42D70EC8
+7FBF42D70EC8:lI109|N
+7FBF42D410D0:t2:H7FBF42D41170,H7FBF42D41180
+7FBF42D41180:lI49|H7FBF42D41248
+7FBF42D41248:lI56|N
+7FBF42D41170:lI69|H7FBF42D41238
+7FBF42D41238:lI114|H7FBF42D41310
+7FBF42D41310:lI108|H7FBF42D413B8
+7FBF42D413B8:lI97|H7FBF42D413F8
+7FBF42D413F8:lI110|H7FBF42D41408
+7FBF42D41408:lI103|H7FBF42D41418
+7FBF42D41418:lI47|H7FBF42D41428
+7FBF42D41428:lI79|H7FBF42D41438
+7FBF42D41438:lI84|H7FBF42D41448
+7FBF42D41448:lI80|N
+7FBF42D410B8:t2:A8:starting,A13:applications_loaded
+7FBF42D410A8:lH7FBF42D41148|H7FBF42D41160
+7FBF42D41148:t2:A16:application_controller,P<0.7.0>
+7FBF42D41160:lH7FBF42D41210|H7FBF42D41228
+7FBF42D41210:t2:AC:error_logger,P<0.6.0>
+7FBF42D41228:lH7FBF42D412F8|N
+7FBF42D412F8:t2:AF:erl_prim_loader,P<0.3.0>
+7FBF42D41098:lH7FBF42D41120|H7FBF42D41138
+7FBF42D41120:t2:A5:-root,H7FBF42D411D8
+7FBF42D411D8:lH7FBF42D412A0|N
+7FBF42D412A0:YhF:2F7573722F6C69622F65726C616E67
+7FBF42D41138:lH7FBF42D411E8|H7FBF42D41200
+7FBF42D411E8:t2:A9:-progname,H7FBF42D412C0
+7FBF42D412C0:lH7FBF42D41378|N
+7FBF42D41378:Yh3:65726C
+7FBF42D41200:lH7FBF42D412D0|H7FBF42D412E8
+7FBF42D412D0:t2:A5:-home,H7FBF42D41390
+7FBF42D41390:lH7FBF42D413C8|N
+7FBF42D413C8:Yh9:2F686F6D652F62736B
+7FBF42D412E8:lH7FBF42D413A0|H7FBF42D41008
+7FBF42D413A0:t2:A5:-name,H7FBF42D413E8
+7FBF42D413E8:lH7FBF42D40FC0|N
+7FBF42D40FC0:Yh32:30303936656537372D316635302D343865322D613038612D343235333661373534393730403139322E3136382E312E313234
+7FBF42D41008:lH7FBF42D41070|H7FBF42D41088
+7FBF42D41070:t2:AA:-setcookie,H7FBF42D410E8
+7FBF42D410E8:lH7FBF42D41190|N
+7FBF42D41190:Yh4:31323334
+7FBF42D41088:lH7FBF42D410F8|H7FBF42D41110
+7FBF42D410F8:t2:A7:-mnesia,H7FBF42D411A8
+7FBF42D411A8:lH7FBF42D41258|H7FBF42D41270
+7FBF42D41258:Yh3:646972
+7FBF42D41270:lH7FBF42D41320|N
+7FBF42D41320:Yh32:222F6F70742F65726C616E672F30303936656537372D316635302D343865322D613038612D34323533366137353439373022
+7FBF42D41110:lH7FBF42D411B8|H7FBF42D411C8
+7FBF42D411B8:t1:A8:-noshell
+7FBF42D411C8:lH7FBF42D41280|H7FBF42D41290
+7FBF42D41280:t1:A8:-noinput
+7FBF42D41290:lH7FBF42D41368|N
+7FBF42D41368:t1:A8:-noshell
+7FBF42D6FA10:t3:A4:EXIT,P<0.2.0>,H7FBF42D6FA60
+7FBF42D6FA60:t2:H7FBF42D6FAB0,H7FBF42D6FAC0
+7FBF42D6FAC0:t3:AA:gen_server,A4:call,H7FBF42D6FB38
+7FBF42D6FB38:lA16:application_controller|H7FBF42D6FBB0
+7FBF42D6FBB0:lH7FBF42D6FC38|H7FBF42D6FC50
+7FBF42D6FC38:t2:A10:load_application,A6:stdlib
+7FBF42D6FC50:lA8:infinity|N
+7FBF42D6FAB0:lI123|H7FBF42D6FB28
+7FBF42D6FB28:lI97|H7FBF42D6FBA0
+7FBF42D6FBA0:lI112|H7FBF42D6FC28
+7FBF42D6FC28:lI112|H7FBF42D6FCC8
+7FBF42D6FCC8:lI108|H7FBF42D6FD38
+7FBF42D6FD38:lI105|H7FBF42D6FDA8
+7FBF42D6FDA8:lI99|H7FBF42D6FE18
+7FBF42D6FE18:lI97|H7FBF42D6FE88
+7FBF42D6FE88:lI116|H7FBF42D6FEF8
+7FBF42D6FEF8:lI105|H7FBF42D6FF68
+7FBF42D6FF68:lI111|H7FBF42D6FFD8
+7FBF42D6FFD8:lI110|H7FBF42D70048
+7FBF42D70048:lI95|H7FBF42D700B8
+7FBF42D700B8:lI115|H7FBF42D70128
+7FBF42D70128:lI116|H7FBF42D70198
+7FBF42D70198:lI97|H7FBF42D70208
+7FBF42D70208:lI114|H7FBF42D70278
+7FBF42D70278:lI116|H7FBF42D702E8
+7FBF42D702E8:lI95|H7FBF42D70358
+7FBF42D70358:lI102|H7FBF42D703B8
+7FBF42D703B8:lI97|H7FBF42D70418
+7FBF42D70418:lI105|H7FBF42D70478
+7FBF42D70478:lI108|H7FBF42D704D8
+7FBF42D704D8:lI117|H7FBF42D70538
+7FBF42D70538:lI114|H7FBF42D70598
+7FBF42D70598:lI101|H7FBF42D705F8
+7FBF42D705F8:lI44|H7FBF42D70658
+7FBF42D70658:lI107|H7FBF42D706B8
+7FBF42D706B8:lI101|H7FBF42D70718
+7FBF42D70718:lI114|H7FBF42D70778
+7FBF42D70778:lI110|H7FBF42D707D8
+7FBF42D707D8:lI101|H7FBF42D70838
+7FBF42D70838:lI108|H7FBF42D70898
+7FBF42D70898:lI44|H7FBF42D708F8
+7FBF42D708F8:lI123|H7FBF42D70958
+7FBF42D70958:lI123|H7FBF42D709B8
+7FBF42D709B8:lI115|H7FBF42D70A18
+7FBF42D70A18:lI104|H7FBF42D70A78
+7FBF42D70A78:lI117|H7FBF42D70AD8
+7FBF42D70AD8:lI116|H7FBF42D70B38
+7FBF42D70B38:lI100|H7FBF42D70B98
+7FBF42D70B98:lI111|H7FBF42D70BF8
+7FBF42D70BF8:lI119|H7FBF42D70C58
+7FBF42D70C58:lI110|H7FBF42D70CB8
+7FBF42D70CB8:lI44|H7FBF42D70D18
+7FBF42D70D18:lI123|H7FBF42D70D68
+7FBF42D70D68:lI102|H7FBF42D70DB8
+7FBF42D70DB8:lI97|H7FBF42D70E08
+7FBF42D70E08:lI105|H7FBF42D70E58
+7FBF42D70E58:lI108|H7FBF42D70E98
+7FBF42D70E98:lI101|H7FBF42D70ED8
+7FBF42D70ED8:lI100|H7FBF42D70F08
+7FBF42D70F08:lI95|H7FBF42D70F38
+7FBF42D70F38:lI116|H7FBF42D70F68
+7FBF42D70F68:lI111|H7FBF42D70F98
+7FBF42D70F98:lI95|H7FBF42D70FC8
+7FBF42D70FC8:lI115|H7FBF42D70FE8
+7FBF42D70FE8:lI116|H7FBF42D70FF8
+7FBF42D70FF8:lI97|H7FBF42D71008
+7FBF42D71008:lI114|H7FBF42D71018
+7FBF42D71018:lI116|H7FBF42D71028
+7FBF42D71028:lI95|H7FBF42D71038
+7FBF42D71038:lI99|H7FBF42D71048
+7FBF42D71048:lI104|H7FBF42D71058
+7FBF42D71058:lI105|H7FBF42D71068
+7FBF42D71068:lI108|H7FBF42D71078
+7FBF42D71078:lI100|H7FBF42D71088
+7FBF42D71088:lI44|H7FBF42D71098
+7FBF42D71098:lI110|H7FBF42D710A8
+7FBF42D710A8:lI101|H7FBF42D710B8
+7FBF42D710B8:lI116|H7FBF42D710C8
+7FBF42D710C8:lI95|H7FBF42D710D8
+7FBF42D710D8:lI115|H7FBF42D710E8
+7FBF42D710E8:lI117|H7FBF42D710F8
+7FBF42D710F8:lI112|H7FBF42D71108
+7FBF42D71108:lI44|H7FBF42D71118
+7FBF42D71118:lI123|H7FBF42D71128
+7FBF42D71128:lI115|H7FBF42D71138
+7FBF42D71138:lI104|H7FBF42D71148
+7FBF42D71148:lI117|H7FBF42D71158
+7FBF42D71158:lI116|H7FBF42D71168
+7FBF42D71168:lI100|H7FBF42D71178
+7FBF42D71178:lI111|H7FBF42D71188
+7FBF42D71188:lI119|H7FBF42D71198
+7FBF42D71198:lI110|H7FBF42D711A8
+7FBF42D711A8:lI44|H7FBF42D711B8
+7FBF42D711B8:lI123|H7FBF42D711C8
+7FBF42D711C8:lI102|H7FBF42D711D8
+7FBF42D711D8:lI97|H7FBF42D711E8
+7FBF42D711E8:lI105|H7FBF42D711F8
+7FBF42D711F8:lI108|H7FBF42D71208
+7FBF42D71208:lI101|H7FBF42D71218
+7FBF42D71218:lI100|H7FBF42D71228
+7FBF42D71228:lI95|H7FBF42D71238
+7FBF42D71238:lI116|H7FBF42D71248
+7FBF42D71248:lI111|H7FBF42D71258
+7FBF42D71258:lI95|H7FBF42D71268
+7FBF42D71268:lI115|H7FBF42D71278
+7FBF42D71278:lI116|H7FBF42D71288
+7FBF42D71288:lI97|H7FBF42D71298
+7FBF42D71298:lI114|H7FBF42D712A8
+7FBF42D712A8:lI116|H7FBF42D712B8
+7FBF42D712B8:lI95|H7FBF42D712C8
+7FBF42D712C8:lI99|H7FBF42D712D8
+7FBF42D712D8:lI104|H7FBF42D712E8
+7FBF42D712E8:lI105|H7FBF42D712F8
+7FBF42D712F8:lI108|H7FBF42D71308
+7FBF42D71308:lI100|H7FBF42D71318
+7FBF42D71318:lI44|H7FBF42D71328
+7FBF42D71328:lI110|H7FBF42D71338
+7FBF42D71338:lI101|H7FBF42D71348
+7FBF42D71348:lI116|H7FBF42D71358
+7FBF42D71358:lI95|H7FBF42D71368
+7FBF42D71368:lI107|H7FBF42D71378
+7FBF42D71378:lI101|H7FBF42D71388
+7FBF42D71388:lI114|H7FBF42D71398
+7FBF42D71398:lI110|H7FBF42D713A8
+7FBF42D713A8:lI101|H7FBF42D713B8
+7FBF42D713B8:lI108|H7FBF42D713C8
+7FBF42D713C8:lI44|H7FBF42D713D8
+7FBF42D713D8:lI123|H7FBF42D713E8
+7FBF42D713E8:lI39|H7FBF42D713F8
+7FBF42D713F8:lI69|H7FBF42D71408
+7FBF42D71408:lI88|H7FBF42D71418
+7FBF42D71418:lI73|H7FBF42D71428
+7FBF42D71428:lI84|H7FBF42D71438
+7FBF42D71438:lI39|H7FBF42D71448
+7FBF42D71448:lI44|H7FBF42D71458
+7FBF42D71458:lI110|H7FBF42D71468
+7FBF42D71468:lI111|H7FBF42D71478
+7FBF42D71478:lI100|H7FBF42D71488
+7FBF42D71488:lI105|H7FBF42D71498
+7FBF42D71498:lI115|H7FBF42D714A8
+7FBF42D714A8:lI116|H7FBF42D714B8
+7FBF42D714B8:lI114|H7FBF42D714C8
+7FBF42D714C8:lI105|H7FBF42D714D8
+7FBF42D714D8:lI98|H7FBF42D714E8
+7FBF42D714E8:lI117|H7FBF42D714F8
+7FBF42D714F8:lI116|H7FBF42D71508
+7FBF42D71508:lI105|H7FBF42D71518
+7FBF42D71518:lI111|H7FBF42D71528
+7FBF42D71528:lI110|H7FBF42D71538
+7FBF42D71538:lI125|H7FBF42D71548
+7FBF42D71548:lI125|H7FBF42D71558
+7FBF42D71558:lI125|H7FBF42D71568
+7FBF42D71568:lI125|H7FBF42D71578
+7FBF42D71578:lI125|H7FBF42D71588
+7FBF42D71588:lI44|H7FBF42D71598
+7FBF42D71598:lI123|H7FBF42D715A8
+7FBF42D715A8:lI107|H7FBF42D715B8
+7FBF42D715B8:lI101|H7FBF42D715C8
+7FBF42D715C8:lI114|H7FBF42D715D8
+7FBF42D715D8:lI110|H7FBF42D715E8
+7FBF42D715E8:lI101|H7FBF42D715F8
+7FBF42D715F8:lI108|H7FBF42D71608
+7FBF42D71608:lI44|H7FBF42D71618
+7FBF42D71618:lI115|H7FBF42D71628
+7FBF42D71628:lI116|H7FBF42D71638
+7FBF42D71638:lI97|H7FBF42D71648
+7FBF42D71648:lI114|H7FBF42D71658
+7FBF42D71658:lI116|H7FBF42D71668
+7FBF42D71668:lI44|H7FBF42D71678
+7FBF42D71678:lI91|H7FBF42D71688
+7FBF42D71688:lI110|H7FBF42D71698
+7FBF42D71698:lI111|H7FBF42D716A8
+7FBF42D716A8:lI114|H7FBF42D716B8
+7FBF42D716B8:lI109|H7FBF42D716C8
+7FBF42D716C8:lI97|H7FBF42D716D8
+7FBF42D716D8:lI108|H7FBF42D716E8
+7FBF42D716E8:lI44|H7FBF42D716F8
+7FBF42D716F8:lI91|H7FBF42D71708
+7FBF42D71708:lI93|H7FBF42D71718
+7FBF42D71718:lI93|H7FBF42D71728
+7FBF42D71728:lI125|H7FBF42D71738
+7FBF42D71738:lI125|H7FBF42D71748
+7FBF42D71748:lI125|N
+=proc_stack:<0.1.0>
+0x00007fbf511c07e0:SReturn addr 0x894628 (<terminate process normally>)
+y0:A5:false
+y1:N
+=proc_heap:<0.1.0>
+=proc_stack:<0.3.0>
+0x00007fbf42dbe118:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+y1:H7FBF42D59858
+y2:P<0.2.0>
+y3:H7FBF42DBB260
+y4:A8:infinity
+=proc_heap:<0.3.0>
+7FBF42D59858:lH7FBF42D59868|H7FBF42D59878
+7FBF42D59868:lI47|H7FBF42D59888
+7FBF42D59888:lI117|H7FBF42D598A8
+7FBF42D598A8:lI115|H7FBF42D598C8
+7FBF42D598C8:lI114|H7FBF42D598E8
+7FBF42D598E8:lI47|H7FBF42D59908
+7FBF42D59908:lI108|H7FBF42D59928
+7FBF42D59928:lI105|H7FBF42D59948
+7FBF42D59948:lI98|H7FBF42D59968
+7FBF42D59968:lI47|H7FBF42D59988
+7FBF42D59988:lI101|H7FBF42D599A8
+7FBF42D599A8:lI114|H7FBF42D599C8
+7FBF42D599C8:lI108|H7FBF42D599E8
+7FBF42D599E8:lI97|H7FBF42D59A08
+7FBF42D59A08:lI110|H7FBF42D59A28
+7FBF42D59A28:lI103|H7FBF42D59A48
+7FBF42D59A48:lI47|H7FBF42D59A68
+7FBF42D59A68:lI108|H7FBF42D59A88
+7FBF42D59A88:lI105|H7FBF42D59AA8
+7FBF42D59AA8:lI98|H7FBF42D59AC8
+7FBF42D59AC8:lI47|H7FBF42D59AE8
+7FBF42D59AE8:lI107|H7FBF42D59B08
+7FBF42D59B08:lI101|H7FBF42D59B28
+7FBF42D59B28:lI114|H7FBF42D59B48
+7FBF42D59B48:lI110|H7FBF42D59B68
+7FBF42D59B68:lI101|H7FBF42D59B88
+7FBF42D59B88:lI108|H7FBF42D59BA8
+7FBF42D59BA8:lI45|H7FBF42D59BC8
+7FBF42D59BC8:lI52|H7FBF42D59BE8
+7FBF42D59BE8:lI46|H7FBF42D59C08
+7FBF42D59C08:lI50|H7FBF42D59C28
+7FBF42D59C28:lI47|H7FBF42D59C48
+7FBF42D59C48:lI101|H7FBF42D59C68
+7FBF42D59C68:lI98|H7FBF42D59C88
+7FBF42D59C88:lI105|H7FBF42D59CA8
+7FBF42D59CA8:lI110|N
+7FBF42D59878:lH7FBF42D59898|N
+7FBF42D59898:lI47|H7FBF42D598B8
+7FBF42D598B8:lI117|H7FBF42D598D8
+7FBF42D598D8:lI115|H7FBF42D598F8
+7FBF42D598F8:lI114|H7FBF42D59918
+7FBF42D59918:lI47|H7FBF42D59938
+7FBF42D59938:lI108|H7FBF42D59958
+7FBF42D59958:lI105|H7FBF42D59978
+7FBF42D59978:lI98|H7FBF42D59998
+7FBF42D59998:lI47|H7FBF42D599B8
+7FBF42D599B8:lI101|H7FBF42D599D8
+7FBF42D599D8:lI114|H7FBF42D599F8
+7FBF42D599F8:lI108|H7FBF42D59A18
+7FBF42D59A18:lI97|H7FBF42D59A38
+7FBF42D59A38:lI110|H7FBF42D59A58
+7FBF42D59A58:lI103|H7FBF42D59A78
+7FBF42D59A78:lI47|H7FBF42D59A98
+7FBF42D59A98:lI108|H7FBF42D59AB8
+7FBF42D59AB8:lI105|H7FBF42D59AD8
+7FBF42D59AD8:lI98|H7FBF42D59AF8
+7FBF42D59AF8:lI47|H7FBF42D59B18
+7FBF42D59B18:lI115|H7FBF42D59B38
+7FBF42D59B38:lI116|H7FBF42D59B58
+7FBF42D59B58:lI100|H7FBF42D59B78
+7FBF42D59B78:lI108|H7FBF42D59B98
+7FBF42D59B98:lI105|H7FBF42D59BB8
+7FBF42D59BB8:lI98|H7FBF42D59BD8
+7FBF42D59BD8:lI45|H7FBF42D59BF8
+7FBF42D59BF8:lI50|H7FBF42D59C18
+7FBF42D59C18:lI46|H7FBF42D59C38
+7FBF42D59C38:lI56|H7FBF42D59C58
+7FBF42D59C58:lI47|H7FBF42D59C78
+7FBF42D59C78:lI101|H7FBF42D59C98
+7FBF42D59C98:lI98|H7FBF42D59CB8
+7FBF42D59CB8:lI105|H7FBF42D59CC8
+7FBF42D59CC8:lI110|N
+7FBF42DBB260:t9:A5:state,A5:efile,N,A4:none,p<0.0>,A8:infinity,A9:undefined,A4:true,H7FBF42D59830
+7FBF42D59830:t4:AA:prim_state,A5:false,A9:undefined,A9:undefined
+=proc_dictionary:<0.6.0>
+H7FBF42D7F590
+H7FBF42D7F5A8
+=proc_stack:<0.6.0>
+0x00007fbf42d6ee60:SReturn addr 0x514B1318 (proc_lib:init_p_do_apply/3 + 56)
+y0:A5:false
+y1:N
+y2:H7FBF42D6DD58
+y3:AC:error_logger
+y4:P<0.2.0>
+0x00007fbf42d6ee90:SReturn addr 0x894628 (<terminate process normally>)
+y0:SCatch 0x514B1338 (proc_lib:init_p_do_apply/3 + 88)
+=proc_heap:<0.6.0>
+7FBF42D6DD58:lH7FBF42D6DD10|N
+7FBF42D6DD10:t5:A7:handler,AC:error_logger,A5:false,H7FBF42D6DCD8,A5:false
+7FBF42D6DCD8:t3:I4,I0,H7FBF42D6DCC8
+7FBF42D6DCC8:lH7FBF42D6DC88|H7FBF42D6D9C8
+7FBF42D6DC88:t2:H7FBF42D6DC70,H7FBF42D6DA98
+7FBF42D6DA98:t3:AB:info_report,P<0.0.0>,H7FBF42D6DAB8
+7FBF42D6DAB8:t3:P<0.7.0>,A8:std_info,H7FBF42D6DAD8
+7FBF42D6DAD8:lH7FBF42D6DB08|H7FBF42D6DAE8
+7FBF42D6DB08:t2:AB:application,A6:kernel
+7FBF42D6DAE8:lH7FBF42D6DB20|H7FBF42D6DAF8
+7FBF42D6DB20:t2:A6:exited,H7FBF42D6DB50
+7FBF42D6DB50:t2:H7FBF42D6DB68,H7FBF42D6DB80
+7FBF42D6DB80:t3:A6:kernel,A5:start,H7FBF42D6DC20
+7FBF42D6DC20:lA6:normal|H7FBF42D6DC10
+7FBF42D6DC10:lN|N
+7FBF42D6DB68:t2:A8:shutdown,H7FBF42D6DBA0
+7FBF42D6DBA0:t3:A15:failed_to_start_child,A7:net_sup,H7FBF42D6DBC0
+7FBF42D6DBC0:t2:A8:shutdown,H7FBF42D6DBD8
+7FBF42D6DBD8:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6DBF8
+7FBF42D6DBF8:t2:A4:EXIT,AE:nodistribution
+7FBF42D6DAF8:lH7FBF42D6DB38|N
+7FBF42D6DB38:t2:A4:type,A9:permanent
+7FBF42D6DC70:t2:H7FBF42D6DC30,H7FBF42D6DC50
+7FBF42D6DC50:t3:I19,I32,I44
+7FBF42D6DC30:t3:I2018,I11,I26
+7FBF42D6D9C8:lH7FBF42D6D988|H7FBF42D6BD10
+7FBF42D6D988:t2:H7FBF42D6D970,H7FBF42D6D1D8
+7FBF42D6D1D8:t3:AC:error_report,P<0.9.0>,H7FBF42D6D1F8
+7FBF42D6D1F8:t3:P<0.9.0>,AC:crash_report,H7FBF42D6D218
+7FBF42D6D218:lH7FBF42D6D228|H7FBF42D6D920
+7FBF42D6D228:lH7FBF42D6D2F8|H7FBF42D6D238
+7FBF42D6D2F8:t2:AC:initial_call,H7FBF42D6D430
+7FBF42D6D430:t3:A12:application_master,A4:init,H7FBF42D6D8E0
+7FBF42D6D8E0:lAB:Argument__1|H7FBF42D6D8D0
+7FBF42D6D8D0:lAB:Argument__2|H7FBF42D6D8C0
+7FBF42D6D8C0:lAB:Argument__3|H7FBF42D6D8B0
+7FBF42D6D8B0:lAB:Argument__4|N
+7FBF42D6D238:lH7FBF42D6D310|H7FBF42D6D248
+7FBF42D6D310:t2:A3:pid,P<0.9.0>
+7FBF42D6D248:lH7FBF42D6D328|H7FBF42D6D258
+7FBF42D6D328:t2:AF:registered_name,N
+7FBF42D6D258:lH7FBF42D6D340|H7FBF42D6D268
+7FBF42D6D340:t2:AA:error_info,H7FBF42D6D450
+7FBF42D6D450:t3:A4:exit,H7FBF42D6D480,H7FBF42D6D498
+7FBF42D6D498:lH7FBF42D6D510|H7FBF42D6D4A8
+7FBF42D6D510:t4:A12:application_master,A4:init,I4,H7FBF42D6D580
+7FBF42D6D580:lH7FBF42D6D5D8|H7FBF42D6D590
+7FBF42D6D5D8:t2:A4:file,H7FBF42D6D880
+7FBF42D6D880:lI97|H7FBF42D6D870
+7FBF42D6D870:lI112|H7FBF42D6D860
+7FBF42D6D860:lI112|H7FBF42D6D850
+7FBF42D6D850:lI108|H7FBF42D6D840
+7FBF42D6D840:lI105|H7FBF42D6D830
+7FBF42D6D830:lI99|H7FBF42D6D820
+7FBF42D6D820:lI97|H7FBF42D6D810
+7FBF42D6D810:lI116|H7FBF42D6D800
+7FBF42D6D800:lI105|H7FBF42D6D7F0
+7FBF42D6D7F0:lI111|H7FBF42D6D7E0
+7FBF42D6D7E0:lI110|H7FBF42D6D7D0
+7FBF42D6D7D0:lI95|H7FBF42D6D7C0
+7FBF42D6D7C0:lI109|H7FBF42D6D7B0
+7FBF42D6D7B0:lI97|H7FBF42D6D7A0
+7FBF42D6D7A0:lI115|H7FBF42D6D790
+7FBF42D6D790:lI116|H7FBF42D6D780
+7FBF42D6D780:lI101|H7FBF42D6D770
+7FBF42D6D770:lI114|H7FBF42D6D760
+7FBF42D6D760:lI46|H7FBF42D6D750
+7FBF42D6D750:lI101|H7FBF42D6D740
+7FBF42D6D740:lI114|H7FBF42D6D730
+7FBF42D6D730:lI108|N
+7FBF42D6D590:lH7FBF42D6D5F0|N
+7FBF42D6D5F0:t2:A4:line,I134
+7FBF42D6D4A8:lH7FBF42D6D538|N
+7FBF42D6D538:t4:A8:proc_lib,AF:init_p_do_apply,I3,H7FBF42D6D5A0
+7FBF42D6D5A0:lH7FBF42D6D608|H7FBF42D6D5B0
+7FBF42D6D608:t2:A4:file,H7FBF42D6D720
+7FBF42D6D720:lI112|H7FBF42D6D710
+7FBF42D6D710:lI114|H7FBF42D6D700
+7FBF42D6D700:lI111|H7FBF42D6D6F0
+7FBF42D6D6F0:lI99|H7FBF42D6D6E0
+7FBF42D6D6E0:lI95|H7FBF42D6D6D0
+7FBF42D6D6D0:lI108|H7FBF42D6D6C0
+7FBF42D6D6C0:lI105|H7FBF42D6D6B0
+7FBF42D6D6B0:lI98|H7FBF42D6D6A0
+7FBF42D6D6A0:lI46|H7FBF42D6D690
+7FBF42D6D690:lI101|H7FBF42D6D680
+7FBF42D6D680:lI114|H7FBF42D6D670
+7FBF42D6D670:lI108|N
+7FBF42D6D5B0:lH7FBF42D6D620|N
+7FBF42D6D620:t2:A4:line,I240
+7FBF42D6D480:t2:H7FBF42D6D4D8,H7FBF42D6D4F0
+7FBF42D6D4F0:t3:A6:kernel,A5:start,H7FBF42D6D8A0
+7FBF42D6D8A0:lA6:normal|H7FBF42D6D890
+7FBF42D6D890:lN|N
+7FBF42D6D4D8:t2:A8:shutdown,H7FBF42D6D560
+7FBF42D6D560:t3:A15:failed_to_start_child,A7:net_sup,H7FBF42D6D5C0
+7FBF42D6D5C0:t2:A8:shutdown,H7FBF42D6D638
+7FBF42D6D638:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6D658
+7FBF42D6D658:t2:A4:EXIT,AE:nodistribution
+7FBF42D6D268:lH7FBF42D6D358|H7FBF42D6D278
+7FBF42D6D358:t2:A9:ancestors,H7FBF42D6D910
+7FBF42D6D910:lP<0.8.0>|N
+7FBF42D6D278:lH7FBF42D6D370|H7FBF42D6D288
+7FBF42D6D370:t2:A8:messages,H7FBF42D6D470
+7FBF42D6D470:lH7FBF42D6D4B8|N
+7FBF42D6D4B8:t3:A4:EXIT,P<0.10.0>,A6:normal
+7FBF42D6D288:lH7FBF42D6D388|H7FBF42D6D298
+7FBF42D6D388:t2:A5:links,H7FBF42D6D900
+7FBF42D6D900:lP<0.8.0>|H7FBF42D6D8F0
+7FBF42D6D8F0:lP<0.7.0>|N
+7FBF42D6D298:lH7FBF42D6D3A0|H7FBF42D6D2A8
+7FBF42D6D3A0:t2:AA:dictionary,N
+7FBF42D6D2A8:lH7FBF42D6D3B8|H7FBF42D6D2B8
+7FBF42D6D3B8:t2:A9:trap_exit,A4:true
+7FBF42D6D2B8:lH7FBF42D6D3D0|H7FBF42D6D2C8
+7FBF42D6D3D0:t2:A6:status,A7:running
+7FBF42D6D2C8:lH7FBF42D6D3E8|H7FBF42D6D2D8
+7FBF42D6D3E8:t2:A9:heap_size,I376
+7FBF42D6D2D8:lH7FBF42D6D400|H7FBF42D6D2E8
+7FBF42D6D400:t2:AA:stack_size,I27
+7FBF42D6D2E8:lH7FBF42D6D418|N
+7FBF42D6D418:t2:AA:reductions,I117
+7FBF42D6D920:lN|N
+7FBF42D6D970:t2:H7FBF42D6D930,H7FBF42D6D950
+7FBF42D6D950:t3:I19,I32,I44
+7FBF42D6D930:t3:I2018,I11,I26
+7FBF42D6BD10:lH7FBF42D6BD20|H7FBF42D6BD38
+7FBF42D6BD20:t2:H7FBF42D6BD48,H7FBF42D6BD60
+7FBF42D6BD60:t3:AC:error_report,P<0.9.0>,H7FBF42D6BDE8
+7FBF42D6BDE8:t3:P<0.11.0>,A11:supervisor_report,H7FBF42D6BE68
+7FBF42D6BE68:lH7FBF42D6BF28|H7FBF42D6BF40
+7FBF42D6BF28:t2:AA:supervisor,H7FBF42D6BFF8
+7FBF42D6BFF8:t2:A5:local,AA:kernel_sup
+7FBF42D6BF40:lH7FBF42D6C010|H7FBF42D6C028
+7FBF42D6C010:t2:AC:errorContext,AB:start_error
+7FBF42D6C028:lH7FBF42D6C0D0|H7FBF42D6C0E8
+7FBF42D6C0D0:t2:A6:reason,H7FBF42D6C178
+7FBF42D6C178:t2:A8:shutdown,H7FBF42D6C218
+7FBF42D6C218:t3:A15:failed_to_start_child,AA:net_kernel,H7FBF42D6C2E0
+7FBF42D6C2E0:t2:A4:EXIT,AE:nodistribution
+7FBF42D6C0E8:lH7FBF42D6C190|N
+7FBF42D6C190:t2:A8:offender,H7FBF42D6C238
+7FBF42D6C238:lH7FBF42D6C2F8|H7FBF42D6C310
+7FBF42D6C2F8:t2:A3:pid,A9:undefined
+7FBF42D6C310:lH7FBF42D6C388|H7FBF42D6C3A0
+7FBF42D6C388:t2:A2:id,A7:net_sup
+7FBF42D6C3A0:lH7FBF42D6C420|H7FBF42D6C438
+7FBF42D6C420:t2:A6:mfargs,H7FBF42D6C4D8
+7FBF42D6C4D8:t3:A10:erl_distribution,AA:start_link,N
+7FBF42D6C438:lH7FBF42D6C4F8|H7FBF42D6C510
+7FBF42D6C4F8:t2:AC:restart_type,A9:permanent
+7FBF42D6C510:lH7FBF42D6C5C8|H7FBF42D6C5E0
+7FBF42D6C5C8:t2:A8:shutdown,A8:infinity
+7FBF42D6C5E0:lH7FBF42D6C6C8|N
+7FBF42D6C6C8:t2:AA:child_type,AA:supervisor
+7FBF42D6BD48:t2:H7FBF42D6BDA8,H7FBF42D6BDC8
+7FBF42D6BDC8:t3:I19,I32,I44
+7FBF42D6BDA8:t3:I2018,I11,I26
+7FBF42D6BD38:lH7FBF42D6BD80|H7FBF42D6BD98
+7FBF42D6BD80:t2:H7FBF42D6BE08,H7FBF42D6BE20
+7FBF42D6BE20:t3:AC:error_report,P<0.9.0>,H7FBF42D6BEB8
+7FBF42D6BEB8:t3:P<0.19.0>,A11:supervisor_report,H7FBF42D6BF50
+7FBF42D6BF50:lH7FBF42D6C038|H7FBF42D6C050
+7FBF42D6C038:t2:AA:supervisor,H7FBF42D6C0F8
+7FBF42D6C0F8:t2:A5:local,A7:net_sup
+7FBF42D6C050:lH7FBF42D6C110|H7FBF42D6C128
+7FBF42D6C110:t2:AC:errorContext,AB:start_error
+7FBF42D6C128:lH7FBF42D6C1A8|H7FBF42D6C1C0
+7FBF42D6C1A8:t2:A6:reason,H7FBF42D6C248
+7FBF42D6C248:t2:A4:EXIT,AE:nodistribution
+7FBF42D6C1C0:lH7FBF42D6C260|N
+7FBF42D6C260:t2:A8:offender,H7FBF42D6C320
+7FBF42D6C320:lH7FBF42D6C3B0|H7FBF42D6C3C8
+7FBF42D6C3B0:t2:A3:pid,A9:undefined
+7FBF42D6C3C8:lH7FBF42D6C448|H7FBF42D6C460
+7FBF42D6C448:t2:A2:id,AA:net_kernel
+7FBF42D6C460:lH7FBF42D6C520|H7FBF42D6C538
+7FBF42D6C520:t2:A6:mfargs,H7FBF42D6C5F0
+7FBF42D6C5F0:t3:AA:net_kernel,AA:start_link,H7FBF42D6C6E0
+7FBF42D6C6E0:lH7FBF42D6C7B8|N
+7FBF42D6C7B8:lA32:0096ee77-1f50-48e2-a08a-42536a754970@192.168.1.124|H7FBF42D6C870
+7FBF42D6C870:lA9:longnames|N
+7FBF42D6C538:lH7FBF42D6C610|H7FBF42D6C628
+7FBF42D6C610:t2:AC:restart_type,A9:permanent
+7FBF42D6C628:lH7FBF42D6C6F0|H7FBF42D6C708
+7FBF42D6C6F0:t2:A8:shutdown,I2000
+7FBF42D6C708:lH7FBF42D6C7C8|N
+7FBF42D6C7C8:t2:AA:child_type,A6:worker
+7FBF42D6BE08:t2:H7FBF42D6BE78,H7FBF42D6BE98
+7FBF42D6BE98:t3:I19,I32,I44
+7FBF42D6BE78:t3:I2018,I11,I26
+7FBF42D6BD98:lH7FBF42D6BE40|H7FBF42D6BE58
+7FBF42D6BE40:t2:H7FBF42D6BED8,H7FBF42D6BEF0
+7FBF42D6BEF0:t3:AC:error_report,P<0.9.0>,H7FBF42D6BFA0
+7FBF42D6BFA0:t3:P<0.22.0>,AC:crash_report,H7FBF42D6C060
+7FBF42D6C060:lH7FBF42D6C138|H7FBF42D6C148
+7FBF42D6C138:lH7FBF42D6C1D0|H7FBF42D6C1E8
+7FBF42D6C1D0:t2:AC:initial_call,H7FBF42D6C278
+7FBF42D6C278:t3:AA:net_kernel,A4:init,H7FBF42D6C330
+7FBF42D6C330:lAB:Argument__1|N
+7FBF42D6C1E8:lH7FBF42D6C298|H7FBF42D6C2B0
+7FBF42D6C298:t2:A3:pid,P<0.22.0>
+7FBF42D6C2B0:lH7FBF42D6C340|H7FBF42D6C358
+7FBF42D6C340:t2:AF:registered_name,N
+7FBF42D6C358:lH7FBF42D6C3D8|H7FBF42D6C3F0
+7FBF42D6C3D8:t2:AA:error_info,H7FBF42D6C470
+7FBF42D6C470:t3:A4:exit,H7FBF42D6C548,H7FBF42D6C560
+7FBF42D6C560:lH7FBF42D6C638|H7FBF42D6C660
+7FBF42D6C638:t4:AA:gen_server,A7:init_it,I6,H7FBF42D6C718
+7FBF42D6C718:lH7FBF42D6C7E0|H7FBF42D6C7F8
+7FBF42D6C7E0:t2:A4:file,H7FBF42D6C880
+7FBF42D6C880:lI103|H7FBF42D6C920
+7FBF42D6C920:lI101|H7FBF42D6C990
+7FBF42D6C990:lI110|H7FBF42D6C9E8
+7FBF42D6C9E8:lI95|H7FBF42D6CA30
+7FBF42D6CA30:lI115|H7FBF42D6CA60
+7FBF42D6CA60:lI101|H7FBF42D6CA90
+7FBF42D6CA90:lI114|H7FBF42D6CAC0
+7FBF42D6CAC0:lI118|H7FBF42D6CAF0
+7FBF42D6CAF0:lI101|H7FBF42D6CB20
+7FBF42D6CB20:lI114|H7FBF42D6CB50
+7FBF42D6CB50:lI46|H7FBF42D6CB80
+7FBF42D6CB80:lI101|H7FBF42D6CBB0
+7FBF42D6CBB0:lI114|H7FBF42D6CBE0
+7FBF42D6CBE0:lI108|N
+7FBF42D6C7F8:lH7FBF42D6C890|N
+7FBF42D6C890:t2:A4:line,I344
+7FBF42D6C660:lH7FBF42D6C728|N
+7FBF42D6C728:t4:A8:proc_lib,AF:init_p_do_apply,I3,H7FBF42D6C808
+7FBF42D6C808:lH7FBF42D6C8A8|H7FBF42D6C8C0
+7FBF42D6C8A8:t2:A4:file,H7FBF42D6C930
+7FBF42D6C930:lI112|H7FBF42D6C9A0
+7FBF42D6C9A0:lI114|H7FBF42D6C9F8
+7FBF42D6C9F8:lI111|H7FBF42D6CA40
+7FBF42D6CA40:lI99|H7FBF42D6CA70
+7FBF42D6CA70:lI95|H7FBF42D6CAA0
+7FBF42D6CAA0:lI108|H7FBF42D6CAD0
+7FBF42D6CAD0:lI105|H7FBF42D6CB00
+7FBF42D6CB00:lI98|H7FBF42D6CB30
+7FBF42D6CB30:lI46|H7FBF42D6CB60
+7FBF42D6CB60:lI101|H7FBF42D6CB90
+7FBF42D6CB90:lI114|H7FBF42D6CBC0
+7FBF42D6CBC0:lI108|N
+7FBF42D6C8C0:lH7FBF42D6C940|N
+7FBF42D6C940:t2:A4:line,I240
+7FBF42D6C548:t2:A5:error,A6:badarg
+7FBF42D6C3F0:lH7FBF42D6C490|H7FBF42D6C4A8
+7FBF42D6C490:t2:A9:ancestors,H7FBF42D6C570
+7FBF42D6C570:lA7:net_sup|H7FBF42D6C670
+7FBF42D6C670:lAA:kernel_sup|H7FBF42D6C750
+7FBF42D6C750:lP<0.10.0>|N
+7FBF42D6C4A8:lH7FBF42D6C580|H7FBF42D6C598
+7FBF42D6C580:t2:A8:messages,N
+7FBF42D6C598:lH7FBF42D6C680|H7FBF42D6C698
+7FBF42D6C680:t2:A5:links,H7FBF42D6C760
+7FBF42D6C760:lp<0.337>|H7FBF42D6C818
+7FBF42D6C818:lP<0.19.0>|N
+7FBF42D6C698:lH7FBF42D6C770|H7FBF42D6C788
+7FBF42D6C770:t2:AA:dictionary,H7FBF42D6C828
+7FBF42D6C828:lH7FBF42D6C8D0|N
+7FBF42D6C8D0:t2:A9:longnames,A4:true
+7FBF42D6C788:lH7FBF42D6C838|H7FBF42D6C850
+7FBF42D6C838:t2:A9:trap_exit,A4:true
+7FBF42D6C850:lH7FBF42D6C8E8|H7FBF42D6C900
+7FBF42D6C8E8:t2:A6:status,A7:running
+7FBF42D6C900:lH7FBF42D6C958|H7FBF42D6C970
+7FBF42D6C958:t2:A9:heap_size,I987
+7FBF42D6C970:lH7FBF42D6C9B0|H7FBF42D6C9C8
+7FBF42D6C9B0:t2:AA:stack_size,I27
+7FBF42D6C9C8:lH7FBF42D6CA08|N
+7FBF42D6CA08:t2:AA:reductions,I995
+7FBF42D6C148:lN|N
+7FBF42D6BED8:t2:H7FBF42D6BF60,H7FBF42D6BF80
+7FBF42D6BF80:t3:I19,I32,I44
+7FBF42D6BF60:t3:I2018,I11,I26
+7FBF42D6BE58:lH7FBF42D6BF10|N
+7FBF42D6BF10:t2:H7FBF42D6BFC0,H7FBF42D6BFD8
+7FBF42D6BFD8:t3:A8:info_msg,P<0.9.0>,H7FBF42D6C0B0
+7FBF42D6C0B0:t3:P<0.22.0>,H7FBF42D6C158,H7FBF42D6C168
+7FBF42D6C168:lH7FBF42D6C208|N
+7FBF42D6C208:lI105|H7FBF42D6C2D0
+7FBF42D6C2D0:lI110|H7FBF42D6C378
+7FBF42D6C378:lI101|H7FBF42D6C410
+7FBF42D6C410:lI116|H7FBF42D6C4C8
+7FBF42D6C4C8:lI95|H7FBF42D6C5B8
+7FBF42D6C5B8:lI116|H7FBF42D6C6B8
+7FBF42D6C6B8:lI99|H7FBF42D6C7A8
+7FBF42D6C7A8:lI112|N
+7FBF42D6C158:lI80|H7FBF42D6C1F8
+7FBF42D6C1F8:lI114|H7FBF42D6C2C0
+7FBF42D6C2C0:lI111|H7FBF42D6C368
+7FBF42D6C368:lI116|H7FBF42D6C400
+7FBF42D6C400:lI111|H7FBF42D6C4B8
+7FBF42D6C4B8:lI99|H7FBF42D6C5A8
+7FBF42D6C5A8:lI111|H7FBF42D6C6A8
+7FBF42D6C6A8:lI108|H7FBF42D6C798
+7FBF42D6C798:lI58|H7FBF42D6C860
+7FBF42D6C860:lI32|H7FBF42D6C910
+7FBF42D6C910:lI126|H7FBF42D6C980
+7FBF42D6C980:lI116|H7FBF42D6C9D8
+7FBF42D6C9D8:lI112|H7FBF42D6CA20
+7FBF42D6CA20:lI58|H7FBF42D6CA50
+7FBF42D6CA50:lI32|H7FBF42D6CA80
+7FBF42D6CA80:lI116|H7FBF42D6CAB0
+7FBF42D6CAB0:lI104|H7FBF42D6CAE0
+7FBF42D6CAE0:lI101|H7FBF42D6CB10
+7FBF42D6CB10:lI32|H7FBF42D6CB40
+7FBF42D6CB40:lI110|H7FBF42D6CB70
+7FBF42D6CB70:lI97|H7FBF42D6CBA0
+7FBF42D6CBA0:lI109|H7FBF42D6CBD0
+7FBF42D6CBD0:lI101|H7FBF42D6CBF0
+7FBF42D6CBF0:lI32|H7FBF42D6CC00
+7FBF42D6CC00:lI48|H7FBF42D6CC10
+7FBF42D6CC10:lI48|H7FBF42D6CC20
+7FBF42D6CC20:lI57|H7FBF42D6CC30
+7FBF42D6CC30:lI54|H7FBF42D6CC40
+7FBF42D6CC40:lI101|H7FBF42D6CC50
+7FBF42D6CC50:lI101|H7FBF42D6CC60
+7FBF42D6CC60:lI55|H7FBF42D6CC70
+7FBF42D6CC70:lI55|H7FBF42D6CC80
+7FBF42D6CC80:lI45|H7FBF42D6CC90
+7FBF42D6CC90:lI49|H7FBF42D6CCA0
+7FBF42D6CCA0:lI102|H7FBF42D6CCB0
+7FBF42D6CCB0:lI53|H7FBF42D6CCC0
+7FBF42D6CCC0:lI48|H7FBF42D6CCD0
+7FBF42D6CCD0:lI45|H7FBF42D6CCE0
+7FBF42D6CCE0:lI52|H7FBF42D6CCF0
+7FBF42D6CCF0:lI56|H7FBF42D6CD00
+7FBF42D6CD00:lI101|H7FBF42D6CD10
+7FBF42D6CD10:lI50|H7FBF42D6CD20
+7FBF42D6CD20:lI45|H7FBF42D6CD30
+7FBF42D6CD30:lI97|H7FBF42D6CD40
+7FBF42D6CD40:lI48|H7FBF42D6CD50
+7FBF42D6CD50:lI56|H7FBF42D6CD60
+7FBF42D6CD60:lI97|H7FBF42D6CD70
+7FBF42D6CD70:lI45|H7FBF42D6CD80
+7FBF42D6CD80:lI52|H7FBF42D6CD90
+7FBF42D6CD90:lI50|H7FBF42D6CDA0
+7FBF42D6CDA0:lI53|H7FBF42D6CDB0
+7FBF42D6CDB0:lI51|H7FBF42D6CDC0
+7FBF42D6CDC0:lI54|H7FBF42D6CDD0
+7FBF42D6CDD0:lI97|H7FBF42D6CDE0
+7FBF42D6CDE0:lI55|H7FBF42D6CDF0
+7FBF42D6CDF0:lI53|H7FBF42D6CE00
+7FBF42D6CE00:lI52|H7FBF42D6CE10
+7FBF42D6CE10:lI57|H7FBF42D6CE20
+7FBF42D6CE20:lI55|H7FBF42D6CE30
+7FBF42D6CE30:lI48|H7FBF42D6CE40
+7FBF42D6CE40:lI64|H7FBF42D6CE50
+7FBF42D6CE50:lI49|H7FBF42D6CE60
+7FBF42D6CE60:lI57|H7FBF42D6CE70
+7FBF42D6CE70:lI50|H7FBF42D6CE80
+7FBF42D6CE80:lI46|H7FBF42D6CE90
+7FBF42D6CE90:lI49|H7FBF42D6CEA0
+7FBF42D6CEA0:lI54|H7FBF42D6CEB0
+7FBF42D6CEB0:lI56|H7FBF42D6CEC0
+7FBF42D6CEC0:lI46|H7FBF42D6CED0
+7FBF42D6CED0:lI49|H7FBF42D6CEE0
+7FBF42D6CEE0:lI46|H7FBF42D6CEF0
+7FBF42D6CEF0:lI49|H7FBF42D6CF00
+7FBF42D6CF00:lI50|H7FBF42D6CF10
+7FBF42D6CF10:lI52|H7FBF42D6CF20
+7FBF42D6CF20:lI32|H7FBF42D6CF30
+7FBF42D6CF30:lI115|H7FBF42D6CF40
+7FBF42D6CF40:lI101|H7FBF42D6CF50
+7FBF42D6CF50:lI101|H7FBF42D6CF60
+7FBF42D6CF60:lI109|H7FBF42D6CF70
+7FBF42D6CF70:lI115|H7FBF42D6CF80
+7FBF42D6CF80:lI32|H7FBF42D6CF90
+7FBF42D6CF90:lI116|H7FBF42D6CFA0
+7FBF42D6CFA0:lI111|H7FBF42D6CFB0
+7FBF42D6CFB0:lI32|H7FBF42D6CFC0
+7FBF42D6CFC0:lI98|H7FBF42D6CFD0
+7FBF42D6CFD0:lI101|H7FBF42D6CFE0
+7FBF42D6CFE0:lI32|H7FBF42D6CFF0
+7FBF42D6CFF0:lI105|H7FBF42D6D000
+7FBF42D6D000:lI110|H7FBF42D6D010
+7FBF42D6D010:lI32|H7FBF42D6D020
+7FBF42D6D020:lI117|H7FBF42D6D030
+7FBF42D6D030:lI115|H7FBF42D6D040
+7FBF42D6D040:lI101|H7FBF42D6D050
+7FBF42D6D050:lI32|H7FBF42D6D060
+7FBF42D6D060:lI98|H7FBF42D6D070
+7FBF42D6D070:lI121|H7FBF42D6D080
+7FBF42D6D080:lI32|H7FBF42D6D090
+7FBF42D6D090:lI97|H7FBF42D6D0A0
+7FBF42D6D0A0:lI110|H7FBF42D6D0B0
+7FBF42D6D0B0:lI111|H7FBF42D6D0C0
+7FBF42D6D0C0:lI116|H7FBF42D6D0D0
+7FBF42D6D0D0:lI104|H7FBF42D6D0E0
+7FBF42D6D0E0:lI101|H7FBF42D6D0F0
+7FBF42D6D0F0:lI114|H7FBF42D6D100
+7FBF42D6D100:lI32|H7FBF42D6D110
+7FBF42D6D110:lI69|H7FBF42D6D120
+7FBF42D6D120:lI114|H7FBF42D6D130
+7FBF42D6D130:lI108|H7FBF42D6D140
+7FBF42D6D140:lI97|H7FBF42D6D150
+7FBF42D6D150:lI110|H7FBF42D6D160
+7FBF42D6D160:lI103|H7FBF42D6D170
+7FBF42D6D170:lI32|H7FBF42D6D180
+7FBF42D6D180:lI110|H7FBF42D6D190
+7FBF42D6D190:lI111|H7FBF42D6D1A0
+7FBF42D6D1A0:lI100|H7FBF42D6D1B0
+7FBF42D6D1B0:lI101|N
+7FBF42D6BFC0:t2:H7FBF42D6C070,H7FBF42D6C090
+7FBF42D6C090:t3:I19,I32,I44
+7FBF42D6C070:t3:I2018,I11,I26
+7FBF42D7F590:t2:AD:$initial_call,H7FBF514B6980
+7FBF514B6980:t3:A9:gen_event,A7:init_it,I6
+7FBF42D7F5A8:t2:AA:$ancestors,H7FBF42D7F5E0
+7FBF42D7F5E0:lP<0.2.0>|N
+=proc_stack:<0.15.0>
+0x00007fbf42d7e248:SReturn addr 0x42FFB838 (global:'-init_the_locker_fun/1-fun-0-'/1 + 328)
+y0:H7FBF42D7DD68
+y1:A8:infinity
+0x00007fbf42d7e260:SReturn addr 0x894628 (<terminate process normally>)
+y0:N
+=proc_heap:<0.15.0>
+7FBF42D7DD68:t7:A5:multi,N,N,N,AD:nonode@nohost,A5:false,A5:false
+=atoms
+character
+'-tokens/4-fun-0-'
+'-tokens/4-fun-1-'
+'-options/1-fun-0-'
+'-default_option/1-fun-0-'
+'-scan1/5-fun-12-'
+'-scan1/5-fun-1-'
+'-scan1/5-fun-0-'
+'-scan1/5-fun-4-'
+'-scan1/5-fun-8-'
+'-scan1/5-fun-6-'
+'-scan1/5-fun-7-'
+'-scan1/5-fun-11-'
+'-scan1/5-fun-3-'
+'-scan1/5-fun-5-'
+'-scan1/5-fun-9-'
+'-scan1/5-fun-2-'
+'-scan1/5-fun-10-'
+'-scan_atom/6-fun-0-'
+'-scan_variable/6-fun-0-'
+'-scan_newline/5-fun-0-'
+'-scan_nl_spcs/6-fun-0-'
+'-scan_nl_tabs/6-fun-0-'
+'-scan_nl_white_space/6-fun-0-'
+'-scan_spcs/6-fun-0-'
+'-scan_tabs/6-fun-0-'
+'-skip_white_space/6-fun-0-'
+'-scan_white_space/6-fun-0-'
+'-scan_char/5-fun-1-'
+'-scan_char/5-fun-0-'
+'-scan_string/6-fun-0-'
+'-scan_qatom/6-fun-0-'
+'-scan_number/6-fun-1-'
+'-scan_number/6-fun-0-'
+'-scan_based_int/6-fun-0-'
+'-scan_fraction/6-fun-0-'
+'-scan_exponent_sign/6-fun-0-'
+'-scan_exponent/6-fun-0-'
+'-skip_comment/6-fun-0-'
+'-scan_comment/6-fun-0-'
+after
+let
+of
+catch
+when
+nl_tabs
+spcs
+nl_spcs
+scan_error
+tok3
+tok2
+comment
+scan_comment
+skip_comment
+float_end
+scan_exponent
+scan_exponent_sign
+scan_fraction
+scan_based_int
+scan_number
+escape_char
+scan_esc_end
+scan_hex
+scan_escape
+scan_string1
+scan_string_col
+scan_string_no_col
+scan_string0
+scan_qatom
+char_error
+scan_string
+scan_char
+scan_white_space
+skip_white_space
+scan_tabs
+scan_spcs
+newline_end
+scan_nl_white_space
+scan_nl_tabs
+scan_nl_spcs
+scan_newline
+set_text
+scan_dot
+scan_name
+scan_variable
+scan_atom
+'#'
+'&'
+'@'
+'\\'
+'^'
+'`'
+'~'
+'|'
+'||'
+'<-'
+'<='
+':'
+'::'
+':='
+'='
+'=>'
+'->'
+'..'
+'...'
+white_space
+';'
+scan1
+string1
+tokens1
+set_attr
+attr_info
+expand_opt
+reserved_word_fun
+opts
+return_white_spaces
+return_comments
+string_thing
+set_attribute
+attributes_info
+token_info
+category
+end_location
+continuation_location
+erl_scan_continuation
+no_col
+'FILE'
+'MODULE'
+'MODULE_STRING'
+'BASE_MODULE'
+'BASE_MODULE_STRING'
+'MACHINE'
+'-internal_open/2-fun-0-'
+'-read_encoding/2-after$^0/0-0-'
+'-fake_reader/1-fun-0-'
+'-read_encoding_from_file/2-after$^0/0-0-'
+'-reader/2-fun-0-'
+'-com_enc_end/1-lc$^0/1-0-'
+set_line
+'-interpret_file_attr/3-fun-0-'
+map_anno
+interpret_file_attr
+interpret_file_attribute
+line1
+start_loc
+add_line
+location
+loc
+loc_anno
+fname_join
+expand_var1
+expand_var
+wait_epp_reply
+epp_reply
+stringify
+stringify1
+token_src
+expand_arg
+expand_macro
+'>>'
+']'
+'}'
+end
+'<<'
+'['
+begin
+case
+cond
+try
+'{'
+macro_arg
+count_args
+store_arg
+macro_args
+bind_args
+symbol
+text
+'LINE'
+get_macro_uses
+check_uses
+expand_macro1
+expand_macros
+macro_expansion
+macro_pars
+skip_else
+invalid_unicode
+skip_toks
+new_location
+scan_endif
+scan_elif
+scan_if
+scan_else
+scan_ifndef
+scan_ifdef
+scan_include_lib
+find_lib_dir
+scan_include
+scan_undef
+'?'
+macro_ref
+macro_uses
+append_list
+scan_define_cont
+var
+scan_define
+scan_extends
+'.'
+scan_module_1
+extends
+scan_module
+include_lib
+else
+define
+endif
+elif
+ifndef
+ifdef
+if
+scan_toks
+leave_file
+file_name
+'('
+','
+')'
+set_generated
+enter_file_reply
+enter_file2
+path_open
+enter_file
+wait_req_skip
+wait_req_scan
+close_file
+epp_request
+wait_request
+abstract
+user_predef
+integer
+predef_macros
+init_server
+restore_typed_record_fields
+typed_record_field
+normalize_typed_record_fields
+com_encoding
+com_enc_end
+com_enc
+com_space
+com_sep
+com_oding
+com_c
+com
+com_nl
+reader
+read_encoding_from_file
+fake_reader
+set_encoding
+in_comment_only
+read_encoding
+encoding_to_string
+not_typed
+typed
+attribute
+missing_parenthesis
+cannot_parse
+premature_end
+include
+illegal
+circular
+mismatch
+bad
+arg_error
+'NYI'
+redefine
+redefine_predef
+macro_defs
+parse_form
+parse_erl_form
+scan_erl_form
+get_bool
+extra
+internal_open
+includes
+macros
+'-print/8-fun-0-'
+get_option
+indent
+while_fail
+last_depth
+cind_element
+cind_tail
+cind_list
+cind_rec
+cind_field
+cind_fields_tail
+cind_record
+no_good
+cind_tag_tuple
+cind
+printable_char
+printable_unicode
+valid_utf8
+printable_bin1
+printable_bin
+list_length_tail
+list_length
+print_length_list1
+print_length_list
+print_length_field
+print_length_fields
+print_length_record
+print_length_tuple
+print_length_map_pair
+print_length_map_pairs
+print_length_map
+print_length
+write_list
+write_field
+write_fields_tail
+write_fields
+pp_binary
+pp_element
+pp_tail
+pp_list
+rec_indent
+field
+pp_field
+pp_fields_tail
+pp_record
+pp_tag_tuple
+map_pair
+bin
+pp
+max_cs
+record_print_fun
+max_chars
+'-fwrite_g/1-lc$^0/1-0-'
+'-fwrite_g/1-lc$^1/1-1-'
+lowercase
+cond_lowercase
+flat_trunc
+char
+prefixed_integer
+unprefixed_integer
+string_field
+cdata_to_chars
+iolist_to_chars
+log2floor
+int_pow
+int_ceil
+insert_exp
+insert_decimal
+generate
+fixup
+scale
+fwrite_g_1
+mantissa_exponent
+float_data
+float_f
+fwrite_f
+float_exp
+float_man
+float_e
+fwrite_e
+column
+base
+uniconv
+decr_pc
+pcount
+collect_cc
+field_value
+field_width
+collect_cseq
+print_strings
+print_encoding
+print_pad_char
+print_precision
+left
+print_field_width
+width
+strings
+precision
+pad_char
+encoding
+control_char
+adjust
+binrev
+get_until
+collect_line_list
+collect_line_bin
+collect_line1
+collect_chars_list
+collect_chars1
+collect_chars
+cafu
+count_and_find_utf8
+nl
+printable_unicode_list
+printable_latin1_list
+deep_unicode_char_list
+deep_char_list
+deep_latin1_char_list
+char_list
+latin1_char_list
+write_char_as_latin1
+write_latin1_char
+write_unicode_char
+write_char
+string_char
+write_string1
+unicode_as_latin1
+write_string_as_latin1
+write_latin1_string
+write_unicode_string
+unicode_as_unicode
+write_string
+name_char
+name_chars
+reserved_word
+quote_atom
+write_atom
+write_binary_body
+write_binary
+write_map_assoc
+write_map_body
+write_map
+write_ref
+write_port
+write_tail
+fwrite_g
+add_modifier
+do_format_prompt
+format_prompt
+indentation
+build_text
+unscan
+unscan_format
+scan
+scan_format
+fread
+fwrite
+'Argument__2'
+'Argument__3'
+'Argument__4'
+'Argument__1'
+try_connect
+connect1
+'0096ee77-1f50-48e2-a08a-42536a754970'
+'1234'
+next_random
+make_info
+random_cookie
+raw_write_file_info
+create_cookie
+check_cookie1
+check_cookie
+check_attributes
+make_error
+raw_read_file_info
+read_cookie
+cookies
+init_cookie
+auth_reply
+ddd_server
+hello
+echo
+distribution_not_started
+node_cookie
+cookie
+pang
+pong
+ping
+no_reg_reply_from_epmd
+epmd_close
+already_registered
+parse_name
+parse_line
+scan_line
+scan_names
+names_loop
+do_get_names
+wait_for_close
+select_best_version
+best_version
+wait_for_port_reply_name
+wait_for_port_reply_cont2
+wait_for_port_reply_cont
+wait_for_port_reply
+get_port
+garbage_from_epmd
+wait_for_reg_reply
+epmd_dist_low
+epmd_dist_high
+do_register_node
+epmd_port
+get_epmd_port
+r4
+client_info_req
+alive
+names
+port_please1
+eaddrinuse
+'-do_accept/7-fun-0-'
+'-do_accept/7-fun-1-'
+'-do_accept/7-fun-2-'
+'-do_accept/7-fun-3-'
+'-do_accept/7-fun-4-'
+'-do_setup/7-fun-0-'
+'-do_setup/7-fun-1-'
+'-do_setup/7-fun-2-'
+'-do_setup/7-fun-3-'
+split_stat
+is_node_name
+mask
+get_ifs
+check_ip
+get_tcp_address
+splitnode
+inet_dist_connect_options
+handshake_we_started
+reset_timer
+port_please
+do_setup
+gen_setup
+get_remote_id
+dist_nodelay
+handshake_other_started
+hs_data
+no_node
+do_accept
+gen_accept_connection
+flush_controller
+accept_loop
+gen_accept
+inet_dist_listen_options
+inet_dist_use_interface
+inet_dist_listen_max
+inet_dist_listen_min
+do_listen
+register_node
+gen_listen
+family
+gen_select
+invalid_key
+short
+bad_node
+ok_pending
+nok_pending
+already_pending
+'-terminate/2-fun-1-'
+'-terminate/2-fun-2-'
+'-handle_info/2-fun-0-'
+'-handle_info/2-fun-1-'
+'-init_node/2-fun-0-'
+'-create_hostpart/2-fun-0-'
+'-print_info/0-fun-0-'
+'-async_gen_server_reply/2-fun-0-'
+async_gen_server_reply
+async_reply
+getnode
+nformat
+fetch
+fmt_address
+display_info
+print_info
+restart_ticker
+all_atoms
+reply_waiting1
+reply_waiting
+get_nodes_info
+get_node_info
+net_setuptime
+connecttime
+set_node
+duplicate_name
+sync_cookie
+start_protos
+childspecs
+proto_dist
+create_hostpart
+long
+create_name
+init_node
+get_proto_mod
+unsupported_address_type
+select_mod
+net_address
+setup
+spawn_func
+bye
+aux_ticker1
+aux_ticker
+start_aux_ticker
+ticker_loop
+get_up_nodes
+get_nodes
+disconnect_pid
+do_disconnect
+mk_monitor_nodes_error
+bad_option_value
+options_not_a_list
+unknown_options
+check_options
+option_value_mismatch
+check_opt
+mark_sys_dist_nodedown
+up_nodedown
+up_pending_nodedown
+pending_nodedown
+get_conn
+ticker_exit
+pending_own_exit
+conn_own_exit
+accept_exit
+listen_exit
+do_handle_exit
+aux_tick
+transition_period_end
+unsupported_protocol
+controller
+accept_connection
+registered_send
+badcookie
+bad_request
+inserted
+remarked
+accept_pending
+is_pending
+change_initiated
+shorter
+longer
+unchanged
+ongoing_change_to
+tick_change
+up_pending
+publish_on_nodes
+is_auth
+not_implemented
+tick
+ticker
+nodistribution
+connection
+never
+dist_auto_connect
+passive_connect_monitor
+barred_connection
+sys_dist
+do_connect
+hidden_connect_node
+connect_node
+update_publish_nodes
+publish_on_node
+hidden_connect
+ticktime_res
+get_net_ticktime
+new_ticktime
+set_net_ticktime
+verbose
+nodes_info
+node_info
+kernel_apply
+'0096ee77-1f50-48e2-a08a-42536a754970@192.168.1.124'
+net_sup_dynamic
+net_ticktime
+ticktime
+lname
+start_p
+protocol_childspecs
+epmd_module
+no_epmd
+could_not_start_server
+inet_gethost_native_sup
+'-handle_message/2-fun-0-'
+'-restart_port/1-fun-0-'
+pick_names
+ndx
+pick_addresses_v6
+pick_addresses_v4
+expand_default_name
+malformed_response
+getit
+soft_restart
+debug_level
+gethost_poolsize
+get_poolsize
+gethost_extra_args
+gethost_prioritize
+get_extra_args
+do_open_port
+get_rid
+pick_client
+pick_request
+find_request
+do_handle_call
+restart_port
+handle_message
+ign_req_index
+ign_requests
+num_requests
+rid
+run_once
+start_raw
+server_init
+'-services/2-fun-0-'
+'-rpc/2-fun-0-'
+'-hosts/2-fun-0-'
+'-resolv/2-fun-0-'
+'-host_conf_linux/2-fun-0-'
+'-host_conf_freebsd/2-fun-0-'
+'-host_conf_bsdos/2-fun-0-'
+'-nsswitch_conf/2-fun-0-'
+'-protocols/2-fun-0-'
+'-netmasks/2-fun-0-'
+'-networks/2-fun-0-'
+'-ntoa_done/2-fun-0-'
+'-ntoa_done/2-fun-1-'
+'-ntoa_done/1-fun-0-'
+split_mid_comma
+split_comma
+split_end
+split_mid
+dig_to_hex
+dig_to_dec
+ntoa_done
+dup
+hex_to_int
+ipv6_addr_done
+ipv6_addr
+ipv4_field
+ipv4strict_addr
+strip0
+is_dom2
+is_dom_ldh
+is_dom1
+is_vis1
+port_proto
+collect_line
+parse_cs
+skip
+parse_fd
+networks
+netmasks
+protocols
+delete_options
+noname
+services
+not_owner
+eafnosupport
+'-setopts/2-lc$^0/1-0-'
+'-getopts/2-lc$^0/1-0-'
+'-getifaddrs/0-fun-0-'
+'-getiflist/0-fun-0-'
+'-ifget/2-fun-0-'
+'-ifset/2-fun-0-'
+'-getif/0-fun-0-'
+'-getif/1-fun-0-'
+'-gethostname/0-fun-0-'
+'-bindx/3-lc$^1/1-1-'
+'-ii/3-fun-0-'
+'-ii/3-lc$^0/1-0-'
+'-ii/3-fun-1-'
+'-info_lines/3-lc$^0/1-0-'
+'-i_line/3-lc$^0/1-0-'
+'-h_line/1-lc$^0/1-0-'
+'-port_list/1-fun-0-'
+udp_sync_input
+tcp_sync_input
+tcp_controlling_process
+tcp_close
+exbadseq
+exbadport
+port_list
+sctp_sockets
+udp_sockets
+tcp_sockets
+fmt_port
+enotconn
+fmt_addr
+listening
+fmt_status
+sent
+local_address
+foreign_address
+upper
+hh_field
+h_field
+h_line
+i_line
+info_lines
+smax
+ii
+change_bindx_0_port
+set_bindx_port
+gethostbyaddr_tm_native
+gethostbyaddr_self
+gethostbyname_string
+gethostbyname_self
+gethostbyname_tm_native
+wins
+getaddrs_tm
+binary2filename
+filename2binary
+add_opt
+sctp_opt_ifaddr
+sctp_opt
+translate_ip
+sctp_opts
+sctp_options
+udp_add
+udp_opt
+list_add
+backlog
+list_opt
+listen_opts
+inet_default_listen_options
+listen_options
+con_add
+ifaddr
+con_opt
+connect_opts
+inet_default_connect_options
+connect_options
+stats
+strict_address
+parse_strict_address
+parse_address
+ipv6strict_address
+parse_ipv6strict_address
+ipv4strict_address
+parse_ipv4strict_address
+ipv6_address
+parse_ipv6_address
+parse_ipv4_address
+ntoa
+getaddrs
+getll
+gethostbyaddr_tm
+nostring
+gethostbyname_tm
+popf
+pushf
+withsocket
+getif
+udp_closed
+optuniquify
+udp_controlling_process
+controlling_process
+udp_close
+udp_opts
+getaddr_tm
+getaddr
+getserv
+bad_encoding
+on
+not_string
+'-init/0-fun-0-'
+'-set_hostname/1-fun-0-'
+'-load_hosts/2-fun-0-'
+address
+'-win32_load1/3-fun-0-'
+'-win32_load1/3-fun-1-'
+scan_inetrc
+parse_inetrc_skip_line
+parse_inetrc
+inet_warnings
+try_get_rc
+inetrc
+read_inetrc
+valid_type
+extract_cfg_files1
+registry
+extract_cfg_files
+read_rc
+win32_get_strings
+split_line
+win32_split_line
+expand
+win32_load1
+change_key
+nt
+win32_load_from_registry
+load_hosts
+load_resolv
+set_search_dom
+inet_dns_when_nis
+add_dns_lookup
+nsswitch_conf
+host_conf_linux
+host_conf_freebsd
+host_conf_bsdos
+sunos
+netbsd
+freebsd
+'bsd/os'
+do_load_resolv
+nonames
+longnames
+shortnames
+sname
+erl_dist_mode
+gethostbyname
+formerr
+nxdomain
+'-add_hosts/1-fun-0-'
+'-res_check_option/2-fun-4-'
+'-res_check_option/2-fun-2-'
+'-res_check_option/2-fun-3-'
+'-res_check_option/2-fun-0-'
+'-res_check_option/2-fun-1-'
+'-res_update_conf/0-fun-0-'
+'-res_update_hosts/0-fun-0-'
+'-res_cache_answer/1-fun-0-'
+'-lookup_type/2-lc$^0/1-0-'
+'-lookup_cname/1-lc$^0/1-0-'
+'-res_hostent_by_domain/3-fun-0-'
+'-res_lookup_type/3-lc$^0/1-0-'
+'-res_gethostbyaddr/2-fun-0-'
+'-handle_call/3-lc$^1/1-2-'
+'-handle_call/3-lc$^0/1-1-'
+'-handle_call/3-lc$^2/1-3-'
+'-handle_call/3-lc$^3/1-0-'
+chars
+'-do_add_host/5-lc$^0/1-0-'
+'-do_add_host/5-lc$^1/1-1-'
+'-do_del_host/3-lc$^0/1-0-'
+'-rc_opt_req/1-lc$^0/1-0-'
+'-do_refresh_cache/4-fun-0-'
+'-delete_older/5-fun-0-'
+'-lists_subtract/2-fun-0-'
+lists_keydelete
+lists_subtract
+lists_delete
+delete_older
+delete_n_oldest
+alloc_entry
+do_refresh_cache
+stop_timer
+init_timer
+stripdot_1
+stripdot
+hex
+dnib
+dn_in_addr_arpa
+dn_ip6_int
+tolower
+lower_rr
+filter_rr
+match_rr
+do_lookup_rr
+start_time
+times
+cache_rr
+do_add_rr
+is_reqname
+is_res_set
+set_socks_methods
+rc_reqname
+clear_search
+clear_ns
+rc_opt_req
+handle_calls
+handle_rc_list
+do_del_host
+do_add_host
+handle_set_file
+refresh_timeout
+listdel
+load_hosts_file
+reset_db
+inet_hosts_file_byaddr
+inet_hosts_byaddr
+inet_cache
+lookup_socket
+unregister_socket
+register_socket
+dnt
+dnip
+ent_gethostbyaddr
+res_gethostbyaddr
+ptr
+gethostbyaddr
+res_lookup_type
+res_hostent_by_domain
+lookup_rr
+cname
+lookup_cname
+lookup_type
+hostent_by_domain
+hostent
+aaaa
+make_hostent
+get_searchlist
+getbysearch
+dots
+getbyname
+dns_rec
+res_cache_answer
+del_rr
+dns_rr
+add_rr
+db_get
+res_update
+res_hosts_file_tm
+set_hosts_file_tm
+res_hosts_file_info
+res_update_hosts
+res_resolv_conf_tm
+set_resolv_conf_tm
+res_resolv_conf_info
+res_update_conf
+hostname
+methods
+noproxy
+server
+socks_option
+res_check_search
+res_check_ns
+res_check_list
+res_check_option_absfile
+visible_string
+res_check_option
+res_recurse
+alt_nameserver
+hosts_file_name
+nameserver
+resolv_conf_name
+res_optname
+res_set
+res_id
+next_id
+res_option
+host
+get_rc_hosts
+get_rc_ns
+get_rc_noproxy
+res_domain
+res_search
+res_edns
+res_inet6
+res_usevc
+inet_hosts_byname
+res_alt_ns
+res_ns
+res_hosts_file
+res_resolv_conf
+res_retry
+res_udp_payload_size
+res_timeout
+cache_refresh_interval
+res_lookup
+socks5_server
+socks5_noproxy
+cache_size
+socks5_port
+cache_refresh
+socks5_methods
+get_rc
+valid_lookup
+dns
+yp
+nis
+nisplus
+translate_lookup
+add_rc_list
+add_rc_bin
+consult
+add_rc
+sctp_module
+set_sctp_module
+udp_module
+set_udp_module
+tcp_module
+set_tcp_module
+set_cache_refresh
+set_cache_size
+del_socks_noproxy
+add_socks_noproxy
+del_socks_methods
+add_socks_methods
+set_socks_port
+set_socks_server
+inet_hosts_file_byname
+get_hosts_file
+hosts_file
+set_hosts_file
+resolv_conf
+set_resolv_conf
+udp_payload_size
+set_udp_payload_size
+edns
+set_edns
+usevc
+set_usevc
+set_inet6
+retry
+set_retry
+set_timeout
+recurse
+set_recurse
+set_lookup
+domain
+set_domain
+set_hostname
+del_search
+ins_search
+add_search
+del_alt_ns
+ins_alt_ns
+alt_nameservers
+add_alt_ns
+del_ns
+ins
+ins_ns
+nameservers
+listop
+add_ns
+clear_hosts
+del_host
+add_host
+hosts
+add_hosts
+resolv
+add_resolv
+'$5'
+'$4'
+'$3'
+allow
+'-register_name/2-fun-0-'
+'-register_name/3-fun-0-'
+'-check_dupname/2-lc$^0/1-0-'
+'-unregister_name/1-fun-0-'
+'-re_register_name/2-fun-0-'
+'-re_register_name/3-fun-0-'
+'-register_name_external/2-fun-0-'
+'-register_name_external/3-fun-0-'
+'-trans/4-after$^0/0-0-'
+'-trans_all_known/1-after$^0/0-0-'
+'-check_replies/3-lc$^0/1-0-'
+'-resolved/5-fun-0-'
+'-resolved/5-fun-1-'
+'-resolved/5-fun-2-'
+'-resolved/5-fun-3-'
+'-resolved/5-fun-4-'
+'-start_resolver/2-fun-0-'
+'-do_ops/5-lc$^1/1-1-'
+'-do_ops/5-lc$^0/1-0-'
+'-do_ops/5-fun-0-'
+'-do_ops/5-lc$^2/1-2-'
+'-do_ops/5-lc$^3/1-3-'
+'-do_ops/5-fun-1-'
+'-do_ops/5-lc$^4/1-4-'
+'-do_ops/5-fun-2-'
+'-sync_others/1-fun-0-'
+'-sync_others/1-fun-1-'
+'-del_name/2-lc$^1/1-1-'
+'-del_name/2-lc$^0/1-0-'
+locker_exited
+'-init_the_locker_fun/1-fun-0-'
+'-exclude_known/2-lc$^0/1-0-'
+'-delete_lock/2-fun-0-'
+'-pid_locks/1-fun-0-'
+'-pid_locks/1-lc$^0/1-0-'
+'-send_again/1-fun-0-'
+'-start_sync/2-fun-0-'
+'-sync_init/2-fun-0-'
+'-sync_loop/2-fun-0-'
+'-start_the_registrar/0-fun-0-'
+'-do_monitor/1-fun-0-'
+allow_tuple_fun
+do_monitor
+unexpected_message
+loop_the_registrar
+start_the_registrar
+get_own_nodes_with_errors
+get_own_nodes
+check_sync_nodes
+synced
+sync_loop
+sync_init
+start_sync
+new_node_name
+change_our_node_name
+send_again
+uniform
+seed
+random_seed
+random_sleep
+get_names
+handle_nodedown
+rpid_is_locking
+pid_locks
+delete_lock
+pid_is_locking
+unlink_pid
+dounlink_ext
+dolink_ext
+notify_all_name
+global_name_conflict
+random_notify_name
+random_exit_name
+minmax
+resolve_it
+exchange_names
+reset_node_state
+kill_resolver
+cancel_locker
+split_node
+is_node_local
+remove_node2
+remove_node
+find_node_tag2
+find_node_tag
+the_boss
+delete_global_lock
+call_fun
+exclude_known
+random_element
+update_locker_known
+lock_rejected
+locker_failed
+locker_succeeded
+rejected
+locker_trace
+delete_nonode
+not_ok
+lock_nodes_safely
+locker_lock_id
+select_node
+him
+no_fun
+lock_set
+cancel
+remove_from_known
+do_trace
+the_locker_message
+loop_the_locker
+init_the_locker_fun
+start_the_locker
+delete_global_name
+delete_global_name2
+delete_global_name_keep_pid
+del_name
+extra_info
+lock_still_set
+insert_global_name
+sync_other
+global_connect_retries
+sync_others
+do_ops
+kill_monitor_proc
+rem_lock
+remove_lock
+handle_del_lock
+is_lock_set
+is_global_lock_set
+ins_lock
+insert_lock
+can_set_lock
+handle_set_lock
+ins_name_ext
+ins_name
+resend_pre_connect
+resolver
+start_resolver
+do_whereis
+cancel_resolved_locker
+ops
+added
+add_to_known
+lock
+resolve
+wait_lock
+lock_id
+pre_connect
+his_the_locker
+prot_vsn
+check_replies
+local_lock_check
+set_lock_on_nodes
+lock_on_known_nodes
+set_lock_known
+send_high_level_trace
+wait_high_level_trace
+nodes_changed
+to_external
+symmetric_partition
+high_level_trace
+registrar_died
+locker_died
+new_resolver
+no_longer_a_pid
+locker
+trace_message
+extra_nodedown
+new_nodes
+sync_tag_his
+exit_resolver
+exchange
+exchange_ops
+save_ops
+resolved
+lock_is_set
+init_connect
+sync_tag_my
+in_sync
+async_del_name
+async_del_lock
+get_names_ext
+high_level_trace_start
+high_level_trace_stop
+get_protocol_version
+high_level_trace_get
+get_synced
+get_known
+register_ext
+trans_all_known
+connect_all
+no_trace
+global_pid_ids
+global_names_ext
+global_locks
+trans
+del_lock
+set_lock
+unregister_name_external
+register_name_external
+global_names
+registered_names
+re_register_name
+global_multi_name_action
+global_pid_names
+check_dupname
+registrar
+node_disconnected
+'-handle_cast/2-fun-0-'
+'-handle_call_call/6-fun-0-'
+'-proxy_user/0-fun-0-'
+'-do_call/3-fun-0-'
+'-do_multicall/5-fun-0-'
+'-async_call/4-fun-0-'
+'-parallel_eval/1-lc$^0/1-0-'
+pinfo
+build_args
+pmap
+map_nodes
+parallel_eval
+promise_reply
+do_yield
+nb_yield
+async_call
+safe_multi_server_call
+multi_server_call
+do_multicall
+multicall
+eval_everywhere
+rpc_check
+rpc_check_t
+local_call
+proxy_user_flush
+proxy_user_loop
+rex_proxy_user
+proxy_user
+set_group_leader
+handle_call_call
+nonexisting_name
+sbcast
+block_call
+beam_flatten
+beam_dict
+beam_block
+core_pp
+core_lib
+beam_except
+core_parse
+beam_receive
+cerl_clauses
+beam_dead
+beam_split
+beam_bool
+core_lint
+rec_env
+v3_codegen
+v3_core
+beam_disasm
+beam_listing
+beam_jump
+sys_pre_attributes
+erl_bifs
+sys_core_fold_lists
+v3_kernel
+cerl_trees
+core_scan
+sys_core_inline
+beam_utils
+v3_kernel_pp
+beam_a
+beam_z
+v3_life
+sys_pre_expand
+beam_validator
+cerl_inline
+sys_core_dsetel
+beam_bsm
+beam_peep
+beam_trim
+beam_type
+beam_clean
+beam_asm
+cerl
+sys_core_fold
+cerl_sets
+beam_opcodes
+on_load_failure
+sticky_directory
+bad_name
+bad_directory
+'-start_link/1-fun-0-'
+'-init/3-fun-0-'
+'-get_user_lib_dirs_1/1-lc$^0/1-0-'
+'-handle_call/3-fun-5-'
+'-handle_call/3-lc$^0/1-0-'
+'-choose_bundles/1-lc$^0/1-0-'
+'-choose_bundles/1-lc$^1/1-1-'
+'-vsn_to_num/1-lc$^0/1-0-'
+'-is_vsn/1-fun-0-'
+'-is_numstr/1-fun-0-'
+'-exclude/2-lc$^0/1-0-'
+'-archive_subdirs/1-fun-0-'
+'-try_archive_subdirs/3-fun-0-'
+'-stick_dir/3-fun-0-'
+'-stick_dir/3-fun-1-'
+'-handle_on_load/4-fun-0-'
+'-finish_on_load/3-lc$^0/1-0-'
+'-finish_on_load_1/5-lc$^0/1-0-'
+'-finish_on_load_report/2-fun-0-'
+to_atom
+strip_mod_info
+all_l
+finish_on_load_report
+finish_on_load_1
+finish_on_load
+pending_on_load_1
+pending_on_load
+handle_on_load
+cpc_init
+cpc_request_gc
+cpc_request
+cpc_sched_kill
+cpc_sched_kill_waiting
+cpc_handle_cpc
+cpc_list_rm
+cpc_handle_down
+cpc_recv
+cpc_kill
+cpc_static
+check_proc_code
+do_soft_purge
+do_purge
+mod_to_bin
+load_file_1
+int_list
+hipe_result_to_status
+try_load_module_3
+try_load_module_2
+try_load_module_1
+try_load_module
+modp
+do_load_binary
+get_mods
+sticky
+'bad request to code'
+priv
+do_dir
+lookup_name
+delete_name_dir
+delete_name
+replace_name
+del_ebin
+check_pars
+replace_path1
+insert_old_shadowed
+del_path1
+try_archive_subdirs
+all_archive_subdirs
+archive_subdirs
+insert_name
+code_names
+init_namedb
+maybe_update
+do_add
+do_check_path
+check_path
+get_name2
+get_name1
+get_name
+exclude
+get_arg
+add_pa_pz
+add1
+strip_path
+excl
+exclude_pa_pz
+pz
+pa
+add_loader_path
+try_ebin_dirs
+choose
+split2
+split1
+is_numstr
+is_vsn
+vsn_to_num
+create_bundle
+choose_bundles
+filter_mods
+locate_mods
+update_cache
+rehash_cache
+code_cache
+create_cache
+do_mod_call
+app
+obj
+unknown_system_msg
+change_code
+resume
+do_sys_cmd
+suspend_loop
+gen_reply
+code_call
+split_paths
+get_user_lib_dirs_1
+get_user_lib_dirs
+any_native_code_loaded
+code_path_cache
+no_cache
+'-characters_to_binary_int/3-fun-0-'
+'-i_trans/1-fun-1-'
+'-i_trans/1-fun-2-'
+'-i_trans/1-fun-5-'
+'-i_trans/1-fun-0-'
+'-i_trans/1-fun-3-'
+'-i_trans/1-fun-4-'
+'-i_trans/1-fun-6-'
+'-i_trans/1-fun-7-'
+'-i_trans_chk/1-fun-1-'
+'-i_trans_chk/1-fun-2-'
+'-i_trans_chk/1-fun-5-'
+'-i_trans_chk/1-fun-0-'
+'-i_trans_chk/1-fun-3-'
+'-i_trans_chk/1-fun-4-'
+'-i_trans_chk/1-fun-6-'
+'-i_trans_chk/1-fun-7-'
+'-o_trans/1-fun-1-'
+'-o_trans/1-fun-2-'
+'-o_trans/1-fun-3-'
+'-o_trans/1-fun-4-'
+'-o_trans/1-fun-7-'
+'-o_trans/1-fun-8-'
+'-o_trans/1-fun-0-'
+'-o_trans/1-fun-5-'
+'-o_trans/1-fun-6-'
+'-o_trans/1-fun-9-'
+'-o_trans/1-fun-10-'
+do_i_utf32_little
+do_i_utf32_big
+do_i_utf16_little
+do_i_utf16_big
+do_i_utf8
+do_i_utf32_little_chk
+do_i_utf32_big_chk
+do_i_utf16_little_chk
+do_i_utf16_big_chk
+do_i_utf8_chk
+do_o_binary2
+do_o_binary
+o_trans
+i_trans_chk
+i_trans
+ml_map
+cbv
+utf32
+utf16
+encoding_to_bom
+bom_to_encoding
+do_characters_to_list
+new_stacktrace
+'-unix_cmd/1-fun-0-'
+'-start_port/0-fun-0-'
+validate1
+validate
+mk_cmd
+unix_get_data
+start_port_srv_loop
+start_port_srv_handle
+start_port_srv
+os_cmd_port_creator
+start_port
+unix_cmd
+windows
+cmd
+extensions
+reverse_element
+split_path
+can_be_full_name
+to_lower
+verify_executable
+find_executable1
+find_executable
+local_address_not_found
+assertion_failed
+'-load_native_code/3-after$^0/0-0-'
+'-post_beam_load/2-after$^0/0-0-'
+'-load_module/4-after$^0/0-0-'
+'-load/3-after$^0/0-0-'
+set_native_address_in_fe
+'-load_common/5-fun-0-'
+'-calculate_addresses/3-lc$^0/1-0-'
+load_fe
+'-offsets_to_addresses/2-lc$^0/1-0-'
+'-export_funs/5-lc$^0/1-0-'
+'-patch_consts/4-fun-0-'
+'-sort_and_write/5-fun-0-'
+'-sort_on_representation/1-lc$^0/1-0-'
+write_u32
+'-write_word_fun/1-fun-1-'
+write_u64
+'-write_word_fun/1-fun-0-'
+'-enter_datum/4-lc$^0/1-1-'
+'-enter_datum/4-lc$^1/1-0-'
+'-patch_to_emu_step1/1-lc$^0/1-0-'
+'-mark_referred_from/1-fun-0-'
+redirect_referred_from
+'-redirect/1-fun-0-'
+'-remove_refs_from/1-fun-0-'
+update_code_size
+enter_code
+assert_local_patch
+mfa_to_address
+find_na_or_make_stub
+get_native_address
+redirect
+mark_referred_from
+get_refs_from
+patch_to_emu_step2
+invalidate_funinfo_native_addresses
+patch_to_emu_step1
+patch_to_emu
+address_to_mfa_lth
+add_ref
+constant_not_found
+find_const
+write_u8
+write_bytes
+write_words
+bytes_to_32
+term_to_word
+merge_term
+enter_datum
+enter_data
+alloc_data
+create_data_segment
+primop_address
+bif_address
+write_word_fun
+patch_insn
+patch_instr
+sort_on_representation
+sort_and_write
+sorted
+patch_label_or_labels
+patch_consts
+load_mfa
+patch_load_mfa
+get_fe
+fun_to_address
+patch_closure
+c_const
+constant
+local_function
+remote_function
+patch_load_address
+enter_sdesc
+patch_sdesc
+atom_to_word
+patch_atom
+patch_offset
+patch_all_offsets
+patch_all
+patch_call_insn
+patch_mfa_call_list
+patch_bif_call_list
+patch_call
+remote
+load_address
+load_atom
+sdesc
+x86_abs_pcrel
+patch
+set_native_address
+set_funinfo_native_address
+export_funs
+closure
+find_closure_refs
+find_closure_patches
+offsets_to_addresses
+calculate_addresses
+fundef
+trampoline_map_lookup
+trampoline_map_get
+mk_trampoline_map
+add_callee_mfas
+no_erts_trampolines
+needs_trampolines
+find_callee_mfas
+hipe_assert_code_area
+closures_to_patch
+check_crc
+load_common
+load_nosmp
+hipe_patch_closures
+load_module_nosmp
+version_check
+post_beam_load
+bad_crc
+no_native
+load_native_code
+word_size
+arm
+ppc64
+powerpc
+ultrasparc
+map_1
+iterator_1_from
+iterator_1
+from_orddict
+enter
+update_1
+get_1
+is_defined_1
+lookup_1
+fold_1
+is_subset_2
+is_subset_1
+is_subset
+difference_2
+difference_1
+difference
+is_disjoint_1
+is_disjoint
+intersection_list
+intersection_2
+intersection_1
+intersection
+union_list
+balance_revlist_1
+balance_revlist
+push
+union_2
+union_1
+mk_set
+union
+iterator_from
+iterator
+to_list_1
+largest_1
+largest
+take_largest1
+take_largest
+smallest_1
+smallest
+take_smallest1
+take_smallest
+delete_1
+delete_any
+from_ordset
+balance_list_1
+balance_list
+balance
+key_exists
+insert_1
+is_member_1
+is_member
+singleton
+is_empty
+source_file_not_found
+'-basenameb/2-lc$^0/1-0-'
+'-unix_splitb/1-lc$^0/1-0-'
+'-win32_splitb/1-lc$^2/1-3-'
+'-win32_splitb/1-lc$^1/1-2-'
+'-win32_splitb/1-lc$^0/1-1-'
+'-win32_splitb/1-lc$^3/1-0-'
+filename_string_to_binary
+major_os_type
+make_abs_path
+readable_file
+try_rule
+source_by_rules
+get_source_file
+d
+export_all
+outdir
+filter_options
+try_file
+source_search_rules
+find_src
+separators
+win32_nativename
+nativename
+win32_split
+unix_split
+win32_splitb
+fix_driveletter
+unix_splitb
+rootname2
+rootname
+maybe_remove_dirsep
+join1b
+join1
+extension
+dirjoin1
+dirjoin
+fstrip
+skip_prefix
+basename1
+basenameb
+win_basenameb
+absname_join
+read_only
+the
+generated
+a
+parse_transform
+transformed
+be
+should
+real
+with
+called
+transform_error
+'-foldl/3-after$^0/0-0-'
+'-foldr/3-after$^0/0-0-'
+blog_terms
+'-tab2file/3-fun-0-'
+log_terms
+'-tab2file/3-fun-1-'
+'-tab2file/3-after$^0/0-0-'
+'-file2tab/2-after$^0/0-0-'
+'-file2tab/2-fun-0-'
+'-file2tab/2-fun-1-'
+'-table/2-fun-1-'
+'-table/2-fun-0-'
+'-table/2-fun-2-'
+'-table/2-fun-3-'
+'-table/2-fun-4-'
+'-table/2-fun-5-'
+'-table/2-fun-6-'
+'-table/2-fun-7-'
+'-table/2-fun-8-'
+'-table/2-lc$^1/1-1-'
+'-table/2-lc$^0/1-0-'
+'-table/2-fun-9-'
+'-qlc_next/2-fun-0-'
+'-qlc_prev/2-fun-0-'
+'-qlc_select/1-fun-0-'
+'-i/0-fun-0-'
+'-hform/6-lc$^0/1-0-'
+re_match
+print_re_num
+re_display
+re_search
+substr
+do_display_item
+do_display_items
+do_display
+print_number
+strip
+right
+nonl
+line_string
+get_line
+put_chars
+choice
+'(c)ontinue (q)uit (p)Digits (k)ill /Regexp -->'
+'EOT  (q)uit (p)Digits (k)ill /Regexp -->'
+eot
+pad_right
+hform
+is_reg
+prinfo2
+prinfo
+tabs
+mem
+i
+listify
+default_option
+n_objects
+traverse
+options
+qlc_select
+qlc_prev
+qlc_next
+is_unique_objects
+is_sorted_key
+num_of_objects
+table_info
+pre_fun
+post_fun
+info_fun
+format_fun
+key_equality
+lookup_fun
+first_next
+last_prev
+tabfile_info
+cannot_create_table
+create_tab
+load_table
+scan_for_endinfo
+md5_and_convert
+major_version
+minor
+major
+get_header_data
+chunk
+wrap_chunk
+bchunk
+wrap_bchunk
+verify_header_mandatory
+count_mandatory
+verify
+parse_f2t_opts
+invalid_object_count
+checksum_error
+do_read_and_verify
+read_error
+unsupported_file_version
+repaired
+file2tab
+object_count
+md5sum
+parse_ft_info_options
+malformed_option
+unknown_option
+parse_ft_options
+md5terms
+ft_options_to_list
+dump_file
+eaccess
+count
+filetab_options
+extended_info
+badtab
+tab2file
+do_filter
+tab2list
+init_table_sub
+end_of_input
+init_table_continue
+init_table
+test_ms
+from_ets
+to_dets
+to_ets
+from_dets
+do_foldr
+transform_from_shell
+fun_data
+fun2ms
+repair_continuation
+match_spec_run
+insert_replaced
+get_opts_replace
+badopt
+trim_all
+trim
+get_opts_split
+splitat
+do_insert
+do_replace
+do_split
+'-load_code_server_prerequisites/0-lc$^0/1-0-'
+'-set_primary_archive/4-lc$^0/1-0-'
+'-load_native_code_for_all_loaded/1-fun-0-'
+load_all_native_1
+load_all_native
+chunk_name
+load_native_code_for_all_loaded
+has_ext
+filter2
+decorate
+build
+clash
+is_cached
+which2
+which
+minimal
+do_s
+compiler
+do_stick_dirs
+load_code_server_prerequisites
+stick
+interactive
+get_mode
+rehash
+replace_path
+del_path
+add_pathsa
+add_pathsz
+add_paths
+add_patha
+add_pathz
+add_path
+is_sticky
+unstick_mod
+stick_mod
+unstick_dir
+stick_dir
+priv_dir
+compiler_dir
+dir
+lib_dir
+root_dir
+all_loaded
+get_object_code
+soft_purge
+purge
+load_native_sticky
+load_native_partial
+load_binary
+load_abs
+already_present
+'-update_chsp/2-fun-0-'
+'-terminate_dynamic_children/3-fun-0-'
+'-terminate_dynamic_children/3-fun-1-'
+'-terminate_dynamic_children/3-fun-2-'
+'-terminate_dynamic_children/3-fun-3-'
+'-monitor_dynamic_children/2-fun-0-'
+'-monitor_dynamic_children/2-fun-1-'
+'-wait_dynamic_children/5-fun-0-'
+invalid_module
+'-validMods/1-fun-0-'
+report_progress
+nb_children
+mfargs
+restart_type
+child_type
+extract_child
+supervisor_report
+errorContext
+offender
+inPeriod
+add_restart
+child_to_spec
+invalid_modules
+dynamic
+validMods
+invalid_shutdown
+validShutdown
+invalid_mfa
+validFunc
+validName
+invalid_child_type
+validChildType
+missing_id
+missing_start
+do_check_childspec
+invalid_child_spec
+check_childspec
+duplicate_child_name
+check_startspec
+supname
+invalid_period
+validPeriod
+invalid_intensity
+validIntensity
+invalid_strategy
+validStrategy
+do_check_flags
+check_flags
+strategy
+period
+intensity
+set_flags
+init_state
+remove_child
+do_replace_child
+replace_child
+is_element
+is_dynamic_pid
+get_dynamic_child
+split_child
+del_child
+state_del_child
+is_set
+dynamic_child_args
+dynamics_db
+add_element
+save_dynamic_child
+save_child
+del_element
+wait_dynamic_children
+monitor_dynamic_children
+fold
+terminate_dynamic_children
+monitor_child
+brutal_kill
+terminate_children
+store
+rest_for_one
+reached_max_restart_intensity
+apply_after
+try_again
+child_terminated
+do_restart
+handle_start_child
+update_chsp
+update_childspec1
+update_childspec
+bad_flags
+invalid_type
+count_child
+specs
+supervisors
+workers
+restarting
+do_start_child_i
+do_start_child
+failed_to_start_child
+start_children
+bad_start_spec
+init_dynamic
+start_spec
+init_children
+supervisor_data
+simple_one_for_one
+get_callback_module
+try_again_restart
+check_childspecs
+count_children
+which_children
+get_childspec
+delete_child
+restart_child
+start_child
+distribution_not_changed
+one_for_all
+kernel_safe_sup
+one_for_one
+global_groups
+is_gg_changed
+global_groups_removed
+global_groups_added
+global_groups_changed
+do_global_groups_change
+is_dist_changed
+distribution_changed
+do_distribution_change
+start_pg2
+start_disk_log
+boot_server_slaves
+get_boot_args
+start_boot_server
+start_dist_ac
+nostick
+get_code_args
+worker
+bad_config
+get_error_logger_type
+shutdown_error
+'-terminate/2-lc$^0/1-0-'
+'-kill_children/1-fun-0-'
+exit_after
+set_timer
+kill_all_procs_1
+kill_all_procs
+kill_children
+terminate_child
+terminate_child_i
+get_child_i
+prep_stop
+loop_it
+start_supervisor
+start_the_app
+start_it_new
+bad_return
+start_it_old
+bad_keys
+child
+terminate_loop
+main_loop
+io_request
+init_loop
+get_child
+'-ensure_all_started/2-lc$^0/1-0-'
+permit_only_loaded_application
+permit
+takeover_application
+ensure_started
+ensure_all_started
+load1
+'-decode_msg/8-fun-0-'
+'-do_multi_call/4-fun-0-'
+'-handle_msg/6-fun-0-'
+'-handle_msg/6-fun-1-'
+'-handle_common_reply/7-fun-0-'
+'-handle_common_reply/7-fun-1-'
+'-reply/5-fun-0-'
+get_debug
+could_not_find_registered_name
+name_to_pid
+process_was_not_started_by_proc_lib
+get_parent
+process_not_registered_via
+process_not_registered_globally
+process_not_registered
+get_proc_name
+dbg_opts
+print_log
+handle_common_reply
+try_terminate
+try_handle_call
+try_dispatch
+start_monitor
+rec_nodes_rest
+rec_nodes
+send_nodes
+do_multi_call
+do_send
+decode_msg
+unregister_name
+bad_return_value
+multi_call
+do_abcast
+abcast
+'$gen_cast'
+cast_msg
+do_cast
+'$gen_call'
+'-concat/1-fun-0-'
+'-filter/2-lc$^0/1-0-'
+rufmerge2_2
+rufmerge2_1
+ufmerge2_2
+ufmerge2_1
+rufmergel
+ufmergel
+ufsplit_2
+ufsplit_1_1
+ufsplit_1
+rfmerge2_2
+rfmerge2_1
+fmerge2_2
+fmerge2_1
+rfmergel
+fmergel
+fsplit_2_1
+fsplit_2
+fsplit_1_1
+fsplit_1
+rukeymerge2_2
+rukeymerge2_1
+ukeymerge2_2
+ukeymerge2_1
+rukeymerge3_21_3
+rukeymerge3_12_3
+rukeymerge3_2
+rukeymerge3_1
+ukeymerge3_21_3
+ukeymerge3_12_3
+ukeymerge3_2
+ukeymerge3_1
+rukeymergel
+ukeymergel
+ukeysplit_2
+ukeysplit_1_1
+ukeysplit_1
+rkeymerge2_2
+rkeymerge2_1
+keymerge2_2
+keymerge2_1
+rkeymerge3_21_3
+rkeymerge3_12_3
+rkeymerge3_2
+rkeymerge3_1
+keymerge3_21_3
+keymerge3_12_3
+keymerge3_2
+keymerge3_1
+rkeymergel
+keymergel
+keysplit_2_1
+keysplit_2
+keysplit_1_1
+keysplit_1
+rumerge2_2
+rumerge2_1
+umerge2_2
+umerge2_1
+rumerge3_21_3
+rumerge3_12_3
+rumerge3_2
+rumerge3_1
+umerge3_21_3
+umerge3_12_3
+umerge3_2
+umerge3_1
+rumergel
+umergel
+usplit_2_1
+desc
+usplit_2
+usplit_1_1
+asc
+usplit_1
+rmerge2_2
+rmerge2_1
+merge2_2
+merge2_1
+rmerge3_21_3
+rmerge3_12_3
+rmerge3_2
+rmerge3_1
+merge3_21_3
+merge3_12_3
+merge3_2
+merge3_1
+rmergel
+mergel
+split_2_1
+split_2
+split_1_1
+split_1
+dropwhile
+takewhile
+mapfoldr
+mapfoldl
+filtermap
+partition
+foldr
+flatmap
+rumerge3
+umerge3
+rumerge
+umerge
+usort_1
+usort
+keymap
+rukeymerge
+ukeymerge
+ukeysort_1
+ukeysort
+rkeymerge
+keymerge
+keysort_1
+keystore2
+keytake
+keyreplace3
+keydelete3
+flatlength
+do_flatten
+thing_to_list
+rmerge
+rmerge3
+merge3
+sort_1
+zipwith3
+zipwith
+unzip3
+zip3
+sublist_2
+sublist
+duplicate
+sum
+seq_loop
+seq
+droplast
+suffix
+prefix
+nthtail
+nth
+open_file
+only_loaded
+'configuration must be a list ended by <dot><whitespace>'
+'-start/1-fun-0-'
+'-loaded_applications/0-fun-0-'
+'-get_all_env/1-fun-0-'
+'-handle_call/3-fun-2-'
+'-handle_call/3-fun-4-'
+keystore
+'-handle_call/3-fun-3-'
+'-handle_call/3-fun-0-'
+'-handle_call/3-fun-1-'
+'-terminate/2-fun-0-'
+'-load/2-fun-0-'
+'-unload/2-fun-0-'
+'-check_start_cond/4-fun-0-'
+'-start_appl/3-fun-0-'
+'-prim_parse/2-fun-0-'
+'-do_change_apps/3-fun-0-'
+'-do_change_apps/3-fun-1-'
+'-get_cmd_env/1-fun-0-'
+'-add_env/2-fun-0-'
+'-do_config_diff/3-fun-0-'
+'-check_conf/0-fun-0-'
+'-reply_to_requester/3-fun-0-'
+default_encoding
+read_encoding_from_binary
+file_binary_to_list
+test_make_apps
+test_do_change_appl
+test_change_apps
+update_permissions
+reply_to_requester
+exited
+info_exited
+started_at
+info_started
+config_error
+strip_comment
+only_ws
+parse_file
+done
+tokens
+scan_file
+load_file
+dirname
+basename
+check_conf_sys
+config
+check_conf
+do_config_diff
+application_not_found
+module_not_defined
+sort
+do_config_change
+do_prep_config_change
+check_user
+del_env
+add_env
+get_env_key
+merge_app_env
+change_app_env
+merge_env
+get_env_i
+handle_make_term_error
+make_term
+conv
+get_cmd_env
+get_opt
+do_change_appl
+is_loaded_app
+do_change_apps
+invalid_options
+badstartspec
+invalid_name
+make_appl_i
+parse_term
+splitwith
+prim_parse
+prim_consult
+format_error
+non_existing
+where_is_file
+make_appl
+bad_application
+get_appl_name
+get_restart_type
+nd
+invalid_restart_type
+validRestartType
+keyreplaceadd
+ksd
+keysearchdelete
+stopped
+stop_appl
+start_appl
+cast
+init_starter
+spawn_starter
+do_start
+check_start_cond
+do_load_application
+get_loaded
+del_cntrl
+ac_application_run
+notify_cntrl_started
+cntrl
+shutdown_func
+application_terminated
+match_delete
+keyreplace
+ac_application_not_run
+not_running
+stop_it
+failover
+takeover
+ac_load_application_reply
+ac_start_application_reply
+ac_change_application_req
+application_start_failure
+transient
+temporary
+handle_application_started
+application_started
+handle_cast
+loading
+start_p_false
+persistent
+permissions
+ac_start_application_req
+distributed_application
+ac_application_unloaded
+noreply
+ac_load_application_req
+not_started
+ac_application_stopped
+keydelete
+check_para
+check_distributed
+distributed
+check_para_kernel
+check_conf_data
+'load error'
+enter_loop
+unset_env
+get_value
+set_env
+permit_application
+get_application_module
+get_application
+get_master
+start_type
+get_all_key
+get_pid_all_key
+appl_data
+appl
+start_phases
+get_key
+get_pid_key
+'$2'
+'$1'
+get_all_env
+get_pid_all_env
+get_env
+get_pid_env
+config_change
+prep_config_change
+change_application_data
+control_application
+ac_tab
+loaded_applications
+which_applications
+stop_application
+bad_environment_value
+start_boot_application
+start_application
+unload_application
+load_application
+'-format_exception/4-fun-0-'
+'-pp_fun/1-fun-0-'
+'-do_stop/2-fun-0-'
+modifier
+format_tag
+pp_fun
+format_mfa
+format_exception
+format_rep
+format_report
+unlimited
+badrpc
+proc_info
+get_my_name
+translate_process_info
+get_process_info
+no_trap
+adjacents
+visit
+max_neighbours
+neighbours
+get_initial_call
+make_neighbour_report
+neighbour
+make_neighbour_reports1
+linked_info
+get_dictionary
+clean_dict
+get_cleaned_dictionary
+ancestors
+get_ancestors
+my_info_1
+my_info
+crash_report
+trans_init
+raw_init_call
+raw_initial_call
+translate_initial_call
+make_dummy_args
+sync_wait_mon
+ack
+sync_wait
+exit_p
+init_p_do_apply
+'$initial_call'
+'$ancestors'
+ensure_link
+wake_up
+spawn_opt_mon
+spawn_mon
+check_for_monitor
+init_p
+'-call/4-fun-0-'
+'-stop/3-fun-0-'
+spawn_opts
+register_name
+name_register
+whereis_name
+where
+do_for_proc
+wait_resp
+do_call
+init_it2
+do_spawn
+already_started
+bad_module
+module_not_found
+'-fetch_msg/5-fun-0-'
+'-do_unlink/2-fun-0-'
+parent_terminated
+'-terminate_supervised/4-fun-0-'
+code_change
+'-system_code_change/4-fun-0-'
+'-system_get_state/1-lc$^0/1-0-'
+'-system_replace_state/2-lc$^0/1-0-'
+'-the_handlers/1-lc$^0/1-0-'
+'-get_modules/1-lc$^0/1-0-'
+'-format_status/2-lc$^0/1-0-'
+optional_callbacks
+callbacks
+behaviour_info
+items
+format_status_header
+stop_handlers
+the_handlers
+format_status
+'function not exported'
+'module could not be loaded'
+is_loaded
+report_error
+gen_event_EXIT
+report_terminate
+do_terminate
+server_call_update
+replace
+server_call
+new_handler
+do_swap
+remove_handler
+server_update
+server_notify
+swapped
+split_and_terminate
+s_s_h
+server_swap_handler
+server_delete_handler
+server_add_sup_handler
+handler
+server_add_handler
+print_event
+system_replace_state
+system_get_state
+zf
+system_code_change
+system_terminate
+system_continue
+filter
+terminate_supervised
+do_unlink
+reply
+terminate_server
+get_modules
+handle_debug
+handle_system_msg
+fetch_msg
+wake_hib
+call1
+swap_sup_handler
+sync_notify
+add_sup_handler
+via
+debug_options
+init_it
+nolink
+'no callback module'
+bad_query
+no_log_file
+allready_have_logfile
+display2
+add_node
+tag_event
+handle_event2
+lost_messages
+swap
+handle_call
+handle_info
+handle_event
+go_back
+which_handlers
+simple_logger
+delete_report_handler
+add_handler
+add_report_handler
+delete_handler
+logfile
+swap_handler
+error_info
+info_report
+std_info
+std_warning
+warning_report
+format
+error_msg
+stop_error
+report_problem
+send_shutdown
+check_callback
+check_system
+get_heart_cmd
+send_heart_cmd
+send_heart_beat
+do_cycle_port_program
+check_schedulers
+validate_options
+no_reboot_shutdown
+port_terminated
+bad_options
+bad_cmd
+bad_callback
+wait_ack
+bad_heart_flag
+check_start_heart
+get_heart_timeouts
+port_problem
+start_portprogram
+wait
+cycle
+get_options
+set_options
+clear_callback
+get_callback
+set_callback
+clear_cmd
+get_cmd
+set_cmd
+start_error
+no_heart
+wait_for_init_ack
+'$handle_undefined_function'
+call_undefined_function_handler
+stub_function
+raise_undef_exception
+'no -init_debug flag'
+'no -mode flag'
+erlangrc
+start_boot
+applications_loaded
+pool_master
+take_over_monitor
+rsh_starter
+timer_server
+stdlib
+load
+init_kernel_started
+mod
+maxP
+maxT
+tty
+included_applications
+applications
+ddll_server
+os_server
+rex
+net_sup
+kernel_sup
+global_name_server
+fixtable_server
+file_server_2
+boot_server
+modules
+vsn
+description
+start_link
+modules_loaded
+win32reg
+sys
+supervisor_bridge
+supervisor
+sofs
+slave
+shell_default
+shell
+sets
+rand
+queue
+qlc_pt
+qlc
+proplists
+proc_lib
+pool
+otp_internal
+ordsets
+orddict
+ms_transform
+log_mf_h
+lib
+io_lib_pretty
+io_lib_fread
+io_lib_format
+io_lib
+gen_fsm
+gen_event
+gen
+gb_trees
+gb_sets
+filename
+filelib
+file_sorter
+eval_bits
+escript
+error_logger_tty_h
+error_logger_file_h
+erl_tar
+erl_pp
+erl_posix_msg
+erl_lint
+erl_internal
+erl_expand_records
+erl_compile
+erl_bits
+erl_anno
+epp
+edlin_expand
+edlin
+digraph_utils
+digraph
+dict
+dets_v9
+dets_v8
+dets_utils
+dets_sup
+dets_server
+dets
+calendar
+c
+beam_lib
+base64
+array
+wrap_log_reader
+user_sup
+user_drv
+standard_error
+rpc
+ram_file
+pg2
+net_adm
+net
+kernel_config
+kernel
+inet_udp
+inet_tcp_dist
+inet_sctp
+inet_res
+inet_parse
+inet_hosts
+inet_gethost_native
+inet_dns
+inet_db
+inet_config
+inet6_udp
+inet6_tcp_dist
+inet6_sctp
+hipe_unified_loader
+group
+global_search
+global_group
+gen_udp
+gen_tcp
+gen_sctp
+file_server
+file_io_server
+erl_reply
+erl_epmd
+erl_distribution
+erl_boot_server
+dist_util
+dist_ac
+disk_log_sup
+disk_log_server
+disk_log_1
+disk_log
+code_server
+application_starter
+application_master
+application_controller
+application
+preloaded
+'no -boot flag'
+noinput
+noshell
+mnesia
+setcookie
+home
+progname
+root
+'no -path flag'
+'no -id flag'
+'no -hosts flag'
+'no -loader flag'
+'-noinput'
+'-noshell'
+'-mnesia'
+'-setcookie'
+'-name'
+'-home'
+'-progname'
+std_low_alloc
+ll_low_alloc
+mseg_alloc
+'-spawn_opt/5-fun-0-'
+gc_info
+sched_wall_time
+receive_allocator
+insert_info
+instance
+insert_instance
+mk_res_list
+get_alloc_info
+atom_space
+loaded_code
+module_refs
+fun_table
+export_list
+export_table
+module_table
+process_table
+link_lh
+ets_misc
+atom_table
+aa_mem_data
+schedulers
+receive_emd
+eheap_alloc
+binary_alloc
+ets_alloc
+fix_alloc
+au_mem_data
+is_low_alloc
+fix_types
+fix_proc
+accessor_bif_timer
+bif_timer
+hl_ptimer
+ll_ptimer
+msg_ref
+nlink_sh
+monitor_sh
+proc
+get_fix_proc
+sbcs
+mbcs_pool
+mbcs
+blocks_size
+get_blocks_size
+memory_is_supported
+get_memval
+need_mem_info
+need_mem_info_list
+get_mem_data
+memory_result_list
+rvrs
+processor_node
+cput_i2e_tag
+cput_i2e_tag_map
+cput_i2e
+cput_e2i
+logical
+core
+thread
+processor
+cput_e2i_clvl
+internal_cpu_topology
+get_cookie
+auth
+set_cookie
+ignored
+passive_cnct
+send_nosuspend
+fun_info_1
+disconnect
+disconnect_node
+is_well_formed_list
+crasher
+remote_spawn_error
+fault
+no_link
+gen_server
+garbage_collect_message_area
+get_gc_opts
+get_cpc_opts
+bitsize
+einal
+clean
+file_not_found
+'no server found'
+ebusy
+no_multi_get
+invalid_current_directory
+'-start/3-fun-0-'
+'-handle_get_files/4-fun-0-'
+'-handle_get_file/3-fun-0-'
+'-handle_get_file/3-fun-1-'
+'-handle_set_primary_archive/5-fun-0-'
+'-handle_release_archives/1-fun-0-'
+'-handle_list_dir/2-fun-0-'
+'-handle_list_dir/2-fun-1-'
+'-handle_read_file_info/2-fun-0-'
+'-handle_read_file_info/2-fun-1-'
+'-handle_read_link_info/2-fun-0-'
+'-handle_read_link_info/2-fun-1-'
+'-handle_get_cwd/2-fun-0-'
+'-handle_get_cwd/2-fun-1-'
+'-efile_multi_get_file_from_port2/8-fun-0-'
+'-prim_get_file/2-fun-0-'
+'-prim_list_dir/2-fun-0-'
+'-prim_read_file_info/3-fun-0-'
+'-open_archive/4-fun-0-'
+'-ensure_virtual_dirs/6-fun-0-'
+'-ensure_virtual_dirs/6-fun-1-'
+'-foldl_archive/3-fun-0-'
+'-load_prim_archive/3-fun-0-'
+load_prim_archive
+real_path
+normalize
+win32_pathtype
+unix_pathtype
+ose
+pathtype
+absname_vr
+relative
+volumerelative
+absolute
+absname
+ipv4_addr
+ipv4_address
+ipv4_list
+string_split2
+string_split
+string_match
+no_match
+no_split
+do_name_split
+name_split
+path_join
+path_split
+to_strs
+keyins
+keysort
+deep_member
+send_all
+win32
+is_basename
+clear_cache
+cache_new
+foldl_archive
+ensure_virtual_dirs
+open_archive
+apply_archive
+prim_get_cwd
+archive_read_file_info
+prim_read_file_info
+archive_list_dir
+prim_list_dir
+archive_get_file
+archive
+prim_get_file
+prim_set_primary_archive
+cache
+release
+primary
+prim_do_release_archives
+prim_release_archives
+loader_debug
+prim_init
+port_error
+ll_close
+ll_open_set_bind
+ll_udp_open
+ll_tcp_connect
+udp_options
+tcp_timeout
+tcp_options
+inet_stop_port
+inet_get_cwd
+inet_read_link_info
+inet_read_file_info
+inet_list_dir
+inet_send_and_rcv
+inet_get_file_from_port1
+inet_get_file_from_port
+inet_timeout_handler
+inet_exit_port
+find_collect
+find_loop
+connect_master
+find_master
+efile_timeout_handler
+efile_exit_port
+noport
+efile_stop_port
+efile_get_cwd
+efile_read_file_info
+efile_list_dir
+efile_release_archives
+efile_set_primary_archive
+efile_get_file_from_port3
+'prim_load port died'
+efile_get_file_from_port2
+efile_get_file_from_port
+efile_par_get_file
+emfile
+efile_multi_get_file_from_port2
+min
+efile_multi_get_file_from_port
+handle_timeout
+handle_exit
+handle_stop
+handle_get_cwd
+handle_read_link_info
+handle_read_file_info
+handle_list_dir
+handle_release_archives
+handle_set_primary_archive
+handle_get_file
+handle_get_files
+bad_state
+error_report
+std_error
+enotdir
+enoent
+check_file_result
+release_archives
+set_primary_archive
+get_path
+init_ack
+efile
+prim_state
+'-filter_fun/0-fun-0-'
+'-include_acc/3-fun-0-'
+'-get_zip_input/1-fun-0-'
+'-get_zip_input/1-fun-1-'
+'-get_cd_loop/11-fun-0-'
+'-get_cd_loop/11-fun-1-'
+'-get_cd_loop/11-fun-2-'
+pwrite_binary
+pwrite_iolist
+skipper
+skip_iolist
+splitter
+split_iolist
+local_file_header_from_bin
+bad_cd_file_header
+cd_file_header_from_bin
+dos_date_time_to_datetime
+add_extra_info
+cd_file_header_to_file_info
+eocd_and_comment_from_bin
+binary_io
+set_file_info
+prim_file_io
+find_eocd_header
+seek
+bad_eocd
+get_end_of_central_dir
+get_filename_from_b2
+bad_central_directory
+cd_file_header
+get_file_header
+get_cd_loop
+eocd
+get_central_dir
+offset_over_z_data_descriptor
+unsupported_compression
+get_z_all
+bad_local_file_header
+bad_local_file_offset
+local_file_header
+get_z_file
+get_zip_input
+lists_foldl
+include_acc
+illegal_filter
+primzip_file
+do_foldl
+foldl
+primzip
+do_open
+filter_fun_throw
+filter_fun
+prim_zip
+'-compress/1-after$^0/0-0-'
+'-uncompress/1-after$^0/0-0-'
+'-zip/1-after$^0/0-0-'
+'-unzip/1-after$^0/0-0-'
+'-gzip/1-after$^0/0-0-'
+'-gunzip/1-after$^0/0-0-'
+need_dictionary
+arg_mem
+arg_bitsz
+arg_method
+filtered
+huffman_only
+rle
+arg_strategy
+best_speed
+best_compression
+arg_level
+full
+arg_flush
+collect
+gunzip
+gzip
+unzip
+deflated
+zip
+data_error
+uncompress
+finish
+default
+compress
+getQSize
+getBufSize
+setBufSize
+inflateEnd
+inflate_has_more
+stream_end
+inflateChunk
+inflate
+inflateReset
+inflateSync
+inflateSetDictionary
+inflateInit
+deflateEnd
+deflate
+deflateParams
+deflateReset
+deflateSetDictionary
+deflateInit
+zlib
+use_threads
+'-sendfile/8-after$^0/0-0-'
+'-get_cwd_int/2-fun-0-'
+'-altname_int/2-fun-0-'
+'-read_link_int/2-fun-0-'
+'-read_link_all_int/2-fun-0-'
+'-list_dir_int/2-fun-0-'
+'-list_dir_all_int/2-fun-0-'
+'-list_dir_response/2-lc$^0/1-0-'
+'-drv_close/1-after$^0/0-0-'
+'-drv_command/4-after$^0/0-0-'
+'-drv_command_nt/3-after$^0/0-0-'
+to_seconds
+from_seconds
+plgv
+pathname
+premature_end_of_list
+lists_split
+transform_ldata
+get_uint32
+get_uint64
+sint64
+int_to_int64bytes
+int_to_int32bytes
+file_access
+other
+device
+regular
+symlink
+file_type
+transform_info
+translate_response
+cur
+bof
+lseek_position
+delayed_write
+read_ahead
+open_mode
+port_died
+bad_response_from_port
+drv_get_response
+drv_command_nt
+drv_command
+drv_close
+drv_open
+handle_fname_response_all
+fname
+handle_fname_response
+list_dir_convert_all
+no_translation
+list_dir_convert
+lfname
+list_dir_response
+list_dir_all_int
+list_dir_all
+list_dir_int
+list_dir
+read_link_info_int
+read_link_info
+read_link_all_int
+read_link_all
+read_link_int
+read_link
+make_symlink_int
+make_symlink
+make_link_int
+make_link
+file_info_validate_ctime
+file_info_validate_mtime
+universal
+posix
+file_info_validate_atime
+write_file_info_int
+write_file_info
+altname_int
+altname
+read_file_info_int
+del_dir_int
+del_dir
+make_dir_int
+make_dir
+rename_int
+delete_int
+set_cwd_int
+set_cwd
+get_cwd_int
+get_cwd
+translate_sendfile_flags
+lock_socket
+inet6_tcp
+inet_tcp
+sendfile
+write_file
+read_file
+ipread_s32bu_p32bu
+copy_opened
+truncate
+position
+pread_int
+pread
+enomem
+read_line
+sync
+datasync
+pwrite_int
+pwrite
+allocate
+random
+sequential
+will_need
+dont_need
+no_reuse
+advise
+file_descriptor
+open_int_setopts
+open_int
+bound
+connecting
+accepting
+multicast
+no_pointtopoint
+no_broadcast
+down
+up
+ssl
+term
+busy
+eprotonosupport
+'-bindx/3-lc$^0/1-0-'
+'-comp_ifaddrs/2-lc$^0/1-0-'
+ctl_cmd
+get_ip6
+get_ip4
+get_ip
+get_addrs
+ip6_to_bytes
+ip4_to_bytes
+ip_to_bytes
+utf8_to_characters
+nil
+tree
+ktree_keys
+ktree_update
+ktree_insert
+ktree_get
+is_defined
+ktree_is_defined
+ktree_empty
+len
+split
+rev
+build_iflist
+build_ifaddrs_opts
+build_ifaddrs
+encode_ifname
+enc_time
+dec_status
+dec_stats
+decode_stats
+recv_cnt
+recv_max
+recv_avg
+recv_dvi
+send_cnt
+send_max
+send_avg
+send_oct
+recv_oct
+enc_stats
+encode_stats
+dec_subs
+decode_subs
+enc_subs
+encode_subs
+encode_ifopt_val
+encode_ifopts
+decode_ifopts
+dec_ifopt
+enc_ifopt
+mtu
+broadaddr
+type_ifopt
+merge_fields
+merge_options
+need_template
+dec
+dec_opt_val
+decode_opt_val
+enc_opts
+encode_opts
+enc_opt_val
+encode_opt_val
+enum_name
+enum_val
+enum_names
+enum_vals
+borlist
+dec_value_tuple
+decode
+dec_value
+enc_value_2
+enc_value_tuple
+enc_value_1
+enc_value_default
+enc_value
+loopback
+bool8
+linkaddr
+ether
+sockaddr
+binary_or_uint
+uint8
+uint16
+uint24
+uint32
+sctp_assoc_id
+enum
+bitenumlist
+type_value_2
+type_value_record
+type_value_tuple
+type_value_1
+type_value_default
+record
+type_value
+int
+ip
+uint
+type_opt_1
+type_opt
+dec_opt
+keepalive
+nodelay
+multicast_if
+multicast_ttl
+multicast_loop
+add_membership
+drop_membership
+header
+deliver
+exit_on_close
+high_watermark
+low_watermark
+send_timeout
+delay_send
+read_packets
+send_timeout_close
+high_msgq_watermark
+low_msgq_watermark
+show_econnreset
+enc_opt
+is_sockopt_val
+attach
+detach
+unrecv
+getservbyport1
+getservbyport
+getservbyname1
+getservbyname
+gethostname
+getstatus
+getprotocol
+gettype
+getindex
+ignorefd
+getfd
+getstat
+subscribe
+ifset
+ifget
+getiflist
+netmask
+dstaddr
+pointtopoint
+broadcast
+getifaddrs_ifget
+hwaddr
+comp_ifaddrs_add
+comp_ifaddrs
+enotsup
+getifaddrs
+chgopts
+chgopt
+getopts
+getopt
+setopt
+socknames
+setsockname
+sockname
+peernames
+setpeername
+peername
+recvfrom0
+recvfrom
+async_recv
+recv0
+recv
+sendmsg
+sendto
+peeloff
+listen
+async_accept
+accept_opts
+accept0
+accept
+async_connect
+connect0
+bindx
+add
+addr
+bind
+close_port
+send_pend
+close_pend_loop
+subs_empty_out_q
+shutdown_1
+read
+write
+read_write
+drv2protocol
+protocol2drv
+dgram
+seqpacket
+enc_type
+inet
+inet6
+enc_family
+bool
+fdopen
+prim_inet
+prim_eval
+shutdown_timeout
+not_allowed
+badrecord
+starting
+'-bs2as/1-fun-0-'
+'-bs2ss/1-fun-0-'
+'-boot/1-fun-0-'
+'-notify/1-fun-0-'
+'-get_pids/1-lc$^0/1-0-'
+'-do_boot/2-fun-0-'
+'-par_load_modules/2-lc$^0/1-0-'
+'-par_load_modules/2-fun-0-'
+'-patch_path/2-lc$^0/1-0-'
+'-patch_dir/2-lc$^0/1-1-'
+'-patch_dir/2-lc$^1/1-0-'
+'-shutdown_timer/1-fun-0-'
+'-start_on_load_handler_process/0-fun-0-'
+'-run_on_load_handlers/2-fun-0-'
+on_load_function_failed
+on_load_handler_returned_ok
+spawn_monitor
+running_on_load_handler
+on_load_loop
+on_load_handler_init
+start_on_load_handler_process
+on_load_done
+run_on_load
+run_on_load_handlers
+archive_extension
+objfile_extension
+search
+concat
+set_argument
+get_argument1
+to_strings
+get_flag_args
+get_flag_list
+get_flag
+get_args
+check
+start_arg
+start_arg2
+eval_arg
+flag
+start_extra_arg
+end_args
+arg
+parse_boot_args
+timer
+flush_timout
+'-shutdown_time'
+shutdown_timer
+load_module
+load_mod_code
+load_mod
+exprs
+new_bindings
+erl_eval
+parse_exprs
+erl_parse
+dot
+erl_scan
+start_it
+start_em
+start_in_kernel
+join
+funny_splitwith
+funny_split
+directory
+file_info
+read_file_info
+patch_dir
+patch_path
+get_var_val
+get_var_value
+extract_var
+add_var
+fix_path
+make_path
+'cannot load'
+get_files
+par_load_modules
+load_modules
+'unexpected command in bootfile'
+kernelProcess
+preLoaded
+primLoad
+path
+embedded
+kernel_load_completed
+eval_script
+script
+get_file
+'bootfile format error'
+'cannot get bootfile'
+not_found
+get_boot
+'-pz'
+'-pa'
+path_flags
+bootfile
+'-boot_var'
+init__boot__on_load_handler
+init_debug_flag
+'-init_debug'
+'-mode'
+'-root'
+do_boot
+'-path'
+'-id'
+'-hosts'
+'-loader'
+prim_load_flags
+add_to_kernel
+set_path
+erl_prim_loader
+start_prim_loader
+sleep
+kernel_pid
+terminate
+del
+sub
+remove_refs_from
+hipe_bifs
+purge_all_hipe_refs
+do_unload
+unload
+kill_all_ports
+kill_em
+get_pids
+kill_all_pids
+resend
+shutdown_loop
+shutdown_kernel_pid
+shutdown
+heart
+get_heart
+shutdown_pids
+stop_heart
+clear_system
+do_stop
+stopping
+set_flag
+'-config'
+'-boot'
+user
+do_handle_msg
+new_state
+handle_msg
+loop
+new_kernelpid
+garb_boot_loop
+foreach
+started
+progress
+boot_loop
+crash
+first198
+halt_string
+things_to_string
+flatten
+printable_list
+to_string
+state
+relaxed
+strict
+code_path_choice
+flags_to_atoms_again
+map
+b2s
+b2a
+s
+eval
+prepare_run_args
+reboot
+request
+wait_until_started
+notify_when_started
+make_permanent
+ensure_loaded
+fetch_loaded
+get_status
+bs2ss
+bs2as
+script_id
+get_argument
+get_plain_arguments
+get_arguments
+debug
+fatal
+init
+boot
+otp_ring0
+'TRACE'
+'DELETE'
+'PUT'
+'POST'
+'HEAD'
+'GET'
+'OPTIONS'
+'Proxy-Connection'
+'Keep-Alive'
+'Cookie'
+'X-Forwarded-For'
+'Set-Cookie2'
+'Set-Cookie'
+'Accept-Ranges'
+'Last-Modified'
+'Expires'
+'Etag'
+'Content-Type'
+'Content-Range'
+'Content-Md5'
+'Content-Location'
+'Content-Length'
+'Content-Language'
+'Content-Encoding'
+'Content-Base'
+'Allow'
+'Www-Authenticate'
+'Warning'
+'Vary'
+'Server'
+'Retry-After'
+'Public'
+'Proxy-Authenticate'
+'Location'
+'Age'
+'User-Agent'
+'Referer'
+'Range'
+'Proxy-Authorization'
+'Max-Forwards'
+'If-Unmodified-Since'
+'If-Range'
+'If-None-Match'
+'If-Match'
+'If-Modified-Since'
+'Host'
+'From'
+'Authorization'
+'Accept-Language'
+'Accept-Encoding'
+'Accept-Charset'
+'Accept'
+'Via'
+'Upgrade'
+'Transfer-Encoding'
+'Pragma'
+'Date'
+'Connection'
+'Cache-Control'
+process_low
+process_normal
+process_high
+process_max
+characters_to_list_trap_4
+characters_to_list_trap_3
+characters_to_list_trap_2
+characters_to_list_trap_1
+characters_to_utf8_trap
+md5_trap
+shutdown_ack_sent
+shutdown_received
+shutdown_sent
+shutdown_pending
+established
+cookie_echoed
+cookie_wait
+empty
+unconfirmed
+sackdelay_disable
+sackdelay_enable
+pmtud_disable
+pmtud_enable
+hb_demand
+hb_disable
+hb_enable
+partial_delivery_aborted
+wrong_anc_data
+short_recv
+addr_confirmed
+addr_made_prim
+addr_added
+addr_removed
+addr_unreachable
+addr_available
+cant_assoc
+shutdown_comp
+comm_lost
+comm_up
+abort
+addr_over
+unordered
+sctp_paddrinfo
+sctp_assoc_value
+sctp_event_subscribe
+sctp_paddrparams
+sctp_setadaptation
+sctp_setpeerprim
+sctp_prim
+sctp_assocparams
+sctp_pdapi_event
+sctp_adaptation_event
+sctp_shutdown_event
+sctp_send_failed
+sctp_remote_error
+sctp_paddr_change
+sctp_assoc_change
+sctp_sndrcvinfo
+sctp_get_peer_addr_info
+sctp_status
+sctp_delayed_ack_time
+sctp_events
+sctp_default_send_param
+sctp_peer_addr_params
+sctp_adaptation_layer
+sctp_primary_addr
+sctp_set_peer_primary_addr
+sctp_maxseg
+sctp_i_want_mapped_v4_addr
+sctp_disable_fragments
+sctp_nodelay
+sctp_autoclose
+sctp_initmsg
+sctp_associnfo
+sctp_rtoinfo
+netns
+ipv6_v6only
+tos
+dontroute
+reuseaddr
+sndbuf
+recbuf
+linger
+multi
+once
+mode
+buffer
+sctp_error
+sctp_passive
+sctp
+empty_out_q
+udp_error
+udp_passive
+tcp_error
+tcp_closed
+tcp_passive
+inet_reply
+inet_async
+einval
+udp
+tcp
+select_trap
+'count_trap\000'
+delete_trap
+linux
+unix
+hash
+map_info
+fun_info_mfa
+take
+cmp_term
+update
+remove
+merge
+keys
+is_key
+from_list
+find
+to_list
+maps
+map_size
+is_map
+inspect
+unsetenv
+printable_range
+binary_to_float
+float_to_binary
+integer_to_binary
+binary_to_integer
+delete_element
+insert_element
+finish_loading
+prepare_loading
+dt_append_vm_tag_data
+dt_prepend_vm_tag_data
+dt_restore_tag
+dt_spread_tag
+dt_get_tag_data
+dt_get_tag
+dt_put_tag
+posixtime_to_universaltime
+universaltime_to_posixtime
+check_old_code
+native_name_encoding
+file
+is_translatable
+internal_normalize_utf8
+internal_native2name
+internal_name2native
+prim_file
+nif_error
+decode_unsigned
+encode_unsigned
+referenced_byte_size
+list_to_bin
+bin_to_list
+part
+at
+longest_common_suffix
+longest_common_prefix
+matches
+compile_pattern
+binary_part
+finish_after_on_load
+call_on_load_function
+load_nif
+setopts
+give_away
+dflag_unicode_io
+binary_to_existing_atom
+binary_to_atom
+atom_to_binary
+bin_is_7bit
+characters_to_list
+characters_to_binary
+decode_packet
+update_element
+bitstring_to_list
+list_to_bitstring
+bit_size
+byte_size
+tuple_size
+is_bitstring
+list_to_existing_atom
+iolist_to_binary
+iolist_size
+make_fun
+to_float
+to_integer
+string
+is_boolean
+get_module_info
+warning_map
+hibernate
+is_module_native
+make_stub_module
+module_md5
+get_chunk
+lock_counters
+dump_links
+dump_monitors
+instructions
+dist_ext_to_term
+set_internal_state
+get_internal_state
+flat_size
+same
+disassemble
+erts_debug
+keyfind
+keysearch
+keymember
+reverse
+lists
+run
+format_error_int
+loaded_drivers
+try_unload
+try_load
+erl_ddll
+getpid
+putenv
+os
+match_spec_run_r
+match_spec_compile
+select_delete
+select_reverse
+select_count
+select
+update_counter
+slot
+safe_fixtable
+rename
+insert_new
+insert
+prev
+member
+match_object
+last
+lookup_element
+lookup
+is_compiled_ms
+delete_object
+delete_all_objects
+delete
+match_spec_test
+is_record
+is_function
+is_binary
+is_reference
+is_port
+is_pid
+is_number
+is_integer
+is_float
+is_tuple
+is_list
+is_atom
+subtract
+'--'
+append
+'++'
+send
+'!'
+is_builtin
+get_stacktrace
+raise
+is_process_alive
+demonitor
+fun_to_list
+port_to_list
+ref_to_list
+system_profile
+system_monitor
+system_info
+system_flag
+append_element
+make_tuple
+read_timer
+cancel_timer
+send_after
+start_timer
+pow
+atan2
+sqrt
+log10
+log2
+log
+exp
+erfc
+erf
+atanh
+atan
+asinh
+asin
+acosh
+acos
+tanh
+tan
+sinh
+sin
+cosh
+cos
+math
+bump_reductions
+resume_process
+suspend_process
+seq_trace_print
+seq_trace_info
+seq_trace
+trace_delivered
+trace_info
+trace_pattern
+port_get_data
+port_set_data
+system_check
+is_system_process
+time_unit
+map_hashmap_children
+map_type
+map_to_tuple_keys
+check_process_code
+request_system_task
+port_connect
+port_close
+port_control
+port_command
+port_call
+port_info
+dist_exit
+setnode
+spawn_opt
+whereis
+unlink
+universaltime_to_localtime
+universaltime
+tuple_to_list
+trunc
+tl
+time
+term_to_binary
+statistics
+split_binary
+spawn_link
+spawn
+setelement
+self
+round
+registered
+put
+purge_module
+process_info
+process_flag
+pre_loaded
+pid_to_list
+open_port
+system_time
+monotonic_time
+now
+nodes
+monitor_node
+function_exported
+module_loaded
+md5_final
+md5_update
+md5_init
+unique_integer
+make_ref
+localtime_to_universaltime
+localtime
+list_to_tuple
+list_to_pid
+list_to_integer
+list_to_float
+list_to_binary
+list_to_atom
+link
+length
+is_alive
+integer_to_list
+hd
+phash2
+phash
+halt
+get_keys
+get
+garbage_collect
+fun_info
+float_to_list
+float
+external_size
+erase
+element
+display_nl
+display_string
+display
+delete_module
+date
+crc32_combine
+crc32
+binary_to_term
+binary_to_list
+atom_to_list
+adler32_combine
+adler32
+abs
+yield
+yes
+x86
+xor
+write_concurrency
+wordsize
+scheduler_wall_time
+warning_msg
+warning
+wall_clock
+waiting
+visible
+version
+values
+value
+unload_cancelled
+unloaded_only
+unloading
+unloaded
+unless_suspending
+uniq
+unblock
+utf8
+used
+use_stdio
+urun
+unregister
+unicode
+ungreedy
+undef
+ucp
+ucompile
+type
+tuple
+try_clause
+trap_exit
+tracer
+trace_control_word
+traced
+trace_ts
+trace
+tpkt
+total_run_queue_lengths
+total_heap_size
+total_active_tasks
+total
+timestamp
+'*'
+timeout_value
+time_offset
+threads
+thread_pool_size
+this
+term_to_binary_trap
+table
+'SYSTEM'
+system_architecture
+system_version
+system_limit
+system_error
+system
+sys_misc
+suspending
+suspended
+suspend
+sunrm
+strict_monotonic_timestamp
+stream
+stop
+stderr_to_stdout
+static
+status
+start
+stack_size
+ssl_tls
+spawn_driver
+spawn_executable
+sl_alloc
+size
+silent
+shared
+separate
+set_tcw_fake
+set_tcw
+set_seq_token
+set_on_spawn
+set_on_link
+set_on_first_spawn
+set_on_first_link
+set_data
+set_cpu_topology
+set
+serial
+sequential_trace_token
+sequential_tracer
+sensitive
+seconds
+scope
+scientific
+scheme
+schedulers_online
+scheduler_id
+scheduler
+save_calls
+safe
+runtime
+running_procs
+running_ports
+running
+runnable_procs
+runnable_ports
+runnable
+run_queue_lengths
+run_queue
+return_trace
+return_to
+return_from
+restart
+reset
+report_errors
+rem
+reload
+registered_name
+register
+refc
+reductions
+recent_size
+receive
+reason
+ready_async
+ready_output
+ready_input
+read_concurrency
+re_run_trap
+re_pattern
+re
+raw
+queue_size
+quantify
+purify
+public
+ptab_list_continue
+protection
+protected
+profile
+proc_sig
+procs
+process_dump
+process_limit
+process_display
+process_count
+processes_used
+processes
+process
+private
+priority
+print
+positive
+port_op
+port_limit
+port_count
+ports
+port
+pid
+permanent
+pending_reload
+pending_process
+pending_driver
+pending
+pause
+'+'
+parallelism
+packet_size
+packet
+owner
+overlapped_io
+output
+out_exiting
+out_exited
+out
+ose_ti_proc
+ose_process_type
+ose_process_prio
+ose_pri_proc
+ose_phantom
+ose_int_proc
+ose_bg_proc
+os_version
+os_type
+os_pid
+orelse
+ordered_set
+or
+opt
+open_error
+open
+on_load
+old_heap_size
+old_heap_block_size
+ok
+offset
+objects
+nouse_stdio
+notsup
+notify
+notempty_atstart
+notempty
+noteol
+notbol
+notalive
+not_purged
+not_pending
+not_loaded_by_this_process
+not_loaded
+not_a_list
+not
+no_start_optimize
+no_network
+no_integer
+no_float
+nosuspend
+noproc
+nofile
+noeol
+nodeup
+nodedown_reason
+nodedown
+node_type
+node
+nocookie
+noconnection
+noconnect
+no_auto_capture
+none
+nomatch
+no
+next
+newline
+new_uniq
+new_index
+new
+never_utf
+net_kernel_terminated
+net_kernel
+'/='
+'=/='
+native_addresses
+native
+namelist
+named_table
+name
+nano_seconds
+multiline
+multi_scheduling
+more
+monotonic_timestamp
+monotonic
+monitors
+monitor_nodes
+monitor
+monitored_by
+module_info
+module
+'-'
+minor_version
+min_bin_vheap_size
+min_heap_size
+milli_seconds
+micro_seconds
+meta_match_spec
+meta
+merge_trap
+messages
+message_queue_len
+message_binary
+message
+memory_types
+memory_internal
+memory
+md5
+mbuf_size
+max_processes
+max_tables
+maximum
+max
+match_spec
+match_limit_recursion
+match_limit
+match
+machine
+'<'
+low
+long_schedule
+long_gc
+local
+load_failure
+load_cancelled
+loaded
+little
+list_to_binary_continue
+list
+links
+linked_in_driver
+line_length
+line_delimiter
+line
+lf
+'=<'
+ldflags
+latin1
+last_calls
+large_heap
+label
+known
+kill_ports
+killed
+kill
+keypos
+io
+is_seq_trace
+is_constant
+invalid
+instruction_counts
+internal_status
+internal_error
+internal
+input
+initial_call
+info_msg
+info
+index
+inconsistent
+incomplete
+inactive
+in_exiting
+in
+ignore
+if_clause
+id
+httph_bin
+http_bin
+http_error
+http_eoh
+http_header
+http_request
+http_response
+https
+httph
+http
+hipe_architecture
+high
+hide
+hidden
+heir
+heart_port
+heap_type
+heap_sizes
+heap_size
+heap_block_size
+have_dt_utag
+group_leader
+grun
+'>'
+global
+getting_unlinked
+getting_linked
+gather_system_check_result
+gather_sched_wall_time_result
+gather_io_bytes
+gather_gc_info_result
+getenv
+get_tcw
+get_seq_token
+get_data
+generational
+'>='
+gc_start
+gc_end
+garbage_collection
+garbage_collecting
+function_clause
+functions
+function
+fullsweep_if_old_binaries
+fullsweep_after
+free
+format_cpu_topology
+force
+flush_monitor_messages
+flush
+flags
+firstline
+first
+fd
+fcgi
+external
+exports
+exiting
+existing
+exit_status
+exclusive
+exact_reductions
+event
+'ETS-TRANSFER'
+ets
+erts_internal
+error_logger
+error_handler
+'ERROR'
+erlang
+'=='
+'=:='
+extended
+exception_trace
+exception_from
+eol
+eof
+env
+endian
+enabled
+enable_trace
+emulator
+elib_malloc
+dupnames
+duplicate_bag
+dunlink
+dsend_continue_trap
+dsend
+driver_options
+driver
+dotall
+dollar_endonly
+'$_'
+'$$'
+dmonitor_p
+dmonitor_node
+dlink
+div
+'/'
+dist_cmd
+dist
+display_items
+disabled
+disable_trace
+dirty_cpu_schedulers_online
+dictionary
+dgroup_leader
+depth
+dexit
+delay_trap
+decimals
+debug_flags
+data
+current_stacktrace
+current_location
+current_function
+creation
+crlf
+cr
+cpu_timestamp
+cpu
+copy
+control
+context_switches
+const
+cons
+connection_closed
+connected
+connect
+convert_time_unit
+config_h
+compressed
+compile
+compat_rel
+compact
+command
+code
+closed
+close
+clock_service
+clear
+characters_to_list_int
+characters_to_binary_int
+'CHANGE'
+cflags
+cdr
+cd
+catchlevel
+caseless
+case_clause
+capture
+caller
+call_time
+call_count
+busy_port
+busy_dist_port
+build_type
+bsr_unicode
+bsr_anycrlf
+bsr
+bsl
+breakpoint
+break_ignored
+bxor
+bor
+bnot
+bm
+blocked
+block
+binary_to_term_trap
+binary_to_list_continue
+binary_matches_trap
+binary_match_trap
+binary_longest_suffix_trap
+binary_longest_prefix_trap
+binary_copy_trap
+binary_bin_to_list_trap
+binary
+bif_timer_server
+bif_return_trap
+big
+band
+bag
+badsig
+badmatch
+badmap
+badkey
+badfun
+badfile
+badarity
+badarith
+badarg
+backtrace_depth
+backtrace
+awaiting_unload
+awaiting_load
+await_sched_wall_time_modifications
+await_result
+await_proc_exit
+await_port_send_result
+attributes
+atom_used
+atom
+asynchronous
+async
+asn1
+arity
+arg0
+args
+apply
+anycrlf
+any
+andthen
+andalso
+and
+anchored
+amd64
+already_loaded
+allow_passive_connect
+allow_gc
+alloc_util_allocators
+allocator_sizes
+allocator
+allocated_areas
+allocated
+alloc_sizes
+alloc_info
+all_names
+all_but_first
+all
+active_tasks
+active
+accessor
+ac
+absoluteURI
+abs_path
+aborted
+'EXIT'
+'UP'
+'DOWN'
+undefined_lambda
+undefined_function
+nocatch
+undefined
+exit
+error
+throw
+return
+call
+normal
+timeout
+infinity
+fun
+''
+'$end_of_table'
+'nonode@nohost'
+'_'
+true
+false
+=end
diff --git a/QiaoJiaSystem/build/fastDfsClient.conf b/QiaoJiaSystem/build/fastDfsClient.conf
new file mode 100644
index 0000000..dbe42e9
--- /dev/null
+++ b/QiaoJiaSystem/build/fastDfsClient.conf
@@ -0,0 +1,62 @@
+# connect timeout in seconds
+# default value is 30s
+connect_timeout=30
+
+# network timeout in seconds
+# default value is 30s
+network_timeout=60
+
+# the base path to store log files
+base_path=fastdfs
+
+# tracker_server can ocur more than once, and tracker_server format is
+#  "host:port", host can be hostname or ip address
+tracker_server=192.168.1.185:22122
+
+#standard log level as syslog, case insensitive, value list:
+### emerg for emergency
+### alert
+### crit for critical
+### error
+### warn for warning
+### notice
+### info
+### debug
+log_level=info
+
+# if use connection pool
+# default value is false
+# since V4.05
+use_connection_pool = false
+
+# connections whose the idle time exceeds this time will be closed
+# unit: second
+# default value is 3600
+# since V4.05
+connection_pool_max_idle_time = 3600
+
+# if load FastDFS parameters from tracker server
+# since V4.05
+# default value is false
+load_fdfs_parameters_from_tracker=false
+
+# if use storage ID instead of IP address
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# default value is false
+# since V4.05
+use_storage_id = false
+
+# specify storage ids filename, can use relative or absolute path
+# same as tracker.conf
+# valid only when load_fdfs_parameters_from_tracker is false
+# since V4.05
+storage_ids_filename = storage_ids.conf
+
+
+#HTTP settings
+http.tracker_server_port=80
+
+#use "#include" directive to include HTTP other settiongs
+##include http.conf
+
diff --git a/QiaoJiaSystem/build/killAll.sh b/QiaoJiaSystem/build/killAll.sh
new file mode 100644
index 0000000..cd8febb
--- /dev/null
+++ b/QiaoJiaSystem/build/killAll.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+pkill Face
+pkill YoloServer
+pkill DataWebServ
+pkill VideoAnalys
+pkill RecordVideo
+pkill beam.smp
+pkill srs
diff --git a/QiaoJiaSystem/build/runAll.sh b/QiaoJiaSystem/build/runAll.sh
new file mode 100644
index 0000000..ca3a136
--- /dev/null
+++ b/QiaoJiaSystem/build/runAll.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+MYLDPATH="~/Apps"
+MY3RDLIBSPATH="~/Apps/BasicPlatForm/libs/"
+MYLOGPATH="~/work/log/"
+
+#todo
+#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/media/basic/cdbfb548-3100-4738-b9c1-0a7e1e002170/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib:${MY3RDLIBSPATH}/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MY3RDLIBSPATH}/ffmpeg/lib:${MY3RDLIBSPATH}/opencv/lib:${MY3RDLIBSPATH}/Casia_Face/FaceSdk/lib/gpu:${MY3RDLIBSPATH}/FastDFS/lib:${MY3RDLIBSPATH}/Ice-3.7.0/lib64:${MY3RDLIBSPATH}/DarkNet/lib:${MY3RDLIBSPATH}/libopenssl/lib:${MY3RDLIBSPATH}/uniview/lib
+
+startFunc() {
+    PROC=`ps aux | grep "$1" | grep -v grep | grep -v tail`
+    if [ -z "${PROC}" ]; then
+        date +%D-%T" $1 start"
+        nohup ./$1 > ${MYLOGPATH}/Log$1`date +%Y-%m-%d_%T` &
+        return 1
+    else
+        echo "$1 is exists"
+        return 0
+    fi
+}
+
+#start FaceExtractServer
+startFunc FaceExtractServer
+
+#start FaceDetectServer
+startFunc FaceDetectServer
+
+#start YoloServer
+startFunc YoloServer
+
+#start FaceSearchServer
+startFunc FaceSearchServer
+
+#start RecordVideo
+startFunc RecordVideo
+
+#start DataWebServer
+#startFunc DataWebServer
+sh runWebSer.sh
+
+
+#start VideoAnalysFromHC
+VideoAnalysPROC=`ps aux | grep "VideoAnalysFromHC" | grep -v grep | grep -v tail`
+if [ -z "${VideoAnalysPROC}" ]; then
+    date +%D-%T" VideoAnalysFromHC start"
+   nohup ./VideoAnalysFromHC 2> /dev/null > ${MYLOGPATH}/LogVideoAnalysFromHC`date +%Y-%m-%d_%T` &
+else
+    echo "VideoAnalysFromHC is exists"
+fi
+
+
diff --git a/QiaoJiaSystem/build/runTestCutImage.sh b/QiaoJiaSystem/build/runTestCutImage.sh
new file mode 100644
index 0000000..75e412a
--- /dev/null
+++ b/QiaoJiaSystem/build/runTestCutImage.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+echo "    " > LogTest
+
+for ((i=0; i<1000; ++i))
+do
+    ./TestFile >> LogTest
+    echo ${i}"\\n\\n" >> LogTest
+done
\ No newline at end of file
diff --git a/QiaoJiaSystem/build/runWebSer.sh b/QiaoJiaSystem/build/runWebSer.sh
new file mode 100644
index 0000000..1551af9
--- /dev/null
+++ b/QiaoJiaSystem/build/runWebSer.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+MYLDPATH="/home/basic/Apps"
+MYLOGPATH="/media/basic/75756d46-005d-486f-af00-4eb766e304c2/log"
+
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MYLDPATH}/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:${MYLDPATH}/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom:${MYLDPATH}/BasicPlatForm/libs/ffmpeg/lib:${MYLDPATH}/BasicPlatForm/libs/opencv/lib:${MYLDPATH}/BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu:${MYLDPATH}/BasicPlatForm/libs/FastDFS/lib:${MYLDPATH}/BasicPlatForm/libs/Ice-3.7.0/lib64:${MYLDPATH}/BasicPlatForm/libs/DarkNet/lib:${MYLDPATH}/BasicPlatForm/libs/libopenssl/lib
+
+DataWebPROC=`ps aux | grep "DataWebServer" | grep -v grep | grep -v tail`
+if [ -z "${DataWebPROC}" ]; then
+    date +%D-%T" DataWebServer start"
+    nohup ./DataWebServer > ${MYLOGPATH}/LogDataWebServer`date +%Y-%m-%d_%T` &
+else
+    echo "DataWebServer is exists"
+fi
\ No newline at end of file
diff --git a/QiaoJiaSystem/build/scpToSer.sh b/QiaoJiaSystem/build/scpToSer.sh
new file mode 100644
index 0000000..cb63d59
--- /dev/null
+++ b/QiaoJiaSystem/build/scpToSer.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+CUR_PATH=`pwd`
+#echo  ${CUR_PATH}"/"${SENDFILE}
+#scp ${CUR_PATH}"/"${SENDFILE} basic@192.168.1.185:/home/basic/Apps/QiaoJiaSystem/build
+
+
+sendFile() {
+    echo $1
+    des_pass=123
+    expect -c "
+    spawn scp ${CUR_PATH}"/"$1 basic@192.168.1.203:/home/basic/Apps/QiaoJiaSystem/build
+    expect \"password:\"
+    send \"${des_pass}\r\"
+    expect eof
+    "
+}
+
+
+#todo
+#sudo apt install expect
+#spawn scp target/aaa-0.0.1.war root@192.168.1.30:/home/GameUser/MagicvesselUserWeb/aaa-release.war
+
+if [ "$1" = "1" ]; then
+    date +%D-%T" test"
+    sendFile DataWebServer
+    sendFile FaceDetectServer
+    sendFile FaceExtractServer
+    sendFile FaceSearchServer
+    sendFile syncDBClient
+    sendFile RecordVideo
+    sendFile VideoAnalysFromHC
+    sendFile YoloServer
+    sendFile killAll.sh
+    #sendFile runAll.sh
+    #sendFile runWebSer.sh
+else
+    SENDFILE=$1
+    sendFile ${SENDFILE}
+fi
diff --git a/QiaoJiaSystem/build/startAllServer.sh b/QiaoJiaSystem/build/startAllServer.sh
new file mode 100644
index 0000000..0a84f80
--- /dev/null
+++ b/QiaoJiaSystem/build/startAllServer.sh
@@ -0,0 +1,44 @@
+
+#ps -aux | grep elasticsearch | grep "\-d"
+#bash /home/basic/es_start.sh &
+
+echo `whoami`  >> /home/basic/restart.log
+
+ES_PROC=`ps -aux | grep elasticsearch | grep "\-d"`
+if [ -z "${ES_PROC}" ]; then
+    bash /home/basic/es_start.sh &
+else
+    echo "es is exists"
+fi
+
+#ps -aux |grep fdfs
+#echo "123" | sudo -S bash /home/basic/fdfs_start.sh &
+Fdfs_PROC=`ps -aux |grep fdfs | grep -v grep`
+if [ -z "${Fdfs_PROC}" ]; then
+    echo "123" | sudo -S bash /home/basic/fdfs_start.sh &
+else
+    echo "fdfs is exists"
+fi
+
+#ps -aux |grep nginx | grep process
+#echo "123" | sudo -S bash /home/basic/nginx_start.sh &
+Nginx_PROC=`ps -aux |grep nginx | grep process`
+if [ -z "${Nginx_PROC}" ]; then
+    echo "123" | sudo -S bash /home/basic/nginx_start.sh &
+else
+    echo "nginx is exists"
+fi
+
+cd /home/basic/Apps/QiaoJiaSystem/build/
+echo "123" | sudo -S bash ./runAll.sh &
+
+cd /opt/tomcat7/apache-tomcat-7.0.90/bin
+#ps -aux |grep tomcat |grep start
+#nohup echo "123" | sudo -S ./catalina.sh start &
+Tomcat_PROC=`ps -aux |grep tomcat |grep start`
+if [ -z "${Tomcat_PROC}" ]; then
+    nohup echo "123" | sudo -S ./startup.sh start &
+else
+    echo "tomcat is exists"
+fi
+
diff --git a/QiaoJiaSystem/build/startHC.sh b/QiaoJiaSystem/build/startHC.sh
new file mode 100644
index 0000000..cd3cb74
--- /dev/null
+++ b/QiaoJiaSystem/build/startHC.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/bsk/work/development/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/home/bsk/work/development/c++/Qt/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom
+./VideoAnalysFromHC 2> /dev/null
diff --git a/QiaoJiaSystem/build/syncDBClient b/QiaoJiaSystem/build/syncDBClient
new file mode 100644
index 0000000..913497d
--- /dev/null
+++ b/QiaoJiaSystem/build/syncDBClient
Binary files differ
diff --git a/QiaoJiaSystem/build/testLoadDB.sh b/QiaoJiaSystem/build/testLoadDB.sh
new file mode 100644
index 0000000..9748db1
--- /dev/null
+++ b/QiaoJiaSystem/build/testLoadDB.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+for ((i=1;i<=10;i++));do
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1232\""}" | grep "load ok" &
+sleep 3s
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1233\""}" | grep "load ok" &
+sleep 3s
+time ./syncDBClient "{"\"clusterID\"":"\"\"","\"clusterName\"":"\"\"","\"cookie\"":"\"1234\"","\"nodeName\"":"\"cfe40e7e-f054-4f8f-bac8-60fcca231d44@192.168.1.124\"","\"path\"":"\"/opt/erlang/cfe40e7e-f054-4f8f-bac8-60fcca231d44\"","\"syncTpye\"":null,"\"tableName\"":"\"t1234\""}" | grep "load ok" &
+sleep 3s
+echo "wait loop 30s\n\n"
+sleep 10s
+done
+
+echo "test End"
+
+
+
diff --git a/QiaoJiaSystem/build/test_cpu_mem.sh b/QiaoJiaSystem/build/test_cpu_mem.sh
new file mode 100644
index 0000000..bb7100f
--- /dev/null
+++ b/QiaoJiaSystem/build/test_cpu_mem.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+interval=3
+if [ "$1" != "" ]
+then
+   interval=$1
+fi
+   echo "妫�鏌ユ椂闂撮棿闅�(鍗曚綅绉�)锛�"$interval
+   datetime=`date +'%Y%m%d'`
+   echo""> info_cpu$datetime
+   while :
+   do
+   echo `date +'%Y%m%d %H:%M:%S'` >> info_cpu$datetime
+   cat /proc/meminfo | grep  -E 'MemTotal|MemFree|Cached' |grep -v SwapCached|xargs >>info_cpu$datetime    
+   ps -fe|grep TeamViewer |grep -v grep
+   if [ $? -ne 0 ]
+   then
+     echo "TeamViewer is not runing....."
+   else
+     top -p $(pgrep TeamViewer) -b -n 1 >> info_cpu$datetime
+     echo "TeamViewer is runing....."
+   fi
+ 
+   echo "------------------cpu Info Up-----------------" >> info_cpu$datetime
+   echo "------------------nvida Info Down-------------------" >> info_cpu$datetime
+   nvidia-smi >> info_cpu$datetime
+   sleep $interval
+   echo "-------------------------------------" >> info_cpu$datetime
+   done
diff --git a/QiaoJiaSystem/build/yolov3.weights b/QiaoJiaSystem/build/yolov3.weights
new file mode 100644
index 0000000..a5ed716
--- /dev/null
+++ b/QiaoJiaSystem/build/yolov3.weights
Binary files differ
diff --git a/QiaoJiaSystem/runPath.sh b/QiaoJiaSystem/runPath.sh
new file mode 100644
index 0000000..7036d19
--- /dev/null
+++ b/QiaoJiaSystem/runPath.sh
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/basic/Apps/BasicPlatForm/libs/hcTool/HCNetSDK64/lib:/home/basic/Apps/BasicPlatForm/libs/hcTool/HCNetSDK64/lib/HCNetSDKCom:/home/basic/Apps/BasicPlatForm/libs/ffmpeg/lib:/home/basic/Apps/BasicPlatForm/libs/opencv/lib:/home/basic/Apps/BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu:/home/basic/Apps/BasicPlatForm/libs/FastDFS/lib:/home/basic/Apps/BasicPlatForm/libs/Ice-3.7.0/lib64:/home/basic/Apps/BasicPlatForm/libs/DarkNet/lib:/home/basic/Apps/BasicPlatForm/libs/libopenssl/lib

--
Gitblit v1.8.0