From 75f9836ce5f0a1dea2c3fe304bbc26c962ee64bf Mon Sep 17 00:00:00 2001 From: dnobori Date: Tue, 18 Nov 2014 12:05:48 +0900 Subject: [PATCH] v4.12-9514-beta --- src/Cedar/Cedar.c | 2 + src/Cedar/Cedar.h | 15 +- src/Cedar/CedarType.h | 7 + src/Cedar/Hub.c | 2 + src/Cedar/Hub.h | 1 + src/Cedar/Interop_OpenVPN.c | 10 +- src/Cedar/Interop_OpenVPN.h | 3 + src/Cedar/Layer3.c | 2 +- src/Cedar/Protocol.c | 52 ++- src/Cedar/Radius.c | 103 +++++- src/Cedar/Radius.h | 14 +- src/Cedar/SW.c | 2 +- src/Cedar/Sam.c | 4 +- src/Cedar/Sam.h | 2 +- src/Cedar/Server.c | 51 +++ src/Cedar/Server.h | 1 + src/Cedar/UdpAccel.c | 21 +- src/CurrentBuild.txt | 6 +- src/Makefile64 | 361 ++++++++++++++++++++ src/Mayaqua/Network.c | 270 ++++++++++++++- src/Mayaqua/Network.h | 18 + src/Mayaqua/TcpIp.c | 100 ++++-- src/Mayaqua/TcpIp.h | 1 + src/bin/hamcore/SeLow_x64.sys | Bin 38368 -> 38368 bytes src/bin/hamcore/SeLow_x86.sys | Bin 31072 -> 31072 bytes src/bin/hamcore/inf/selow_x64/SeLow_x64.inf | 4 +- src/bin/hamcore/inf/selow_x64/inf.cat | Bin 6275 -> 6275 bytes src/bin/hamcore/inf/selow_x86/SeLow_x86.inf | 4 +- src/bin/hamcore/inf/selow_x86/inf.cat | Bin 6275 -> 6275 bytes src/bin/hamcore/inf/x64/INF_VPN.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN10.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN100.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN101.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN102.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN103.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN104.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN105.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN106.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN107.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN108.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN109.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN11.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN110.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN111.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN112.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN113.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN114.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN115.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN116.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN117.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN118.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN119.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN12.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN120.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN121.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN122.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN123.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN124.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN125.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN126.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN127.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN13.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN14.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN15.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN16.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN17.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN18.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN19.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN2.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN20.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN21.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN22.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN23.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN24.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN25.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN26.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN27.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN28.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN29.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN3.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN30.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN31.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN32.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN33.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN34.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN35.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN36.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN37.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN38.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN39.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN4.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN40.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN41.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN42.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN43.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN44.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN45.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN46.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN47.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN48.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN49.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN5.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN50.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN51.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN52.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN53.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN54.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN55.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN56.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN57.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN58.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN59.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN6.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN60.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN61.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN62.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN63.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN64.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN65.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN66.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN67.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN68.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN69.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN7.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN70.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN71.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN72.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN73.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN74.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN75.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN76.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN77.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN78.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN79.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN8.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN80.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN81.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN82.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN83.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN84.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN85.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN86.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN87.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN88.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN89.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN9.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN90.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN91.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN92.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN93.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN94.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN95.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN96.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN97.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN98.inf | 2 +- src/bin/hamcore/inf/x64/INF_VPN99.inf | 2 +- src/bin/hamcore/inf/x64/inf.cat | Bin 43113 -> 43113 bytes src/bin/hamcore/inf/x86/INF_VPN.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN10.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN100.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN101.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN102.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN103.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN104.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN105.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN106.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN107.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN108.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN109.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN11.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN110.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN111.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN112.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN113.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN114.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN115.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN116.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN117.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN118.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN119.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN12.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN120.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN121.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN122.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN123.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN124.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN125.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN126.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN127.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN13.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN14.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN15.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN16.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN17.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN18.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN19.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN2.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN20.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN21.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN22.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN23.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN24.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN25.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN26.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN27.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN28.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN29.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN3.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN30.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN31.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN32.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN33.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN34.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN35.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN36.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN37.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN38.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN39.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN4.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN40.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN41.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN42.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN43.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN44.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN45.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN46.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN47.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN48.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN49.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN5.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN50.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN51.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN52.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN53.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN54.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN55.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN56.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN57.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN58.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN59.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN6.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN60.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN61.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN62.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN63.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN64.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN65.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN66.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN67.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN68.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN69.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN7.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN70.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN71.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN72.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN73.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN74.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN75.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN76.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN77.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN78.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN79.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN8.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN80.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN81.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN82.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN83.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN84.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN85.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN86.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN87.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN88.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN89.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN9.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN90.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN91.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN92.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN93.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN94.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN95.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN96.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN97.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN98.inf | 2 +- src/bin/hamcore/inf/x86/INF_VPN99.inf | 2 +- src/bin/hamcore/inf/x86/inf.cat | Bin 43113 -> 43113 bytes src/bin/hamcore/pxwfp_x64.sys | Bin 22240 -> 22240 bytes src/bin/hamcore/pxwfp_x86.sys | Bin 18016 -> 18016 bytes src/bin/hamcore/see.sys | Bin 43104 -> 43104 bytes src/bin/hamcore/see_x64.sys | Bin 38240 -> 38240 bytes src/bin/hamcore/strtable_cn.stb | 2 + src/bin/hamcore/strtable_en.stb | 2 + src/bin/hamcore/strtable_ja.stb | 2 + src/bin/hamcore/vpn_driver.sys | Bin 25824 -> 25824 bytes src/bin/hamcore/vpn_driver6.sys | Bin 26208 -> 26208 bytes src/bin/hamcore/vpn_driver6_x64.sys | Bin 28768 -> 28768 bytes src/bin/hamcore/vpn_driver_x64.sys | Bin 29536 -> 29536 bytes src/bin/vpnweb.cab | Bin 195818 -> 195821 bytes src/bin/vpnweb.ocx | Bin 333880 -> 333880 bytes src/vpnweb/vpnweb.h | 2 +- src/vpnweb/vpnweb_i.c | 2 +- src/vpnweb/vpnweb_p.c | 2 +- 301 files changed, 1259 insertions(+), 317 deletions(-) create mode 100644 src/Makefile64 diff --git a/src/Cedar/Cedar.c b/src/Cedar/Cedar.c index 869efa59..45a49a38 100644 --- a/src/Cedar/Cedar.c +++ b/src/Cedar/Cedar.c @@ -1663,6 +1663,8 @@ CEDAR *NewCedar(X *server_x, K *server_k) c->CurrentRegionLock = NewLock(); + StrCpy(c->OpenVPNDefaultClientOption, sizeof(c->OpenVPNDefaultClientOption), OVPN_DEF_CLIENT_OPTION_STRING); + #ifdef BETA_NUMBER c->Beta = BETA_NUMBER; #endif // BETA_NUMBER diff --git a/src/Cedar/Cedar.h b/src/Cedar/Cedar.h index c0ea610e..562583c2 100644 --- a/src/Cedar/Cedar.h +++ b/src/Cedar/Cedar.h @@ -135,10 +135,10 @@ // Version number -#define CEDAR_VER 411 +#define CEDAR_VER 412 // Build Number -#define CEDAR_BUILD 9506 +#define CEDAR_BUILD 9514 // Beta number //#define BETA_NUMBER 3 @@ -158,11 +158,11 @@ // Specifies the build date #define BUILD_DATE_Y 2014 -#define BUILD_DATE_M 10 -#define BUILD_DATE_D 22 -#define BUILD_DATE_HO 19 -#define BUILD_DATE_MI 51 -#define BUILD_DATE_SE 55 +#define BUILD_DATE_M 11 +#define BUILD_DATE_D 17 +#define BUILD_DATE_HO 21 +#define BUILD_DATE_MI 41 +#define BUILD_DATE_SE 16 // Tolerable time difference #define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000) @@ -1052,6 +1052,7 @@ typedef struct CEDAR LOCK *FifoBudgetLock; // Fifo budget lock UINT FifoBudget; // Fifo budget bool AcceptOnlyTls; // Accept only TLS (Disable SSL) + char OpenVPNDefaultClientOption[MAX_SIZE]; // OpenVPN Default Client Option String } CEDAR; // Type of CEDAR diff --git a/src/Cedar/CedarType.h b/src/Cedar/CedarType.h index e9a1414e..5bd9d2c8 100644 --- a/src/Cedar/CedarType.h +++ b/src/Cedar/CedarType.h @@ -137,6 +137,13 @@ typedef struct AUTHRADIUS AUTHRADIUS; typedef struct AUTHNT AUTHNT; +// ============================================================== +// RADIUS +// ============================================================== + +typedef struct RADIUS_LOGIN_OPTION RADIUS_LOGIN_OPTION; + + // ============================================================== // Listener // ============================================================== diff --git a/src/Cedar/Hub.c b/src/Cedar/Hub.c index 2ffd1528..bb99d434 100644 --- a/src/Cedar/Hub.c +++ b/src/Cedar/Hub.c @@ -597,6 +597,7 @@ void DataToHubOptionStruct(HUB_OPTION *o, RPC_ADMIN_OPTION *ao) GetHubAdminOptionDataAndSet(ao, "DropArpInPrivacyFilterMode", &o->DropArpInPrivacyFilterMode); GetHubAdminOptionDataAndSet(ao, "SuppressClientUpdateNotification", &o->SuppressClientUpdateNotification); GetHubAdminOptionDataAndSet(ao, "FloodingSendQueueBufferQuota", &o->FloodingSendQueueBufferQuota); + GetHubAdminOptionDataAndSet(ao, "AssignVLanIdByRadiusAttribute", &o->AssignVLanIdByRadiusAttribute); } // Convert the contents of the HUB_OPTION to data @@ -662,6 +663,7 @@ void HubOptionStructToData(RPC_ADMIN_OPTION *ao, HUB_OPTION *o, char *hub_name) Add(aol, NewAdminOption("DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode)); Add(aol, NewAdminOption("SuppressClientUpdateNotification", o->SuppressClientUpdateNotification)); Add(aol, NewAdminOption("FloodingSendQueueBufferQuota", o->FloodingSendQueueBufferQuota)); + Add(aol, NewAdminOption("AssignVLanIdByRadiusAttribute", o->AssignVLanIdByRadiusAttribute)); Zero(ao, sizeof(RPC_ADMIN_OPTION)); diff --git a/src/Cedar/Hub.h b/src/Cedar/Hub.h index d13d216c..909dc77d 100644 --- a/src/Cedar/Hub.h +++ b/src/Cedar/Hub.h @@ -275,6 +275,7 @@ struct HUB_OPTION bool DropArpInPrivacyFilterMode; // Drop ARP packets if the both source and destination session is PrivacyFilter mode bool SuppressClientUpdateNotification; // Suppress the update notification function on the VPN Client UINT FloodingSendQueueBufferQuota; // The global quota of send queues of flooding packets + bool AssignVLanIdByRadiusAttribute; // Assign the VLAN ID for the VPN session, by the attribute value of RADIUS }; // MAC table entry diff --git a/src/Cedar/Interop_OpenVPN.c b/src/Cedar/Interop_OpenVPN.c index 3d125b7f..3f4ae23d 100644 --- a/src/Cedar/Interop_OpenVPN.c +++ b/src/Cedar/Interop_OpenVPN.c @@ -766,6 +766,7 @@ void OvsSetupSessionParameters(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN_C { LIST *o; BUF *b; + char opt_str[MAX_SIZE]; // Validate arguments if (s == NULL || se == NULL || c == NULL || data == NULL) { @@ -779,7 +780,14 @@ void OvsSetupSessionParameters(OPENVPN_SERVER *s, OPENVPN_SESSION *se, OPENVPN_C OvsLog(s, se, c, "LO_OPTION_STR_RECV", data->OptionString); - o = OvsParseOptions(data->OptionString); + Zero(opt_str, sizeof(opt_str)); + StrCpy(opt_str, sizeof(opt_str), data->OptionString); + if (s->Cedar != NULL && (IsEmptyStr(opt_str) || StartWith(opt_str, "V0 UNDEF") || InStr(opt_str, ",") == false)) + { + StrCpy(opt_str, sizeof(opt_str), s->Cedar->OpenVPNDefaultClientOption); + } + + o = OvsParseOptions(opt_str); if (se->Mode == OPENVPN_MODE_UNKNOWN) { diff --git a/src/Cedar/Interop_OpenVPN.h b/src/Cedar/Interop_OpenVPN.h index 3df7fad4..9a33f1bf 100644 --- a/src/Cedar/Interop_OpenVPN.h +++ b/src/Cedar/Interop_OpenVPN.h @@ -311,6 +311,9 @@ struct OPENVPN_SERVER_UDP UINT64 VgsNextGetPublicPortsTick; }; +// OpenVPN Default Client Option String +#define OVPN_DEF_CLIENT_OPTION_STRING "dev-type tun,link-mtu 1500,tun-mtu 1500,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-client" + //// Function prototype OPENVPN_SERVER_UDP *NewOpenVpnServerUdp(CEDAR *cedar); diff --git a/src/Cedar/Layer3.c b/src/Cedar/Layer3.c index 75f71c79..946b0173 100644 --- a/src/Cedar/Layer3.c +++ b/src/Cedar/Layer3.c @@ -1031,7 +1031,7 @@ void L3PollingBeacon(L3IF *f) Copy(udp_buf + sizeof(IPV4_HEADER) + sizeof(UDP_HEADER), beacon_str, sizeof(beacon_str)); - udp->Checksum = IpChecksum(udp, sizeof(UDP_HEADER) + sizeof(beacon_str)); + udp->Checksum = CalcChecksumForIPv4(f->IpAddress, dest_ip, 0x11, udp, sizeof(UDP_HEADER) + sizeof(beacon_str), 0); ip->DstIP = dest_ip; IPV4_SET_VERSION(ip, 4); diff --git a/src/Cedar/Protocol.c b/src/Cedar/Protocol.c index 9ad1906e..7599a28b 100644 --- a/src/Cedar/Protocol.c +++ b/src/Cedar/Protocol.c @@ -842,24 +842,24 @@ void GenerateMachineUniqueHash(void *data) { BUF *b; char name[64]; - char ip_str[64]; - IP ip; OS_INFO *osinfo; + UINT64 iphash = 0; // Validate arguments if (data == NULL) { return; } + iphash = GetHostIPAddressListHash(); + b = NewBuf(); GetMachineName(name, sizeof(name)); - GetMachineIp(&ip); - IPToStr(ip_str, sizeof(ip_str), &ip); osinfo = GetOsInfo(); WriteBuf(b, name, StrLen(name)); - WriteBuf(b, ip_str, StrLen(ip_str)); + + WriteBufInt64(b, iphash); WriteBuf(b, &osinfo->OsType, sizeof(osinfo->OsType)); WriteBuf(b, osinfo->KernelName, StrLen(osinfo->KernelName)); @@ -1265,6 +1265,7 @@ bool ServerAccept(CONNECTION *c) RC4_KEY_PAIR key_pair; UINT authtype; POLICY *policy; + UINT assigned_vlan_id = 0; HUB *hub; SESSION *s = NULL; UINT64 user_expires = 0; @@ -1330,6 +1331,8 @@ bool ServerAccept(CONNECTION *c) return false; } + GenerateMachineUniqueHash(unique2); + Zero(ctoken_hash_str, sizeof(ctoken_hash_str)); Zero(mschap_v2_server_response_20, sizeof(mschap_v2_server_response_20)); @@ -1623,6 +1626,8 @@ bool ServerAccept(CONNECTION *c) USER *user; USERGROUP *group; char plain_password[MAX_PASSWORD_LEN + 1]; + RADIUS_LOGIN_OPTION radius_login_opt; + if (hub->Halt || hub->Offline) { // HUB is off-line @@ -1633,6 +1638,13 @@ bool ServerAccept(CONNECTION *c) goto CLEANUP; } + Zero(&radius_login_opt, sizeof(radius_login_opt)); + + if (hub->Option != NULL) + { + radius_login_opt.In_CheckVLanId = hub->Option->AssignVLanIdByRadiusAttribute; + } + // Get the various flags use_encrypt = PackGetInt(p, "use_encrypt") == 0 ? false : true; use_compress = PackGetInt(p, "use_compress") == 0 ? false : true; @@ -1997,7 +2009,7 @@ bool ServerAccept(CONNECTION *c) if (fail_ext_user_auth == false) { - auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, false, mschap_v2_server_response_20); + auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, false, mschap_v2_server_response_20, &radius_login_opt); } if (auth_ret && pol == NULL) @@ -2028,7 +2040,7 @@ bool ServerAccept(CONNECTION *c) // If there is asterisk user, log on as the user if (b) { - auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, true, mschap_v2_server_response_20); + auth_ret = SamAuthUserByPlainPassword(c, hub, username, plain_password, true, mschap_v2_server_response_20, &radius_login_opt); if (auth_ret && pol == NULL) { pol = SamGetUserPolicy(hub, "*"); @@ -2180,6 +2192,12 @@ bool ServerAccept(CONNECTION *c) // Authentication success FreePack(p); + // Check the assigned VLAN ID + if (radius_login_opt.Out_VLanId != 0) + { + assigned_vlan_id = radius_login_opt.Out_VLanId; + } + if (StrCmpi(username, ADMINISTRATOR_USERNAME) != 0) { // Get the policy @@ -2468,8 +2486,6 @@ bool ServerAccept(CONNECTION *c) policy->NoRouting = true; } - GenerateMachineUniqueHash(unique2); - if (Cmp(unique, unique2, SHA1_SIZE) == 0) { // It's a localhost session @@ -2865,6 +2881,18 @@ bool ServerAccept(CONNECTION *c) // Remove the connection from Cedar DelConnection(c->Cedar, c); + // VLAN ID + if (assigned_vlan_id != 0) + { + if (policy != NULL) + { + if (policy->VLanId == 0) + { + policy->VLanId = assigned_vlan_id; + } + } + } + // Create a Session StrLower(username); s = NewServerSessionEx(c->Cedar, c, hub, username, policy, c->IsInProc); @@ -3050,6 +3078,7 @@ bool ServerAccept(CONNECTION *c) s->QoS = qos; s->NoReconnectToSession = no_reconnect_to_session; + if (policy != NULL) { s->VLanId = policy->VLanId; @@ -3245,6 +3274,11 @@ bool ServerAccept(CONNECTION *c) NodeInfoToStr(tmp, sizeof(tmp), &s->NodeInfo); HLog(hub, "LH_NODE_INFO", s->Name, tmp); + + if (s->VLanId != 0) + { + HLog(hub, "LH_VLAN_ID", s->Name, s->VLanId); + } } // Shift the connection to the tunneling mode diff --git a/src/Cedar/Radius.c b/src/Cedar/Radius.c index 82c6f122..34a5ee6f 100644 --- a/src/Cedar/Radius.c +++ b/src/Cedar/Radius.c @@ -114,7 +114,8 @@ #include "CedarPch.h" // Attempts Radius authentication (with specifying retry interval and multiple server) -bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20) +bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20, + RADIUS_LOGIN_OPTION *opt) { UCHAR random[MD5_SIZE]; UCHAR id; @@ -128,6 +129,7 @@ bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT sec IPC_MSCHAP_V2_AUTHINFO mschap; bool is_mschap; char client_ip_str[MAX_SIZE]; + RADIUS_LOGIN_OPTION opt_dummy; static UINT packet_id = 0; // Validate arguments if (server == NULL || port == 0 || (secret_size != 0 && secret == NULL) || username == NULL || password == NULL) @@ -135,6 +137,15 @@ bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT sec return false; } + if (opt == NULL) + { + Zero(&opt_dummy, sizeof(opt_dummy)); + + opt = &opt_dummy; + } + + opt->Out_VLanId = 0; + Zero(client_ip_str, sizeof(client_ip_str)); if (c != NULL && c->FirstSock != NULL) { @@ -450,6 +461,34 @@ RECV_RETRY: FreeBuf(b); } } + + if (opt->In_CheckVLanId) + { + BUF *buf = NewBufFromMemory(recv_buf, recv_size); + LIST *o = RadiusParseOptions(buf); + + if (o != NULL) + { + DHCP_OPTION *vlan_option = GetDhcpOption(o, RADIUS_ATTRIBUTE_VLAN_ID); + + if (vlan_option != NULL) + { + UINT vlan_id = 0; + char tmp[32]; + + Zero(tmp, sizeof(tmp)); + + Copy(tmp, vlan_option->Data, MIN(vlan_option->Size, sizeof(tmp) - 1)); + + vlan_id = ToInt(tmp); + + opt->Out_VLanId = vlan_id; + } + } + + FreeBuf(buf); + FreeDhcpOptions(o); + } } break; } @@ -484,6 +523,68 @@ RECV_RETRY: return ret; } +// Parse RADIUS attributes +LIST *RadiusParseOptions(BUF *b) +{ + LIST *o; + UCHAR code; + UCHAR id; + USHORT len; + UCHAR auth[16]; + // Validate arguments + if (b == NULL) + { + return NULL; + } + + o = NewList(NULL); + + ReadBuf(b, &code, 1); + ReadBuf(b, &id, 1); + len = 0; + ReadBuf(b, &len, 2); + len = Endian16(len); + ReadBuf(b, auth, 16); + + while (true) + { + UCHAR attribute_id; + UCHAR size; + UCHAR data[256]; + DHCP_OPTION *d; + + if (ReadBuf(b, &attribute_id, 1) != 1) + { + break; + } + + if (ReadBuf(b, &size, 1) != 1) + { + break; + } + + if (size <= 2) + { + break; + } + + size -= 2; + if (ReadBuf(b, data, size) != size) + { + break; + } + + d = ZeroMalloc(sizeof(DHCP_OPTION)); + d->Id = attribute_id; + d->Size = size; + d->Data = Clone(data, d->Size); + + Add(o, d); + } + + return o; +} + // Adding Attributes void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size) { diff --git a/src/Cedar/Radius.h b/src/Cedar/Radius.h index 9c86c587..6c27fee2 100644 --- a/src/Cedar/Radius.h +++ b/src/Cedar/Radius.h @@ -118,13 +118,25 @@ #define RADIUS_RETRY_INTERVAL 500 // Retransmission interval #define RADIUS_RETRY_TIMEOUT (10 * 1000) // Time-out period + +// RADIUS attributes +#define RADIUS_ATTRIBUTE_VLAN_ID 81 + +struct RADIUS_LOGIN_OPTION +{ + bool In_CheckVLanId; + UINT Out_VLanId; +}; + // Function prototype -bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20); +bool RadiusLogin(CONNECTION *c, char *server, UINT port, UCHAR *secret, UINT secret_size, wchar_t *username, char *password, UINT interval, UCHAR *mschap_v2_server_response_20, + RADIUS_LOGIN_OPTION *opt); BUF *RadiusEncryptPassword(char *password, UCHAR *random, UCHAR *secret, UINT secret_size); BUF *RadiusCreateUserName(wchar_t *username); BUF *RadiusCreateUserPassword(void *data, UINT size); BUF *RadiusCreateNasId(char *name); void RadiusAddValue(BUF *b, UCHAR t, UINT v, UCHAR vt, void *data, UINT size); +LIST *RadiusParseOptions(BUF *b); #endif // RADIUS_H diff --git a/src/Cedar/SW.c b/src/Cedar/SW.c index 929f98d5..260a5342 100644 --- a/src/Cedar/SW.c +++ b/src/Cedar/SW.c @@ -2670,7 +2670,7 @@ void SwDefineTasks(SW *sw, SW_TASK *t, SW_COMPONENT *c) SW_TASK_COPY *vpninstall; wchar_t *src_config_filename; - CombinePathW(tmp, sizeof(tmp), sw->InstallDir, L"backup.vpn_vpnclient.config"); + CombinePathW(tmp, sizeof(tmp), sw->InstallDir, L"backup.vpn_client.config"); Add(t->SetSecurityPaths, CopyUniStr(tmp)); if (x64 == false) diff --git a/src/Cedar/Sam.c b/src/Cedar/Sam.c index 1072376d..5e8d85d1 100644 --- a/src/Cedar/Sam.c +++ b/src/Cedar/Sam.c @@ -175,7 +175,7 @@ bool SamAuthUserByAnonymous(HUB *h, char *username) } // Plaintext password authentication of user -bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20) +bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20, RADIUS_LOGIN_OPTION *opt) { bool b = false; wchar_t *name = NULL; @@ -267,7 +267,7 @@ bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *p // Attempt to login b = RadiusLogin(c, radius_server_addr, radius_server_port, radius_secret, StrLen(radius_secret), - name, password, interval, mschap_v2_server_response_20); + name, password, interval, mschap_v2_server_response_20, opt); } Lock(hub->lock); diff --git a/src/Cedar/Sam.h b/src/Cedar/Sam.h index c2bd9817..ca58f06f 100644 --- a/src/Cedar/Sam.h +++ b/src/Cedar/Sam.h @@ -121,7 +121,7 @@ UINT SamGetUserAuthType(HUB *h, char *username); bool SamAuthUserByPassword(HUB *h, char *username, void *random, void *secure_password, char *mschap_v2_password, UCHAR *mschap_v2_server_response_20, UINT *err); bool SamAuthUserByAnonymous(HUB *h, char *username); bool SamAuthUserByCert(HUB *h, char *username, X *x); -bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20); +bool SamAuthUserByPlainPassword(CONNECTION *c, HUB *hub, char *username, char *password, bool ast, UCHAR *mschap_v2_server_response_20, RADIUS_LOGIN_OPTION *opt); POLICY *SamGetUserPolicy(HUB *h, char *username); void GenRamdom(void *random); diff --git a/src/Cedar/Server.c b/src/Cedar/Server.c index 161c6760..08b1fb3d 100644 --- a/src/Cedar/Server.c +++ b/src/Cedar/Server.c @@ -260,6 +260,7 @@ UINT SiDebug(SERVER *s, RPC_TEST *ret, UINT i, char *str) {10, "Get VgsMessageDisplayed Flag", "", SiDebugProcGetVgsMessageDisplayedValue}, {11, "Set VgsMessageDisplayed Flag", "", SiDebugProcSetVgsMessageDisplayedValue}, {12, "Get the current TCP send queue length", "", SiDebugProcGetCurrentTcpSendQueueLength}, + {13, "Get the current GetIP thread count", "", SiDebugProcGetCurrentGetIPThreadCount}, }; UINT num_proc_list = sizeof(proc_list) / sizeof(proc_list[0]); UINT j; @@ -478,6 +479,25 @@ UINT SiDebugProcGetCurrentTcpSendQueueLength(SERVER *s, char *in_str, char *ret_ return ERR_NO_ERROR; } +UINT SiDebugProcGetCurrentGetIPThreadCount(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size) +{ + char tmp1[64], tmp2[64]; + // Validate arguments + if (s == NULL || in_str == NULL || ret_str == NULL) + { + return ERR_INVALID_PARAMETER; + } + + ToStr3(tmp1, 0, GetCurrentGetIpThreadNum()); + ToStr3(tmp2, 0, GetGetIpThreadMaxNum()); + + Format(ret_str, 0, + "Current threads = %s\n" + "Quota = %s\n", + tmp1, tmp2); + + return ERR_NO_ERROR; +} UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size) { // Validate arguments @@ -4081,6 +4101,7 @@ void SiLoadHubOptionCfg(FOLDER *f, HUB_OPTION *o) o->DisableCheckMacOnLocalBridge = CfgGetBool(f, "DisableCheckMacOnLocalBridge"); o->DisableCorrectIpOffloadChecksum = CfgGetBool(f, "DisableCorrectIpOffloadChecksum"); o->SuppressClientUpdateNotification = CfgGetBool(f, "SuppressClientUpdateNotification"); + o->AssignVLanIdByRadiusAttribute = CfgGetBool(f, "AssignVLanIdByRadiusAttribute"); // Enabled by default if (CfgIsItem(f, "ManageOnlyPrivateIP")) @@ -4156,6 +4177,7 @@ void SiWriteHubOptionCfg(FOLDER *f, HUB_OPTION *o) CfgAddBool(f, "DropBroadcastsInPrivacyFilterMode", o->DropBroadcastsInPrivacyFilterMode); CfgAddBool(f, "DropArpInPrivacyFilterMode", o->DropArpInPrivacyFilterMode); CfgAddBool(f, "SuppressClientUpdateNotification", o->SuppressClientUpdateNotification); + CfgAddBool(f, "AssignVLanIdByRadiusAttribute", o->AssignVLanIdByRadiusAttribute); CfgAddBool(f, "NoLookBPDUBridgeId", o->NoLookBPDUBridgeId); CfgAddInt(f, "AdjustTcpMssValue", o->AdjustTcpMssValue); CfgAddBool(f, "DisableAdjustTcpMss", o->DisableAdjustTcpMss); @@ -5748,6 +5770,7 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f) bool cluster_allowed = false; UINT num_connections_per_ip = 0; FOLDER *params_folder; + UINT i; // Validate arguments if (s == NULL || f == NULL) { @@ -5765,6 +5788,16 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f) s->AutoSaveConfigSpan = MAKESURE(s->AutoSaveConfigSpan, SERVER_FILE_SAVE_INTERVAL_MIN, SERVER_FILE_SAVE_INTERVAL_MAX); } + i = CfgGetInt(f, "MaxConcurrentDnsClientThreads"); + if (i != 0) + { + SetGetIpThreadMaxNum(i); + } + else + { + SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM); + } + s->DontBackupConfig = CfgGetBool(f, "DontBackupConfig"); if (CfgIsItem(f, "BackupConfigOnlyWhenModified")) @@ -5900,6 +5933,16 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f) // Disable the OpenVPN server function s->DisableOpenVPNServer = CfgGetBool(f, "DisableOpenVPNServer"); + // OpenVPN Default Option String + if (CfgGetStr(f, "OpenVPNDefaultClientOption", tmp, sizeof(tmp))) + { + if (IsEmptyStr(tmp) == false) + { + StrCpy(c->OpenVPNDefaultClientOption, + sizeof(c->OpenVPNDefaultClientOption), tmp); + } + } + // Disable the NAT-traversal feature s->DisableNatTraversal = CfgGetBool(f, "DisableNatTraversal"); @@ -6190,6 +6233,8 @@ void SiWriteServerCfg(FOLDER *f, SERVER *s) return; } + CfgAddInt(f, "MaxConcurrentDnsClientThreads", GetGetIpThreadMaxNum()); + CfgAddInt(f, "CurrentBuild", s->Cedar->Build); CfgAddInt(f, "AutoSaveConfigSpan", s->AutoSaveConfigSpanSaved / 1000); @@ -6292,6 +6337,8 @@ void SiWriteServerCfg(FOLDER *f, SERVER *s) } } + CfgAddStr(f, "OpenVPNDefaultClientOption", c->OpenVPNDefaultClientOption); + if (c->Bridge == false) { // VPN over ICMP @@ -7431,6 +7478,7 @@ void SiCalledUpdateHub(SERVER *s, PACK *p) o.DropBroadcastsInPrivacyFilterMode = PackGetBool(p, "DropBroadcastsInPrivacyFilterMode"); o.DropArpInPrivacyFilterMode = PackGetBool(p, "DropArpInPrivacyFilterMode"); o.SuppressClientUpdateNotification = PackGetBool(p, "SuppressClientUpdateNotification"); + o.AssignVLanIdByRadiusAttribute = PackGetBool(p, "AssignVLanIdByRadiusAttribute"); o.VlanTypeId = PackGetInt(p, "VlanTypeId"); if (o.VlanTypeId == 0) { @@ -9270,6 +9318,7 @@ void SiPackAddCreateHub(PACK *p, HUB *h) PackAddBool(p, "DropBroadcastsInPrivacyFilterMode", h->Option->DropBroadcastsInPrivacyFilterMode); PackAddBool(p, "DropArpInPrivacyFilterMode", h->Option->DropArpInPrivacyFilterMode); PackAddBool(p, "SuppressClientUpdateNotification", h->Option->SuppressClientUpdateNotification); + PackAddBool(p, "AssignVLanIdByRadiusAttribute", h->Option->AssignVLanIdByRadiusAttribute); PackAddInt(p, "ClientMinimumRequiredBuild", h->Option->ClientMinimumRequiredBuild); PackAddBool(p, "FixForDLinkBPDU", h->Option->FixForDLinkBPDU); PackAddBool(p, "BroadcastLimiterStrictMode", h->Option->BroadcastLimiterStrictMode); @@ -10811,6 +10860,8 @@ SERVER *SiNewServerEx(bool bridge, bool in_client_inner_server) LISTENER *azure; LISTENER *rudp; + SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM); + s = ZeroMalloc(sizeof(SERVER)); SetEraserCheckInterval(0); diff --git a/src/Cedar/Server.h b/src/Cedar/Server.h index ffe5b78d..c722ca43 100644 --- a/src/Cedar/Server.h +++ b/src/Cedar/Server.h @@ -678,6 +678,7 @@ UINT SiDebugProcSetIPsecMessageDisplayedValue(SERVER *s, char *in_str, char *ret UINT SiDebugProcGetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); UINT SiDebugProcSetVgsMessageDisplayedValue(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); UINT SiDebugProcGetCurrentTcpSendQueueLength(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); +UINT SiDebugProcGetCurrentGetIPThreadCount(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); typedef UINT (SI_DEBUG_PROC)(SERVER *s, char *in_str, char *ret_str, UINT ret_str_size); diff --git a/src/Cedar/UdpAccel.c b/src/Cedar/UdpAccel.c index ccdc8e02..0e592e81 100644 --- a/src/Cedar/UdpAccel.c +++ b/src/Cedar/UdpAccel.c @@ -1034,6 +1034,11 @@ UDP_ACCEL *NewUdpAccel(CEDAR *cedar, IP *ip, bool client_mode, bool random_port, a->IsIPv6 = IsIP6(ip); + if (a->IsIPv6) + { + a->NoNatT = true; + } + a->RecvBlockQueue = NewQueue(); Rand(a->NextIv, sizeof(a->NextIv)); @@ -1088,6 +1093,8 @@ void NatT_GetIpThread(THREAD *thread, void *param) { UDP_ACCEL *a; char hostname[MAX_SIZE]; + static IP dummy_ip = {0}; + UINT num_retry = 0; // Validate arguments if (thread == NULL || param == NULL) { @@ -1096,11 +1103,17 @@ void NatT_GetIpThread(THREAD *thread, void *param) a = (UDP_ACCEL *)param; - RUDPGetRegisterHostNameByIP(hostname, sizeof(hostname), NULL); + if (IsZeroIP(&dummy_ip)) + { + SetIP(&dummy_ip, 11, Rand8(), Rand8(), Rand8()); + } + + RUDPGetRegisterHostNameByIP(hostname, sizeof(hostname), &dummy_ip); while (a->NatT_Halt == false) { IP ip; + UINT wait_time = UDP_NAT_T_GET_IP_INTERVAL; // Get the IP address bool ret = GetIP4Ex(&ip, hostname, 0, &a->NatT_Halt); @@ -1125,7 +1138,11 @@ void NatT_GetIpThread(THREAD *thread, void *param) } // Fail to get - Wait(a->NatT_HaltEvent, UDP_NAT_T_GET_IP_INTERVAL); + num_retry++; + + wait_time = (UINT)(MIN((UINT64)UDP_NAT_T_GET_IP_INTERVAL * (UINT64)num_retry, (UINT64)UDP_NAT_T_GET_IP_INTERVAL_MAX)); + + Wait(a->NatT_HaltEvent, wait_time); } } diff --git a/src/CurrentBuild.txt b/src/CurrentBuild.txt index 248c062f..45aa2be7 100644 --- a/src/CurrentBuild.txt +++ b/src/CurrentBuild.txt @@ -1,4 +1,4 @@ -BUILD_NUMBER 9506 -VERSION 411 +BUILD_NUMBER 9514 +VERSION 412 BUILD_NAME beta -BUILD_DATE 20141022_195155 +BUILD_DATE 20141117_214116 diff --git a/src/Makefile64 b/src/Makefile64 new file mode 100644 index 00000000..f02d7deb --- /dev/null +++ b/src/Makefile64 @@ -0,0 +1,361 @@ +# PacketiX VPN Source Code +# Copyright (c) SoftEther Corporation. All Rights Reserved. +# Platform: linux-x86-64bit + +# Variables +CC=gcc + +OPTIONS_COMPILE_DEBUG=-DUNIX_LINUX -DCPU_64 -DCPU_X64 -D_DEBUG -DDEBUG -DUNIX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./ -I./Cedar/ -I./Mayaqua/ -g -fsigned-char -pthread -m64 + +OPTIONS_LINK_DEBUG=-g -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/64/libssl.a lib/64/libcrypto.a lib/64/libiconv.a lib/64/libcharset.a lib/64/libedit.a lib/64/libncurses.a lib/64/libz.a lib/64/libintelaes.a + +OPTIONS_COMPILE_RELEASE=-DUNIX_LINUX -DCPU_64 -DCPU_X64 -DNDEBUG -DVPN_SPEED -DMAYAQUA_REPLACE -DUNIX -D_REENTRANT -DREENTRANT -D_THREAD_SAFE -D_THREADSAFE -DTHREAD_SAFE -DTHREADSAFE -D_FILE_OFFSET_BITS=64 -I./ -I./Cedar/ -I./Mayaqua/ -O2 -fsigned-char -pthread -m64 + +OPTIONS_LINK_RELEASE=-O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/64/libssl.a lib/64/libcrypto.a lib/64/libiconv.a lib/64/libcharset.a lib/64/libedit.a lib/64/libncurses.a lib/64/libz.a lib/64/libintelaes.a + +ifeq ($(DEBUG),YES) + OPTIONS_COMPILE=$(OPTIONS_COMPILE_DEBUG) + OPTIONS_LINK=$(OPTIONS_LINK_DEBUG) +else + OPTIONS_COMPILE=$(OPTIONS_COMPILE_RELEASE) + OPTIONS_LINK=$(OPTIONS_LINK_RELEASE) +endif + +# Files +HEADERS_MAYAQUA=Mayaqua/Cfg.h Mayaqua/cryptoki.h Mayaqua/Encrypt.h Mayaqua/FileIO.h Mayaqua/intelaes/iaesni.h Mayaqua/Internat.h Mayaqua/Kernel.h Mayaqua/Mayaqua.h Mayaqua/MayaType.h Mayaqua/Memory.h Mayaqua/Microsoft.h Mayaqua/Network.h Mayaqua/Object.h Mayaqua/openssl/aes.h Mayaqua/openssl/asn1.h Mayaqua/openssl/asn1_mac.h Mayaqua/openssl/asn1t.h Mayaqua/openssl/bio.h Mayaqua/openssl/blowfish.h Mayaqua/openssl/bn.h Mayaqua/openssl/buffer.h Mayaqua/openssl/cast.h Mayaqua/openssl/comp.h Mayaqua/openssl/conf.h Mayaqua/openssl/conf_api.h Mayaqua/openssl/crypto.h Mayaqua/openssl/des.h Mayaqua/openssl/des_old.h Mayaqua/openssl/dh.h Mayaqua/openssl/dsa.h Mayaqua/openssl/dso.h Mayaqua/openssl/dtls1.h Mayaqua/openssl/e_os2.h Mayaqua/openssl/ebcdic.h Mayaqua/openssl/ec.h Mayaqua/openssl/ecdh.h Mayaqua/openssl/ecdsa.h Mayaqua/openssl/engine.h Mayaqua/openssl/err.h Mayaqua/openssl/evp.h Mayaqua/openssl/fips.h Mayaqua/openssl/fips_rand.h Mayaqua/openssl/hmac.h Mayaqua/openssl/idea.h Mayaqua/openssl/krb5_asn.h Mayaqua/openssl/kssl.h Mayaqua/openssl/lhash.h Mayaqua/openssl/md2.h Mayaqua/openssl/md4.h Mayaqua/openssl/md5.h Mayaqua/openssl/mdc2.h Mayaqua/openssl/obj_mac.h Mayaqua/openssl/objects.h Mayaqua/openssl/ocsp.h Mayaqua/openssl/opensslconf.h Mayaqua/openssl/opensslv.h Mayaqua/openssl/ossl_typ.h Mayaqua/openssl/pem.h Mayaqua/openssl/pem2.h Mayaqua/openssl/pkcs12.h Mayaqua/openssl/pkcs7.h Mayaqua/openssl/pq_compat.h Mayaqua/openssl/pqueue.h Mayaqua/openssl/rand.h Mayaqua/openssl/rc2.h Mayaqua/openssl/rc4.h Mayaqua/openssl/rc5.h Mayaqua/openssl/ripemd.h Mayaqua/openssl/rsa.h Mayaqua/openssl/safestack.h Mayaqua/openssl/sha.h Mayaqua/openssl/ssl.h Mayaqua/openssl/ssl2.h Mayaqua/openssl/ssl23.h Mayaqua/openssl/ssl3.h Mayaqua/openssl/stack.h Mayaqua/openssl/store.h Mayaqua/openssl/symhacks.h Mayaqua/openssl/tls1.h Mayaqua/openssl/tmdiff.h Mayaqua/openssl/txt_db.h Mayaqua/openssl/ui.h Mayaqua/openssl/ui_compat.h Mayaqua/openssl/x509.h Mayaqua/openssl/x509_vfy.h Mayaqua/openssl/x509v3.h Mayaqua/OS.h Mayaqua/Pack.h Mayaqua/pkcs11.h Mayaqua/pkcs11f.h Mayaqua/pkcs11t.h Mayaqua/Secure.h Mayaqua/Str.h Mayaqua/Table.h Mayaqua/TcpIp.h Mayaqua/Tick64.h Mayaqua/Tracking.h Mayaqua/TunTap.h Mayaqua/Unix.h Mayaqua/Win32.h Mayaqua/zlib/zconf.h Mayaqua/zlib/zlib.h +HEADERS_CEDAR=Cedar/Account.h Cedar/Admin.h Cedar/AzureClient.h Cedar/AzureServer.h Cedar/Bridge.h Cedar/BridgeUnix.h Cedar/BridgeWin32.h Cedar/Cedar.h Cedar/CedarPch.h Cedar/CedarType.h Cedar/Client.h Cedar/CM.h Cedar/CMInner.h Cedar/Command.h Cedar/Connection.h Cedar/Console.h Cedar/Database.h Cedar/DDNS.h Cedar/EM.h Cedar/EMInner.h Cedar/EtherLog.h Cedar/Hub.h Cedar/Interop_OpenVPN.h Cedar/Interop_SSTP.h Cedar/IPsec.h Cedar/IPsec_EtherIP.h Cedar/IPsec_IKE.h Cedar/IPsec_IkePacket.h Cedar/IPsec_IPC.h Cedar/IPsec_L2TP.h Cedar/IPsec_PPP.h Cedar/IPsec_Win7.h Cedar/IPsec_Win7Inner.h Cedar/Layer3.h Cedar/Link.h Cedar/Listener.h Cedar/Logging.h Cedar/Nat.h Cedar/NativeStack.h Cedar/NM.h Cedar/NMInner.h Cedar/NullLan.h Cedar/Protocol.h Cedar/Radius.h Cedar/Remote.h Cedar/Sam.h Cedar/SecureInfo.h Cedar/SecureNAT.h Cedar/SeLowUser.h Cedar/Server.h Cedar/Session.h Cedar/SM.h Cedar/SMInner.h Cedar/SW.h Cedar/SWInner.h Cedar/UdpAccel.h Cedar/UT.h Cedar/VG.h Cedar/Virtual.h Cedar/VLan.h Cedar/VLanUnix.h Cedar/VLanWin32.h Cedar/WaterMark.h Cedar/WebUI.h Cedar/Win32Com.h Cedar/WinUi.h Cedar/Wpc.h +OBJECTS_MAYAQUA=object/Mayaqua/Cfg.o object/Mayaqua/Encrypt.o object/Mayaqua/FileIO.o object/Mayaqua/Internat.o object/Mayaqua/Kernel.o object/Mayaqua/Mayaqua.o object/Mayaqua/Memory.o object/Mayaqua/Microsoft.o object/Mayaqua/Network.o object/Mayaqua/Object.o object/Mayaqua/OS.o object/Mayaqua/Pack.o object/Mayaqua/Secure.o object/Mayaqua/Str.o object/Mayaqua/Table.o object/Mayaqua/TcpIp.o object/Mayaqua/Tick64.o object/Mayaqua/Tracking.o object/Mayaqua/Unix.o object/Mayaqua/Win32.o +OBJECTS_CEDAR=object/Cedar/Account.o object/Cedar/Admin.o object/Cedar/AzureClient.o object/Cedar/AzureServer.o object/Cedar/Bridge.o object/Cedar/BridgeUnix.o object/Cedar/BridgeWin32.o object/Cedar/Cedar.o object/Cedar/CedarPch.o object/Cedar/Client.o object/Cedar/CM.o object/Cedar/Command.o object/Cedar/Connection.o object/Cedar/Console.o object/Cedar/Database.o object/Cedar/DDNS.o object/Cedar/EM.o object/Cedar/EtherLog.o object/Cedar/Hub.o object/Cedar/Interop_OpenVPN.o object/Cedar/Interop_SSTP.o object/Cedar/IPsec.o object/Cedar/IPsec_EtherIP.o object/Cedar/IPsec_IKE.o object/Cedar/IPsec_IkePacket.o object/Cedar/IPsec_IPC.o object/Cedar/IPsec_L2TP.o object/Cedar/IPsec_PPP.o object/Cedar/IPsec_Win7.o object/Cedar/Layer3.o object/Cedar/Link.o object/Cedar/Listener.o object/Cedar/Logging.o object/Cedar/Nat.o object/Cedar/NativeStack.o object/Cedar/NM.o object/Cedar/NullLan.o object/Cedar/Protocol.o object/Cedar/Radius.o object/Cedar/Remote.o object/Cedar/Sam.o object/Cedar/SecureInfo.o object/Cedar/SecureNAT.o object/Cedar/SeLowUser.o object/Cedar/Server.o object/Cedar/Session.o object/Cedar/SM.o object/Cedar/SW.o object/Cedar/UdpAccel.o object/Cedar/UT.o object/Cedar/VG.o object/Cedar/Virtual.o object/Cedar/VLan.o object/Cedar/VLanUnix.o object/Cedar/VLanWin32.o object/Cedar/WaterMark.o object/Cedar/WebUI.o object/Cedar/WinUi.o object/Cedar/Wpc.o + +# Build Action +default: build + +build: $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) bin/ham bin/vpnserver bin/vpnbridge bin/vpnclient bin/vpncmd + +# Mayaqua Kernel Code +object/Mayaqua/Cfg.o: Mayaqua/Cfg.c $(HEADERS_MAYAQUA) + @mkdir -p object/ + @mkdir -p object/Mayaqua/ + @mkdir -p object/Cedar/ + @mkdir -p code/ + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Cfg.c -o object/Mayaqua/Cfg.o + +object/Mayaqua/Encrypt.o: Mayaqua/Encrypt.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Encrypt.c -o object/Mayaqua/Encrypt.o + +object/Mayaqua/FileIO.o: Mayaqua/FileIO.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/FileIO.c -o object/Mayaqua/FileIO.o + +object/Mayaqua/Internat.o: Mayaqua/Internat.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Internat.c -o object/Mayaqua/Internat.o + +object/Mayaqua/Kernel.o: Mayaqua/Kernel.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Kernel.c -o object/Mayaqua/Kernel.o + +object/Mayaqua/Mayaqua.o: Mayaqua/Mayaqua.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Mayaqua.c -o object/Mayaqua/Mayaqua.o + +object/Mayaqua/Memory.o: Mayaqua/Memory.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Memory.c -o object/Mayaqua/Memory.o + +object/Mayaqua/Microsoft.o: Mayaqua/Microsoft.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Microsoft.c -o object/Mayaqua/Microsoft.o + +object/Mayaqua/Network.o: Mayaqua/Network.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Network.c -o object/Mayaqua/Network.o + +object/Mayaqua/Object.o: Mayaqua/Object.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Object.c -o object/Mayaqua/Object.o + +object/Mayaqua/OS.o: Mayaqua/OS.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/OS.c -o object/Mayaqua/OS.o + +object/Mayaqua/Pack.o: Mayaqua/Pack.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Pack.c -o object/Mayaqua/Pack.o + +object/Mayaqua/Secure.o: Mayaqua/Secure.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Secure.c -o object/Mayaqua/Secure.o + +object/Mayaqua/Str.o: Mayaqua/Str.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Str.c -o object/Mayaqua/Str.o + +object/Mayaqua/Table.o: Mayaqua/Table.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Table.c -o object/Mayaqua/Table.o + +object/Mayaqua/TcpIp.o: Mayaqua/TcpIp.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/TcpIp.c -o object/Mayaqua/TcpIp.o + +object/Mayaqua/Tick64.o: Mayaqua/Tick64.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Tick64.c -o object/Mayaqua/Tick64.o + +object/Mayaqua/Tracking.o: Mayaqua/Tracking.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Tracking.c -o object/Mayaqua/Tracking.o + +object/Mayaqua/Unix.o: Mayaqua/Unix.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Unix.c -o object/Mayaqua/Unix.o + +object/Mayaqua/Win32.o: Mayaqua/Win32.c $(HEADERS_MAYAQUA) + $(CC) $(OPTIONS_COMPILE) -c Mayaqua/Win32.c -o object/Mayaqua/Win32.o + +# Cedar Communication Module Code +object/Cedar/Account.o: Cedar/Account.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Account.c -o object/Cedar/Account.o + +object/Cedar/Admin.o: Cedar/Admin.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Admin.c -o object/Cedar/Admin.o + +object/Cedar/AzureClient.o: Cedar/AzureClient.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/AzureClient.c -o object/Cedar/AzureClient.o + +object/Cedar/AzureServer.o: Cedar/AzureServer.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/AzureServer.c -o object/Cedar/AzureServer.o + +object/Cedar/Bridge.o: Cedar/Bridge.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) Cedar/BridgeUnix.c + $(CC) $(OPTIONS_COMPILE) -c Cedar/Bridge.c -o object/Cedar/Bridge.o + +object/Cedar/BridgeUnix.o: Cedar/BridgeUnix.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/BridgeUnix.c -o object/Cedar/BridgeUnix.o + +object/Cedar/BridgeWin32.o: Cedar/BridgeWin32.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/BridgeWin32.c -o object/Cedar/BridgeWin32.o + +object/Cedar/Cedar.o: Cedar/Cedar.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Cedar.c -o object/Cedar/Cedar.o + +object/Cedar/CedarPch.o: Cedar/CedarPch.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/CedarPch.c -o object/Cedar/CedarPch.o + +object/Cedar/Client.o: Cedar/Client.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Client.c -o object/Cedar/Client.o + +object/Cedar/CM.o: Cedar/CM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/CM.c -o object/Cedar/CM.o + +object/Cedar/Command.o: Cedar/Command.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Command.c -o object/Cedar/Command.o + +object/Cedar/Connection.o: Cedar/Connection.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Connection.c -o object/Cedar/Connection.o + +object/Cedar/Console.o: Cedar/Console.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Console.c -o object/Cedar/Console.o + +object/Cedar/Database.o: Cedar/Database.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Database.c -o object/Cedar/Database.o + +object/Cedar/DDNS.o: Cedar/DDNS.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/DDNS.c -o object/Cedar/DDNS.o + +object/Cedar/EM.o: Cedar/EM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/EM.c -o object/Cedar/EM.o + +object/Cedar/EtherLog.o: Cedar/EtherLog.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/EtherLog.c -o object/Cedar/EtherLog.o + +object/Cedar/Hub.o: Cedar/Hub.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Hub.c -o object/Cedar/Hub.o + +object/Cedar/Interop_OpenVPN.o: Cedar/Interop_OpenVPN.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Interop_OpenVPN.c -o object/Cedar/Interop_OpenVPN.o + +object/Cedar/Interop_SSTP.o: Cedar/Interop_SSTP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Interop_SSTP.c -o object/Cedar/Interop_SSTP.o + +object/Cedar/IPsec.o: Cedar/IPsec.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec.c -o object/Cedar/IPsec.o + +object/Cedar/IPsec_EtherIP.o: Cedar/IPsec_EtherIP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_EtherIP.c -o object/Cedar/IPsec_EtherIP.o + +object/Cedar/IPsec_IKE.o: Cedar/IPsec_IKE.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IKE.c -o object/Cedar/IPsec_IKE.o + +object/Cedar/IPsec_IkePacket.o: Cedar/IPsec_IkePacket.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IkePacket.c -o object/Cedar/IPsec_IkePacket.o + +object/Cedar/IPsec_IPC.o: Cedar/IPsec_IPC.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_IPC.c -o object/Cedar/IPsec_IPC.o + +object/Cedar/IPsec_L2TP.o: Cedar/IPsec_L2TP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_L2TP.c -o object/Cedar/IPsec_L2TP.o + +object/Cedar/IPsec_PPP.o: Cedar/IPsec_PPP.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_PPP.c -o object/Cedar/IPsec_PPP.o + +object/Cedar/IPsec_Win7.o: Cedar/IPsec_Win7.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/IPsec_Win7.c -o object/Cedar/IPsec_Win7.o + +object/Cedar/Layer3.o: Cedar/Layer3.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Layer3.c -o object/Cedar/Layer3.o + +object/Cedar/Link.o: Cedar/Link.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Link.c -o object/Cedar/Link.o + +object/Cedar/Listener.o: Cedar/Listener.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Listener.c -o object/Cedar/Listener.o + +object/Cedar/Logging.o: Cedar/Logging.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Logging.c -o object/Cedar/Logging.o + +object/Cedar/Nat.o: Cedar/Nat.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Nat.c -o object/Cedar/Nat.o + +object/Cedar/NativeStack.o: Cedar/NativeStack.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/NativeStack.c -o object/Cedar/NativeStack.o + +object/Cedar/NM.o: Cedar/NM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/NM.c -o object/Cedar/NM.o + +object/Cedar/NullLan.o: Cedar/NullLan.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/NullLan.c -o object/Cedar/NullLan.o + +object/Cedar/Protocol.o: Cedar/Protocol.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Protocol.c -o object/Cedar/Protocol.o + +object/Cedar/Radius.o: Cedar/Radius.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Radius.c -o object/Cedar/Radius.o + +object/Cedar/Remote.o: Cedar/Remote.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Remote.c -o object/Cedar/Remote.o + +object/Cedar/Sam.o: Cedar/Sam.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Sam.c -o object/Cedar/Sam.o + +object/Cedar/SecureInfo.o: Cedar/SecureInfo.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/SecureInfo.c -o object/Cedar/SecureInfo.o + +object/Cedar/SecureNAT.o: Cedar/SecureNAT.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/SecureNAT.c -o object/Cedar/SecureNAT.o + +object/Cedar/SeLowUser.o: Cedar/SeLowUser.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/SeLowUser.c -o object/Cedar/SeLowUser.o + +object/Cedar/Server.o: Cedar/Server.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Server.c -o object/Cedar/Server.o + +object/Cedar/Session.o: Cedar/Session.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Session.c -o object/Cedar/Session.o + +object/Cedar/SM.o: Cedar/SM.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/SM.c -o object/Cedar/SM.o + +object/Cedar/SW.o: Cedar/SW.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/SW.c -o object/Cedar/SW.o + +object/Cedar/UdpAccel.o: Cedar/UdpAccel.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/UdpAccel.c -o object/Cedar/UdpAccel.o + +object/Cedar/UT.o: Cedar/UT.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/UT.c -o object/Cedar/UT.o + +object/Cedar/VG.o: Cedar/VG.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/VG.c -o object/Cedar/VG.o + +object/Cedar/Virtual.o: Cedar/Virtual.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Virtual.c -o object/Cedar/Virtual.o + +object/Cedar/VLan.o: Cedar/VLan.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/VLan.c -o object/Cedar/VLan.o + +object/Cedar/VLanUnix.o: Cedar/VLanUnix.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/VLanUnix.c -o object/Cedar/VLanUnix.o + +object/Cedar/VLanWin32.o: Cedar/VLanWin32.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/VLanWin32.c -o object/Cedar/VLanWin32.o + +object/Cedar/WaterMark.o: Cedar/WaterMark.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/WaterMark.c -o object/Cedar/WaterMark.o + +object/Cedar/WebUI.o: Cedar/WebUI.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/WebUI.c -o object/Cedar/WebUI.o + +object/Cedar/WinUi.o: Cedar/WinUi.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/WinUi.c -o object/Cedar/WinUi.o + +object/Cedar/Wpc.o: Cedar/Wpc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Cedar/Wpc.c -o object/Cedar/Wpc.o + +# Ham +bin/ham: code/Ham.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) code/Ham.a $(OPTIONS_LINK) -o bin/ham + +code/Ham.a: object/Ham.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + rm -f code/Ham.a + ar r code/Ham.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/Ham.o + ranlib code/Ham.a + +object/Ham.o: Ham/Ham.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c Ham/Ham.c -o object/Ham.o + +# vpnserver +bin/vpnserver: code/vpnserver.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) code/vpnserver.a $(OPTIONS_LINK) -o bin/vpnserver + +code/vpnserver.a: object/vpnserver.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + rm -f code/vpnserver.a + ar r code/vpnserver.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnserver.o + ranlib code/vpnserver.a + +object/vpnserver.o: vpnserver/vpnserver.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c vpnserver/vpnserver.c -o object/vpnserver.o + +# vpnbridge +bin/vpnbridge: code/vpnbridge.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) code/vpnbridge.a $(OPTIONS_LINK) -o bin/vpnbridge + +code/vpnbridge.a: object/vpnbridge.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + rm -f code/vpnbridge.a + ar r code/vpnbridge.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnbridge.o + ranlib code/vpnbridge.a + +object/vpnbridge.o: vpnbridge/vpnbridge.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c vpnbridge/vpnbridge.c -o object/vpnbridge.o + +# vpnclient +bin/vpnclient: code/vpnclient.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) code/vpnclient.a $(OPTIONS_LINK) -o bin/vpnclient + +code/vpnclient.a: object/vpnclient.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + rm -f code/vpnclient.a + ar r code/vpnclient.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpnclient.o + ranlib code/vpnclient.a + +object/vpnclient.o: vpnclient/vpncsvc.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c vpnclient/vpncsvc.c -o object/vpnclient.o + +# vpncmd +bin/vpncmd: code/vpncmd.a $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) code/vpncmd.a $(OPTIONS_LINK) -o bin/vpncmd + +code/vpncmd.a: object/vpncmd.o $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + rm -f code/vpncmd.a + ar r code/vpncmd.a $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) object/vpncmd.o + ranlib code/vpncmd.a + +object/vpncmd.o: vpncmd/vpncmd.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA) $(OBJECTS_CEDAR) + $(CC) $(OPTIONS_COMPILE) -c vpncmd/vpncmd.c -o object/vpncmd.o + +# Clean +clean: + -rm -f $(OBJECTS_MAYAQUA) + -rm -f $(OBJECTS_CEDAR) + -rm -f object/Ham.o + -rm -f code/Ham.a + -rm -f bin/ham + -rm -f object/vpnserver.o + -rm -f code/vpnserver.a + -rm -f bin/vpnserver + -rm -f object/vpnbridge.o + -rm -f code/vpnbridge.a + -rm -f bin/vpnbridge + -rm -f object/vpnclient.o + -rm -f code/vpnclient.a + -rm -f bin/vpnclient + -rm -f object/vpncmd.o + -rm -f code/vpncmd.a + -rm -f bin/vpncmd + +# Help Strings +help: + @echo "make [DEBUG=YES]" + diff --git a/src/Mayaqua/Network.c b/src/Mayaqua/Network.c index bf3231fb..26dfd11e 100644 --- a/src/Mayaqua/Network.c +++ b/src/Mayaqua/Network.c @@ -229,6 +229,8 @@ static LOCK *host_ip_address_list_cache_lock = NULL; static UINT64 host_ip_address_list_cache_last = 0; static LIST *host_ip_address_cache = NULL; static bool disable_gethostname_by_accept = false; +static COUNTER *getip_thread_counter = NULL; +static UINT max_getip_thread = 0; static char *cipher_list = "RC4-MD5 RC4-SHA AES128-SHA AES256-SHA DES-CBC-SHA DES-CBC3-SHA DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA"; @@ -2005,6 +2007,17 @@ bool RUDPIsIpInValidateList(RUDP_STACK *r, IP *ip) return false; } + // Always allow private IP addresses + if (IsIPPrivate(ip)) + { + return true; + } + + if (IsIPAddressInSameLocalNetwork(ip)) + { + return true; + } + for (i = 0;i < LIST_NUM(r->NatT_SourceIpList);i++) { RUDP_SOURCE_IP *s = (RUDP_SOURCE_IP *)LIST_DATA(r->NatT_SourceIpList, i); @@ -4350,6 +4363,7 @@ void RUDPIpQueryThread(THREAD *thread, void *param) void *route_change_poller = NULL; char current_hostname[MAX_SIZE]; bool last_time_ip_changed = false; + UINT num_retry = 0; // Validate arguments if (thread == NULL || param == NULL) { @@ -4429,7 +4443,9 @@ void RUDPIpQueryThread(THREAD *thread, void *param) if (IsZeroIp(&r->NatT_IP)) { - next_getip_tick = now + (UINT64)UDP_NAT_T_GET_IP_INTERVAL; + num_retry++; + + next_getip_tick = now + MIN((UINT64)UDP_NAT_T_GET_IP_INTERVAL * (UINT64)num_retry, (UINT64)UDP_NAT_T_GET_IP_INTERVAL_MAX); } else { @@ -6730,6 +6746,46 @@ bool IsInSameNetwork4(IP *a1, IP *a2, IP *subnet) return false; } +bool IsInSameNetwork4Standard(IP *a1, IP *a2) +{ + IP subnet; + + SetIP(&subnet, 255, 255, 0, 0); + + return IsInSameNetwork4(a1, a2, &subnet); +} +bool IsInSameLocalNetworkToMe4(IP *a) +{ + IP g1, g2; + + Zero(&g1, sizeof(g1)); + Zero(&g2, sizeof(g2)); + + GetCurrentGlobalIPGuess(&g1, false); + + if (IsZeroIp(&g1) == false) + { + if (IsInSameNetwork4Standard(&g1, a)) + { + return true; + } + } + + if (GetCurrentGlobalIP(&g2, false)) + { + if (IsInSameNetwork4Standard(&g2, a)) + { + return true; + } + } + + if (IsIPAddressInSameLocalNetwork(a)) + { + return true; + } + + return false; +} // Check whether it is a network address prefix bool IsNetworkAddress6(IP *ip, IP *subnet) @@ -10926,6 +10982,20 @@ void InitHostCache() HostCacheList = NewList(CompareHostCache); } +// Get the number of wait threads +UINT GetNumWaitThread() +{ + UINT ret = 0; + + LockList(WaitThreadList); + { + ret = LIST_NUM(WaitThreadList); + } + UnlockList(WaitThreadList); + + return ret; +} + // Add the thread to the thread waiting list void AddWaitThread(THREAD *t) { @@ -16631,6 +16701,8 @@ void GetIP4Ex6ExThread(THREAD *t, void *param) ReleaseGetIPThreadParam(p); DelWaitThread(t); + + Dec(getip_thread_counter); } // Perform a forward DNS query (with timeout) @@ -16645,9 +16717,13 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can bool ret = false; UINT64 start_tick = 0; UINT64 end_tick = 0; + UINT64 spent_time = 0; + UINT64 now; + UINT n; bool use_dns_proxy = false; char hostname[260]; UINT i; + bool timed_out; // Validate arguments if (ip == NULL || hostname_arg == NULL) { @@ -16718,6 +16794,89 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can } + // check the quota + start_tick = Tick64(); + end_tick = start_tick + (UINT64)timeout; + + n = 0; + + timed_out = false; + + while (true) + { + UINT64 now = Tick64(); + UINT64 remain; + UINT remain32; + + if (GetGetIpThreadMaxNum() > GetCurrentGetIpThreadNum()) + { + // below the quota + break; + } + + if (now >= end_tick) + { + // timeouted + timed_out = true; + break; + } + + if (cancel != NULL && (*cancel)) + { + // cancelled + timed_out = true; + break; + } + + remain = end_tick - now; + remain32 = MIN((UINT)remain, 100); + + SleepThread(remain32); + n++; + } + + now = Tick64(); + spent_time = now - start_tick; + + if (n == 0) + { + spent_time = 0; + } + + if ((UINT)spent_time >= timeout) + { + timed_out = true; + } + + if (timed_out) + { + IP ip2; + + // timed out, cancelled + if (QueryDnsCache(&ip2, hostname)) + { + ret = true; + + Copy(ip, &ip2, sizeof(IP)); + } + + Debug("GetIP4Ex6Ex2: Worker thread quota exceeded: max=%u current=%u\n", + GetGetIpThreadMaxNum(), GetCurrentGetIpThreadNum()); + + return ret; + } + + // Increment the counter + Inc(getip_thread_counter); + + if (spent_time != 0) + { + Debug("GetIP4Ex6Ex2: Waited for %u msecs to create a worker thread.\n", + spent_time); + } + + timeout -= (UINT)spent_time; + p = ZeroMalloc(sizeof(GETIP_THREAD_PARAM)); p->Ref = NewRef(); StrCpy(p->HostName, sizeof(p->HostName), hostname); @@ -16774,6 +16933,7 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can { IP ip2; +#if 0 if (only_direct_dns == false) { if (ipv6) @@ -16802,6 +16962,7 @@ bool GetIP4Ex6Ex2(IP *ip, char *hostname_arg, UINT timeout, bool ipv6, bool *can } } } +#endif if (QueryDnsCache(&ip2, hostname)) { @@ -17457,6 +17618,27 @@ void FreeSSLCtx(struct ssl_ctx_st *ctx) SSL_CTX_free(ctx); } +// The number of get ip threads +void SetGetIpThreadMaxNum(UINT num) +{ + max_getip_thread = num; +} +UINT GetGetIpThreadMaxNum() +{ + UINT ret = max_getip_thread; + + if (ret == 0) + { + ret = 0x7FFFFFFF; + } + + return ret; +} +UINT GetCurrentGetIpThreadNum() +{ + return Count(getip_thread_counter); +} + // Initialize the network communication module void InitNetwork() { @@ -17471,6 +17653,8 @@ void InitNetwork() num_tcp_connections = NewCounter(); + getip_thread_counter = NewCounter(); + // Initialization of client list InitIpClientList(); @@ -17515,6 +17699,8 @@ void InitNetwork() dh_1024 = DhNewGroup2(); Zero(rand_port_numbers, sizeof(rand_port_numbers)); + + SetGetIpThreadMaxNum(DEFAULT_GETIP_THREAD_MAX_NUM); } // Enable the network name cache @@ -17770,6 +17956,45 @@ void FreePrivateIPFile() g_use_privateip_file = false; } +// Check whether the specified IP address is in the same network to this computer +bool IsIPAddressInSameLocalNetwork(IP *a) +{ + bool ret = false; + LIST *o; + UINT i; + // Validate arguments + if (a == NULL) + { + return false; + } + + o = GetHostIPAddressList(); + + if (o != NULL) + { + for (i = 0;i < LIST_NUM(o);i++) + { + IP *p = LIST_DATA(o, i); + + if (IsIP4(p)) + { + if (IsZeroIp(p) == false && p->addr[0] != 127) + { + if (IsInSameNetwork4Standard(p, a)) + { + ret = true; + break; + } + } + } + } + + FreeHostIPAddressList(o); + } + + return ret; +} + // Guess the IPv4, IPv6 global address from the IP address list of the current interface void GetCurrentGlobalIPGuess(IP *ip, bool ipv6) { @@ -17950,6 +18175,9 @@ void FreeNetwork() FreeDynList(); + DeleteCounter(getip_thread_counter); + getip_thread_counter = NULL; + } // Add a socket to socket list @@ -19114,6 +19342,46 @@ int CmpIpAddressList(void *p1, void *p2) return r; } +// Get the IP address list hash of the host +UINT64 GetHostIPAddressListHash() +{ + UINT i; + LIST *o; + BUF *buf = NewBuf(); + UCHAR hash[SHA1_SIZE]; + UINT64 ret = 0; + + o = GetHostIPAddressList(); + + if (o != NULL) + { + for (i = 0;i < LIST_NUM(o);i++) + { + IP *ip = LIST_DATA(o, i); + char tmp[128]; + + Zero(tmp, sizeof(tmp)); + IPToStr(tmp, sizeof(tmp), ip); + + WriteBufStr(buf, tmp); + } + + FreeHostIPAddressList(o); + } + + WriteBufStr(buf, "test"); + + HashSha1(hash, buf->Buf, buf->Size); + + FreeBuf(buf); + + Copy(&ret, hash, sizeof(UINT64)); + + ret = Endian64(ret); + + return ret; +} + // Get the IP address list of the host (using cache) LIST *GetHostIPAddressList() { diff --git a/src/Mayaqua/Network.h b/src/Mayaqua/Network.h index 60064852..e33c64ce 100644 --- a/src/Mayaqua/Network.h +++ b/src/Mayaqua/Network.h @@ -147,6 +147,13 @@ struct DYN_VALUE #define MAX_NUM_IGNORE_ERRORS 1024 +#ifndef USE_STRATEGY_LOW_MEMORY +#define DEFAULT_GETIP_THREAD_MAX_NUM 512 +#else // USE_STRATEGY_LOW_MEMORY +#define DEFAULT_GETIP_THREAD_MAX_NUM 64 +#endif // USE_STRATEGY_LOW_MEMORY + + // SSL logging function //#define ENABLE_SSL_LOGGING #define SSL_LOGGING_DIRNAME "@ssl_log" @@ -748,6 +755,7 @@ struct RUDP_SESSION // Related to processing to get the IP address of the NAT-T server #define UDP_NAT_T_GET_IP_INTERVAL DYN32(UDP_NAT_T_GET_IP_INTERVAL, (5 * 1000)) // IP address acquisition interval of NAT-T server (before success) +#define UDP_NAT_T_GET_IP_INTERVAL_MAX DYN32(UDP_NAT_T_GET_IP_INTERVAL, (150 * 1000)) // IP address acquisition interval of NAT-T server (before success) #define UDP_NAT_T_GET_IP_INTERVAL_AFTER DYN32(UDP_NAT_T_GET_IP_INTERVAL_AFTER, (5 * 60 * 1000)) // IP address acquisition interval of NAT-T server (after success) // Related to process to get the private IP address of itself with making a TCP connection to the NAT-T server @@ -1418,6 +1426,7 @@ void RouteToStr(char *str, UINT str_size, ROUTE_ENTRY *e); void DebugPrintRoute(ROUTE_ENTRY *e); void DebugPrintRouteTable(ROUTE_TABLE *r); bool IsIPv6LocalNetworkAddress(IP *ip); +UINT GetNumWaitThread(); #ifdef ENABLE_SSL_LOGGING void SockEnableSslLogging(SOCK *s); @@ -1484,6 +1493,8 @@ void IPNot4(IP *dst, IP *a); void IPOr4(IP *dst, IP *a, IP *b); void IPAnd4(IP *dst, IP *a, IP *b); bool IsInSameNetwork4(IP *a1, IP *a2, IP *subnet); +bool IsInSameNetwork4Standard(IP *a1, IP *a2); +bool IsInSameLocalNetworkToMe4(IP *a); bool ParseIpAndSubnetMask4(char *src, UINT *ip, UINT *mask); bool ParseIpAndSubnetMask6(char *src, IP *ip, IP *mask); @@ -1539,6 +1550,7 @@ bool IsMyIPAddress(IP *ip); void FreeHostIPAddressList(LIST *o); void AddHostIPAddressToList(LIST *o, IP *ip); int CmpIpAddressList(void *p1, void *p2); +UINT64 GetHostIPAddressListHash(); UDPLISTENER *NewUdpListener(UDPLISTENER_RECV_PROC *recv_proc, void *param); void UdpListenerThread(THREAD *thread, void *param); @@ -1599,6 +1611,7 @@ bool SslBioSync(SSL_BIO *b, bool sync_send, bool sync_recv); void SetCurrentGlobalIP(IP *ip, bool ipv6); bool GetCurrentGlobalIP(IP *ip, bool ipv6); void GetCurrentGlobalIPGuess(IP *ip, bool ipv6); +bool IsIPAddressInSameLocalNetwork(IP *a); bool IsIPPrivate(IP *ip); bool IsIPMyHost(IP *ip); @@ -1631,6 +1644,11 @@ QUERYIPTHREAD *NewQueryIpThread(char *hostname, UINT interval_last_ok, UINT inte bool GetQueryIpThreadResult(QUERYIPTHREAD *t, IP *ip); void FreeQueryIpThread(QUERYIPTHREAD *t); +void SetGetIpThreadMaxNum(UINT num); +UINT GetGetIpThreadMaxNum(); +UINT GetCurrentGetIpThreadNum(); + + bool IsIpInStrList(IP *ip, char *ip_list); bool IsInStrByStrList(char *str, char *str_list); diff --git a/src/Mayaqua/TcpIp.c b/src/Mayaqua/TcpIp.c index 83e3e226..b299accc 100644 --- a/src/Mayaqua/TcpIp.c +++ b/src/Mayaqua/TcpIp.c @@ -3304,11 +3304,44 @@ BUF *BuildDhcpOptionsBuf(LIST *o) for (i = 0;i < LIST_NUM(o);i++) { DHCP_OPTION *d = LIST_DATA(o, i); + UINT current_size = d->Size; + UINT current_pos = 0; + id = (UCHAR)d->Id; - sz = (UCHAR)d->Size; + if (d->Size <= 255) + { + sz = (UCHAR)d->Size; + } + else + { + sz = 0xFF; + } WriteBuf(b, &id, 1); WriteBuf(b, &sz, 1); - WriteBuf(b, d->Data, d->Size); + WriteBuf(b, d->Data, sz); + + current_size -= sz; + current_pos += sz; + + while (current_size != 0) + { + id = DHCP_ID_PRIVATE; + if (current_size <= 255) + { + sz = (UCHAR)current_size; + } + else + { + sz = 0xFF; + } + WriteBuf(b, &id, 1); + WriteBuf(b, &sz, 1); + WriteBuf(b, ((UCHAR *)d->Data) + current_pos, sz); + + current_size -= sz; + current_pos += sz; + } + } id = 0xff; @@ -3755,27 +3788,24 @@ BUF *DhcpBuildClasslessRouteData(DHCP_CLASSLESS_ROUTE_TABLE *t) if (r->Exists && r->SubnetMaskLen <= 32) { - if (b->Size <= (255 - 9)) - { - UCHAR c; - UINT data_len; - UINT ip32; - UCHAR tmp[4]; + UCHAR c; + UINT data_len; + UINT ip32; + UCHAR tmp[4]; - // Width of subnet mask - c = (UCHAR)r->SubnetMaskLen; - WriteBuf(b, &c, 1); + // Width of subnet mask + c = (UCHAR)r->SubnetMaskLen; + WriteBuf(b, &c, 1); - // Number of significant octets - data_len = (r->SubnetMaskLen + 7) / 8; - Zero(tmp, sizeof(tmp)); - Copy(tmp, &r->Network, data_len); - WriteBuf(b, tmp, data_len); + // Number of significant octets + data_len = (r->SubnetMaskLen + 7) / 8; + Zero(tmp, sizeof(tmp)); + Copy(tmp, &r->Network, data_len); + WriteBuf(b, tmp, data_len); - // Gateway - ip32 = IPToUINT(&r->Gateway); - WriteBuf(b, &ip32, sizeof(UINT)); - } + // Gateway + ip32 = IPToUINT(&r->Gateway); + WriteBuf(b, &ip32, sizeof(UINT)); } } @@ -3965,6 +3995,7 @@ LIST *ParseDhcpOptions(void *data, UINT size) { BUF *b; LIST *o; + DHCP_OPTION *last_opt; // Validate arguments if (data == NULL) { @@ -3977,6 +4008,8 @@ LIST *ParseDhcpOptions(void *data, UINT size) o = NewListFast(NULL); + last_opt = NULL; + while (true) { UCHAR c = 0; @@ -3995,12 +4028,27 @@ LIST *ParseDhcpOptions(void *data, UINT size) break; } - opt = ZeroMalloc(sizeof(DHCP_OPTION)); - opt->Id = (UINT)c; - opt->Size = (UINT)sz; - opt->Data = ZeroMalloc((UINT)sz); - ReadBuf(b, opt->Data, sz); - Add(o, opt); + if (c == DHCP_ID_PRIVATE && last_opt != NULL) + { + UINT new_size = last_opt->Size + (UINT)sz; + UCHAR *new_buf = ZeroMalloc(new_size); + Copy(new_buf, last_opt->Data, last_opt->Size); + ReadBuf(b, new_buf + last_opt->Size, sz); + Free(last_opt->Data); + last_opt->Data = new_buf; + last_opt->Size = new_size; + } + else + { + opt = ZeroMalloc(sizeof(DHCP_OPTION)); + opt->Id = (UINT)c; + opt->Size = (UINT)sz; + opt->Data = ZeroMalloc((UINT)sz); + ReadBuf(b, opt->Data, sz); + Add(o, opt); + + last_opt = opt; + } } FreeBuf(b); diff --git a/src/Mayaqua/TcpIp.h b/src/Mayaqua/TcpIp.h index 8cf13c98..2353b37a 100644 --- a/src/Mayaqua/TcpIp.h +++ b/src/Mayaqua/TcpIp.h @@ -625,6 +625,7 @@ struct ICMPV6_HEADER_INFO #define DHCP_ID_REQ_PARAM_LIST 0x37 #define DHCP_ID_CLASSLESS_ROUTE 0x79 #define DHCP_ID_MS_CLASSLESS_ROUTE 0xF9 +#define DHCP_ID_PRIVATE 0xFA // DHCP client action diff --git a/src/bin/hamcore/SeLow_x64.sys b/src/bin/hamcore/SeLow_x64.sys index d70a95fd024162321a9dfacc40fbe898349bbd58..5cb5d02b91dc9878ffcd2aeef05b9d880815388b 100644 GIT binary patch delta 766 zcmaE`n(4u6rVSNL%z583Cs#B1GF__Ne2S^d62#veZu62^fLBw@K~cxsZQ`_U`}oaE z@-_!JIGFJAFt9LasWLEt>CJOX!Wo5)7<3pE7!1IqC4(u0A%n?g_Od``tP*l{zwc;Y@bEJ8miaww5WM8kfx}$aX>5{Cv$$gU? z>sM}mI5FawcGc}Nzpz)Ajt+@BM zq^9GV4DCsmGFHFzy|PO)=yQ~`l=(VIMW&!D+kT(g zuN~)mqm?J-cG4m(jh=ERNi9=9Ur`H#?q9D|q~q(o{3fu?+<0luPqqpBCwX!66eP#> z9%8_?OMtFufzv|Ty( z?MVKqekF9*eOKv}iidrV-HeluSsCt3>YU)zD)&99tM4PrEp|1g%$IRr=1g87?)2a9 z^@*0M{`|SBi<#Elo_v1t*?L1mb3j17$W&tu~Lg@4SqhEQVq%B3sI%x3ltV z$W1)e^!g+tSA@$)eQpC@xFSYIRtA$ClDGCE?4DPKbSXjQ#2PyUn3pTA}uApqiqi*`ku;;q|@|NBL(w*DUhxStWXv zLo7R5W5?!Qix1rWv#*^|=9#ok%A6@S&Z|?@r&x=~d|24~=U<7I?KJa%^E>x$(|&Dp zJtDlqGU3SVubWdC?y7YE=S}|NbUiQHd(Fuv!OUw*-cM{i_V?Y_13Am=E=0ay{>11g zJN4czpC*&nR~>H!fM?|ugJ}5(p rmX`3c>`l!)+c!l;<4R(lb5M9v_o_DyS=J7GlhRBQjW>5cWncgRIlx54 delta 766 zcmaE`n(4u6rVSNL%-&PoCs#B1GVSize2S^d62#veZu62^Kyr?eO<0wI|CA!@2@3jL zmp2DEIGFHqGq5lysWLEt>CJOX!Wo4P8FUyF7!1IqC4(uDWwx2UERY$iM0RBzqsXTF zj!kRQihl00pZo9&@8lVIwW=33|E;PO7l|{}F~5IRw|2dAYC+A~yPxG1lR78&O>(Rk z@o4^3H`9L36RrDSdX(g4M1T5d_w2}@((q7>@ob!#iPz5P$ji%D_oy{|Um#v<%iw%o zXV+n6D?6E4N%I8-9=|nm=d$1Wd|4D%kw@!a>!~Luyt3C^p(o5^_AdPK#9RLA1ww0c z|CntqsIqF1E*DMpntIsB^4`}|dR|ZC?%$eqr~aDotMy-I37oFGKB?D1p_Z*yudt=| zl4c64q0`}`yY4v`T#hU|bh|N1uic>Tz$VpI^?Vbvb`+eg{vmw(Mt5zzUszA()5L-& zNf#cMImg_%e{$2Ed&eW%=0~o)W@Y&${fmBvVkXD0)0z`b&$i)lnVPZS!QCryCcfR4 z%YGc<&Lrox4MF5c@6sBI2nfi z72c+_<8{WWE!%GCaJ<{*xxn@Qb!$s;yU>7b)2f5tIx^+=)>kvH^^m!DYI%3@r@eOF zT_STEOWM8X?JVb?HakrwWW)OWdh4#c@Aajgy7KfoTHnprC`$bKdw%uGnwfqpB#U|j zKE65mThQ$A$J!l|``0i@cifG9Abd5~Dlp68&X39V#XFxyv!$Q@8FFCB!LOgam0miE zEc$$Psq|OJ7Vo9@M{P3Qj%+c`)o+i#Q-4`!^_4t}Q@7v!_7ZT8@~HJpQWTJ{Nfl)3 p_EeXX+P=ts?{q~WhaLA?z6tjQ8th!YTIGD5dhEQ@*4`f&7y!C2ORfL_ diff --git a/src/bin/hamcore/SeLow_x86.sys b/src/bin/hamcore/SeLow_x86.sys index 2ec2c5be634f58e2d49aa14d14d6f8df873261cf..1c4d0694a34167e044e2e3caa67472fb76641c5c 100644 GIT binary patch delta 767 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 zΠ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 literal 43113 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 KW%1dX2LA_|d1CJX diff --git a/src/bin/hamcore/inf/x86/INF_VPN.inf b/src/bin/hamcore/inf/x86/INF_VPN.inf index 236fff2f..a3df7ad3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN10.inf b/src/bin/hamcore/inf/x86/INF_VPN10.inf index 597a25af..5f262d20 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN10.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN10.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN10.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN100.inf b/src/bin/hamcore/inf/x86/INF_VPN100.inf index 69ec75b4..f2fcdf7d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN100.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN100.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN100.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN101.inf b/src/bin/hamcore/inf/x86/INF_VPN101.inf index cc4f4e46..7fca9e1e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN101.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN101.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN101.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN102.inf b/src/bin/hamcore/inf/x86/INF_VPN102.inf index 40ee238a..debe4245 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN102.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN102.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN102.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN103.inf b/src/bin/hamcore/inf/x86/INF_VPN103.inf index c9976019..72d2d41e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN103.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN103.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN103.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN104.inf b/src/bin/hamcore/inf/x86/INF_VPN104.inf index acbeb4c8..389f40e3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN104.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN104.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN104.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN105.inf b/src/bin/hamcore/inf/x86/INF_VPN105.inf index 46920a31..ab2aba5e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN105.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN105.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN105.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN106.inf b/src/bin/hamcore/inf/x86/INF_VPN106.inf index 6b7874d2..542b63ac 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN106.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN106.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN106.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN107.inf b/src/bin/hamcore/inf/x86/INF_VPN107.inf index 95118188..d150218a 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN107.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN107.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN107.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN108.inf b/src/bin/hamcore/inf/x86/INF_VPN108.inf index 66df7b76..806ec019 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN108.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN108.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN108.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN109.inf b/src/bin/hamcore/inf/x86/INF_VPN109.inf index 6131c058..83083cf1 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN109.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN109.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN109.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN11.inf b/src/bin/hamcore/inf/x86/INF_VPN11.inf index 6710b1a9..67bffe2c 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN11.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN11.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN11.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN110.inf b/src/bin/hamcore/inf/x86/INF_VPN110.inf index 8fa5c1ac..530ef457 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN110.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN110.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN110.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN111.inf b/src/bin/hamcore/inf/x86/INF_VPN111.inf index 501da841..6553389d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN111.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN111.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN111.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN112.inf b/src/bin/hamcore/inf/x86/INF_VPN112.inf index 96c18780..2091407a 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN112.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN112.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN112.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN113.inf b/src/bin/hamcore/inf/x86/INF_VPN113.inf index 97978de0..ccb2fe31 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN113.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN113.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN113.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN114.inf b/src/bin/hamcore/inf/x86/INF_VPN114.inf index 54fee0d7..247674ef 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN114.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN114.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN114.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN115.inf b/src/bin/hamcore/inf/x86/INF_VPN115.inf index ac9fbb6b..599cc42d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN115.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN115.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN115.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN116.inf b/src/bin/hamcore/inf/x86/INF_VPN116.inf index 99e38bb7..ee80a098 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN116.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN116.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN116.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN117.inf b/src/bin/hamcore/inf/x86/INF_VPN117.inf index 63f5a2ab..e96f8e4f 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN117.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN117.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN117.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN118.inf b/src/bin/hamcore/inf/x86/INF_VPN118.inf index 35b87483..d6f53891 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN118.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN118.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN118.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN119.inf b/src/bin/hamcore/inf/x86/INF_VPN119.inf index 8be8f21f..9c720423 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN119.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN119.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN119.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN12.inf b/src/bin/hamcore/inf/x86/INF_VPN12.inf index caf5950f..e401e44c 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN12.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN12.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN12.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN120.inf b/src/bin/hamcore/inf/x86/INF_VPN120.inf index 42005a2a..d8f76ec0 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN120.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN120.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN120.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN121.inf b/src/bin/hamcore/inf/x86/INF_VPN121.inf index 348d6871..7f92537e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN121.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN121.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN121.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN122.inf b/src/bin/hamcore/inf/x86/INF_VPN122.inf index 4554972e..d2ee30e8 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN122.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN122.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN122.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN123.inf b/src/bin/hamcore/inf/x86/INF_VPN123.inf index cbb5a895..5188d3ec 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN123.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN123.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN123.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN124.inf b/src/bin/hamcore/inf/x86/INF_VPN124.inf index 7682869e..774d80a8 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN124.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN124.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN124.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN125.inf b/src/bin/hamcore/inf/x86/INF_VPN125.inf index 2d1789a6..027b69e1 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN125.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN125.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN125.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN126.inf b/src/bin/hamcore/inf/x86/INF_VPN126.inf index ed47bdb5..8c03d3b2 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN126.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN126.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN126.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN127.inf b/src/bin/hamcore/inf/x86/INF_VPN127.inf index 2d4f091f..18f0f481 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN127.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN127.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN127.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN13.inf b/src/bin/hamcore/inf/x86/INF_VPN13.inf index 1eaa6722..961eef05 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN13.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN13.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN13.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN14.inf b/src/bin/hamcore/inf/x86/INF_VPN14.inf index 25fc8725..b875f3d8 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN14.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN14.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN14.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN15.inf b/src/bin/hamcore/inf/x86/INF_VPN15.inf index 8067ded8..9e34bf52 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN15.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN15.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN15.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN16.inf b/src/bin/hamcore/inf/x86/INF_VPN16.inf index 41b9ef59..deccdca3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN16.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN16.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN16.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN17.inf b/src/bin/hamcore/inf/x86/INF_VPN17.inf index 5b33bc9e..a0e73d8f 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN17.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN17.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN17.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN18.inf b/src/bin/hamcore/inf/x86/INF_VPN18.inf index 2f0cd225..98334b4d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN18.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN18.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN18.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN19.inf b/src/bin/hamcore/inf/x86/INF_VPN19.inf index cf97b53e..dc7a302d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN19.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN19.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN19.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN2.inf b/src/bin/hamcore/inf/x86/INF_VPN2.inf index 885666c6..8e04c75e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN2.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN2.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN2.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN20.inf b/src/bin/hamcore/inf/x86/INF_VPN20.inf index fa02b25c..1bd88d7b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN20.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN20.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN20.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN21.inf b/src/bin/hamcore/inf/x86/INF_VPN21.inf index 4278cf08..527608ef 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN21.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN21.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN21.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN22.inf b/src/bin/hamcore/inf/x86/INF_VPN22.inf index dacc96c3..f542d744 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN22.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN22.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN22.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN23.inf b/src/bin/hamcore/inf/x86/INF_VPN23.inf index d51121ed..0a309687 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN23.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN23.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN23.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN24.inf b/src/bin/hamcore/inf/x86/INF_VPN24.inf index 59d73a97..a5946a91 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN24.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN24.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN24.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN25.inf b/src/bin/hamcore/inf/x86/INF_VPN25.inf index 60368e42..07b550e5 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN25.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN25.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN25.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN26.inf b/src/bin/hamcore/inf/x86/INF_VPN26.inf index 9683a902..891edabd 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN26.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN26.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN26.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN27.inf b/src/bin/hamcore/inf/x86/INF_VPN27.inf index 59f0e2e9..1cd35206 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN27.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN27.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN27.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN28.inf b/src/bin/hamcore/inf/x86/INF_VPN28.inf index 6e5830b1..61287314 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN28.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN28.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN28.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN29.inf b/src/bin/hamcore/inf/x86/INF_VPN29.inf index fdb4ace6..e0c58d16 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN29.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN29.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN29.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN3.inf b/src/bin/hamcore/inf/x86/INF_VPN3.inf index ae922879..69d2fb68 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN3.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN3.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN3.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN30.inf b/src/bin/hamcore/inf/x86/INF_VPN30.inf index fa1909de..6da2fd81 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN30.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN30.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN30.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN31.inf b/src/bin/hamcore/inf/x86/INF_VPN31.inf index c0eee3cb..f5664c1c 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN31.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN31.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN31.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN32.inf b/src/bin/hamcore/inf/x86/INF_VPN32.inf index 5d6565dc..3a97fa57 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN32.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN32.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN32.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN33.inf b/src/bin/hamcore/inf/x86/INF_VPN33.inf index 3d5c98d0..5be55e09 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN33.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN33.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN33.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN34.inf b/src/bin/hamcore/inf/x86/INF_VPN34.inf index ee9e81f4..2d43175b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN34.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN34.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN34.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN35.inf b/src/bin/hamcore/inf/x86/INF_VPN35.inf index 6db3d102..1f619949 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN35.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN35.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN35.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN36.inf b/src/bin/hamcore/inf/x86/INF_VPN36.inf index a2ee621b..25a2e17f 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN36.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN36.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN36.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN37.inf b/src/bin/hamcore/inf/x86/INF_VPN37.inf index ff98696b..3c2cdad8 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN37.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN37.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN37.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN38.inf b/src/bin/hamcore/inf/x86/INF_VPN38.inf index ff3e27cd..f9c60965 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN38.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN38.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN38.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN39.inf b/src/bin/hamcore/inf/x86/INF_VPN39.inf index a84a527f..ea476151 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN39.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN39.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN39.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN4.inf b/src/bin/hamcore/inf/x86/INF_VPN4.inf index 5d67f8c7..5080a027 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN4.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN4.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN4.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN40.inf b/src/bin/hamcore/inf/x86/INF_VPN40.inf index ae463515..edf004e3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN40.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN40.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN40.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN41.inf b/src/bin/hamcore/inf/x86/INF_VPN41.inf index 18be62b6..a3634104 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN41.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN41.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN41.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN42.inf b/src/bin/hamcore/inf/x86/INF_VPN42.inf index be47cd4e..c8701bfe 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN42.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN42.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN42.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN43.inf b/src/bin/hamcore/inf/x86/INF_VPN43.inf index 22226612..741f7a4d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN43.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN43.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN43.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN44.inf b/src/bin/hamcore/inf/x86/INF_VPN44.inf index 58183e15..8c5af969 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN44.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN44.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN44.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN45.inf b/src/bin/hamcore/inf/x86/INF_VPN45.inf index e2d7b06f..37ce58aa 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN45.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN45.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN45.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN46.inf b/src/bin/hamcore/inf/x86/INF_VPN46.inf index b10943bc..9851f86e 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN46.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN46.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN46.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN47.inf b/src/bin/hamcore/inf/x86/INF_VPN47.inf index 2a38f6f1..bb03c533 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN47.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN47.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN47.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN48.inf b/src/bin/hamcore/inf/x86/INF_VPN48.inf index 0c4e3d75..420654d0 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN48.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN48.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN48.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN49.inf b/src/bin/hamcore/inf/x86/INF_VPN49.inf index e11ff568..99fe895d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN49.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN49.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN49.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN5.inf b/src/bin/hamcore/inf/x86/INF_VPN5.inf index b44738f2..7a760ee1 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN5.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN5.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN5.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN50.inf b/src/bin/hamcore/inf/x86/INF_VPN50.inf index 3db9056a..513bc615 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN50.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN50.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN50.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN51.inf b/src/bin/hamcore/inf/x86/INF_VPN51.inf index cf8f3e8f..2a7a20a6 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN51.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN51.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN51.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN52.inf b/src/bin/hamcore/inf/x86/INF_VPN52.inf index 7a9681ec..1279471a 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN52.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN52.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN52.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN53.inf b/src/bin/hamcore/inf/x86/INF_VPN53.inf index 8cb91454..f2d370ef 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN53.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN53.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN53.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN54.inf b/src/bin/hamcore/inf/x86/INF_VPN54.inf index 1c484108..cdf0b17b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN54.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN54.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN54.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN55.inf b/src/bin/hamcore/inf/x86/INF_VPN55.inf index 2c8e4b9d..dce775f3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN55.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN55.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN55.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN56.inf b/src/bin/hamcore/inf/x86/INF_VPN56.inf index 5c0fcb67..ee5acf66 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN56.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN56.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN56.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN57.inf b/src/bin/hamcore/inf/x86/INF_VPN57.inf index 0775f8d2..2b62eaea 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN57.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN57.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN57.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN58.inf b/src/bin/hamcore/inf/x86/INF_VPN58.inf index b8ac7c3e..4831fdca 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN58.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN58.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN58.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN59.inf b/src/bin/hamcore/inf/x86/INF_VPN59.inf index bb7e56f4..77ad17ad 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN59.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN59.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN59.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN6.inf b/src/bin/hamcore/inf/x86/INF_VPN6.inf index fb812972..5bcf906c 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN6.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN6.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN6.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN60.inf b/src/bin/hamcore/inf/x86/INF_VPN60.inf index a0fe91cc..f334aa2a 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN60.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN60.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN60.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN61.inf b/src/bin/hamcore/inf/x86/INF_VPN61.inf index 33240fb2..42a2f539 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN61.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN61.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN61.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN62.inf b/src/bin/hamcore/inf/x86/INF_VPN62.inf index e6ebcb84..ae5e05b8 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN62.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN62.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN62.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN63.inf b/src/bin/hamcore/inf/x86/INF_VPN63.inf index a4fa78d2..2a611e4d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN63.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN63.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN63.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN64.inf b/src/bin/hamcore/inf/x86/INF_VPN64.inf index d208936c..058d5e68 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN64.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN64.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN64.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN65.inf b/src/bin/hamcore/inf/x86/INF_VPN65.inf index 5e7516e8..4f0d42a4 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN65.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN65.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN65.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN66.inf b/src/bin/hamcore/inf/x86/INF_VPN66.inf index 0395b23d..6223b2d3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN66.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN66.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN66.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN67.inf b/src/bin/hamcore/inf/x86/INF_VPN67.inf index d574476f..a9f166b3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN67.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN67.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN67.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN68.inf b/src/bin/hamcore/inf/x86/INF_VPN68.inf index 5f44addb..4347644d 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN68.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN68.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN68.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN69.inf b/src/bin/hamcore/inf/x86/INF_VPN69.inf index 38a469bd..784d2192 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN69.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN69.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN69.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN7.inf b/src/bin/hamcore/inf/x86/INF_VPN7.inf index 423e69cf..4ea50105 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN7.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN7.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN7.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN70.inf b/src/bin/hamcore/inf/x86/INF_VPN70.inf index dfba9a13..ef8b1751 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN70.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN70.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN70.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN71.inf b/src/bin/hamcore/inf/x86/INF_VPN71.inf index b56c0e73..8e14ed67 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN71.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN71.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN71.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN72.inf b/src/bin/hamcore/inf/x86/INF_VPN72.inf index 41df828a..ee839362 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN72.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN72.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN72.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN73.inf b/src/bin/hamcore/inf/x86/INF_VPN73.inf index 30acb4d4..558596f4 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN73.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN73.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN73.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN74.inf b/src/bin/hamcore/inf/x86/INF_VPN74.inf index c69948da..7ef8df3b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN74.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN74.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN74.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN75.inf b/src/bin/hamcore/inf/x86/INF_VPN75.inf index c50ee132..c925f8b4 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN75.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN75.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN75.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN76.inf b/src/bin/hamcore/inf/x86/INF_VPN76.inf index 16aebcf1..0272ba5f 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN76.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN76.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN76.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN77.inf b/src/bin/hamcore/inf/x86/INF_VPN77.inf index bbee72c6..3ed6592f 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN77.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN77.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN77.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN78.inf b/src/bin/hamcore/inf/x86/INF_VPN78.inf index ed501aee..5a7f1c7b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN78.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN78.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN78.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN79.inf b/src/bin/hamcore/inf/x86/INF_VPN79.inf index 0ec31f61..76745e30 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN79.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN79.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN79.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN8.inf b/src/bin/hamcore/inf/x86/INF_VPN8.inf index e35d7e57..ca142674 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN8.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN8.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN8.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN80.inf b/src/bin/hamcore/inf/x86/INF_VPN80.inf index 3cac19e6..5fe6c872 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN80.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN80.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN80.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN81.inf b/src/bin/hamcore/inf/x86/INF_VPN81.inf index 49b3a86e..c5a6b803 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN81.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN81.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN81.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN82.inf b/src/bin/hamcore/inf/x86/INF_VPN82.inf index f3f5550f..0f855f7a 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN82.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN82.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN82.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN83.inf b/src/bin/hamcore/inf/x86/INF_VPN83.inf index a1d6466a..3db31c1b 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN83.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN83.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN83.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN84.inf b/src/bin/hamcore/inf/x86/INF_VPN84.inf index 63118120..3f990fde 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN84.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN84.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN84.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN85.inf b/src/bin/hamcore/inf/x86/INF_VPN85.inf index 6a18b545..356e8899 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN85.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN85.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN85.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN86.inf b/src/bin/hamcore/inf/x86/INF_VPN86.inf index 1948aca5..6ac19ece 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN86.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN86.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN86.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN87.inf b/src/bin/hamcore/inf/x86/INF_VPN87.inf index 2fed433b..8f3aa208 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN87.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN87.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN87.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN88.inf b/src/bin/hamcore/inf/x86/INF_VPN88.inf index 178cf7f1..0da364a1 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN88.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN88.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN88.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN89.inf b/src/bin/hamcore/inf/x86/INF_VPN89.inf index 1d6f860f..70400794 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN89.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN89.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN89.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN9.inf b/src/bin/hamcore/inf/x86/INF_VPN9.inf index e961b1c8..df777336 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN9.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN9.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN9.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN90.inf b/src/bin/hamcore/inf/x86/INF_VPN90.inf index 86830b3d..3051eab5 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN90.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN90.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN90.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN91.inf b/src/bin/hamcore/inf/x86/INF_VPN91.inf index eaf958af..478716e3 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN91.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN91.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN91.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN92.inf b/src/bin/hamcore/inf/x86/INF_VPN92.inf index 7ef4b3de..90f525e0 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN92.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN92.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN92.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN93.inf b/src/bin/hamcore/inf/x86/INF_VPN93.inf index bcf20e09..2fbbe828 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN93.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN93.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN93.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN94.inf b/src/bin/hamcore/inf/x86/INF_VPN94.inf index 32cd80dd..e85d3914 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN94.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN94.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN94.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN95.inf b/src/bin/hamcore/inf/x86/INF_VPN95.inf index c04c7b79..26099c54 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN95.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN95.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN95.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN96.inf b/src/bin/hamcore/inf/x86/INF_VPN96.inf index 60c7fe70..b2aa80fc 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN96.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN96.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN96.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN97.inf b/src/bin/hamcore/inf/x86/INF_VPN97.inf index 8c55fb25..0d5bde78 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN97.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN97.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN97.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN98.inf b/src/bin/hamcore/inf/x86/INF_VPN98.inf index 77995ad5..a1cb7620 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN98.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN98.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN98.cat diff --git a/src/bin/hamcore/inf/x86/INF_VPN99.inf b/src/bin/hamcore/inf/x86/INF_VPN99.inf index fa1a18b4..76877e2c 100644 --- a/src/bin/hamcore/inf/x86/INF_VPN99.inf +++ b/src/bin/hamcore/inf/x86/INF_VPN99.inf @@ -8,7 +8,7 @@ Signature = "$Windows NT$" Class = Net ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318} Provider = %CompanyName% -DriverVer = 10/22/2014, 4.11.0.9506 +DriverVer = 11/17/2014, 4.12.0.9514 CatalogFile.NT = inf_VPN99.cat diff --git a/src/bin/hamcore/inf/x86/inf.cat b/src/bin/hamcore/inf/x86/inf.cat index 4fe81adb4f589e1f321c2220c0078e350c5badcf..d2292a047bd742e2cc8df2ee4f2218c313a9a462 100644 GIT binary patch literal 43113 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 literal 43113 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 diff --git a/src/bin/hamcore/pxwfp_x64.sys b/src/bin/hamcore/pxwfp_x64.sys index 4814c5f5693fb3d29a4013aef1137cbbf7566c00..5cddf9c80a1b9c46b24e50a8771815e7d7e6ad28 100644 GIT binary patch delta 766 zcmaE`mhr(_#tj8b%$46VCl@pMGCNu^Za&P^s16d??5-8aDBw76?XPB4QJ3Abwo5Sx ztasbILOX+tmxqCcK}(f^0Zea}H4A4HHe%3WP+%|sla>so42BFQo7>F;nXySser@$n zME3YhUWvx*I=gZ|zh3^d{F|Ros&e0&x%uP1r~|7Sw**-DD{Yv(mv4d{x8{DUR&U{q_q{^4 zJ;xUvV$xjKw5j#FmRMY^fZmdDpJn=HRSQp)afF5b*AMD#`E%;bzMBi;4J@zx<&za% zvE^>K=ADHAkId~CO;--{F|{pO5v0{vQn>j+py}T5G8LC5pYx0Q zODvy9shUn(IYZCHn8o;!s8=`B6@P~_6{{yMf7&4*rhVq!yu9GljO)S1QZg5{m;+X- zoi2WO-b%rk|K&cW1J5R(4>?+JLq_6o0ZCZg%=ZBryl<;%lGn( z`q#tywWphMPiF~bozMQWVr{y-u0)dAH|Z~{#f_u=1%BP_uu|MxZ`Ed2c;amNX4?n) zdVCEm>Pd1!K9_4%FXgJcmu$%Yb0K=+4DWestPdT~Nn5$cAWiOz-p&V$Tyu&}I0H+p3%m4rY delta 766 zcmaE`mhr(_#tj8b%wbdACl@pMG9TW_u=y}kqdG`nv%6Lxqk!?|ymjr5x4CV4xBpXs z#Uz8xE3`AXc)1x^7?e~Q7{K&qS+j6PVM7KT1_cHKFlotP3S^mWZZ{8P#wIcOwbefn z@r35{7kcXEo?BI>8oYI*?fpeP3Y-60*NTf|d4K*`H_7^+dh?!uxJk}E8~#Two!l4f zSYPMsBmUwS!`8`vPky>=-5%6@x6&-{RM@fQ0$mzW-3hlYhZ%M^{$q7&x_>t*qI$8w zcEj06RC3%3Gt!?5Uz=#ZtNmM55wG~hZPCU~)7V#UK6TcGUC#BWi|OH9`=aHKGX*=A ziDzV|M;$m>$G@y&Q&@LFUtzr#=c4To4I~%y%z02>u*tDQX2$;ZuM4l)wFO^k)<1sA zwMKwrb@&7GOT7DDoYIt9_*&;i?x(QJvNefZ+iaH@*f0B0Aa|*k8fSrerT&)-sC zaqh#>;~yR`zoMHrudsgYi2~^svGBKteB0j0*cyM}k6AmX&mr!qMc@-<9sBBSH_uo9 za40(eA?ThUzb})(yvgT7&ej_k85tTH8yFi#87Q-HYPET^edlH5WHA(D5pi&O_D+bo zE`0LI@2oqd-F7}c9Jk1T7p{nrk(Gg^iIE|(AZfpC(4>j0<;CwA&o6(Oy4r2YQ-+Tn ziv1EHDrwy&4`*4$q}lx3A>Q=%`zHBLlSMYW&NmA&XYbZNrg*r1eco-}wKiLIi_U6w ziGSJl!055^{|U=77I073Js@}EO~=9(-}?WO(kGpx^sgz}mxl4_@yl%g<>frl+S%^I zk$h&49abwJ|6SK|*=^%y?(<+^!nPj8)>bMjew# zLQsvwJNDx}tL$rvq+Ts$TsiIh$<4Lewc;XtcOO>>tugE5&rNi$Y(M9CH0jLQ$$ZX^ z^^y#;mbL1vQhE4uXXeQgqZhZQ#_z6pC6ZUmCKh88_GQi`z53{AmsMOG%huHxtzJ}= zy?%GL`L7Qi+_NtJ*GfL-aKH2Yuh4vjgLP(oWv%JVoKqwG^#1l(vol_hs&xC(aH(}& zgSk?%-aYS`F^!wp8?Wu~m=ry6Vt?|PGBW)C9ACGsE9aEcJOQ zD`9?$IWkk=8qcJ!A(t;~F5;E5+5caXNrEM--}b-vtzRemIoakoTIx}gez`O&-f98*>EWPg{l^@fJ#hQ@|wCYDhK%50okZ60mkc^Nrb48>SP)EegPtE-i@ z4)N%(Ei{cYd?CL6xB)L*5hEij14|PlLy1nzpAfgFKVxlH{@FUAE-O-|wJGWS!M4gPhz0xT~rlHC03toUmG>z5t`-!8tuQnylg!;QTcw!gEL zJ@dLYx>?<5=Y=mOiaQb=>v=!vY`VsKIZD*@#Hnv$PvzC$lud8HdpF#(ZgcCJ*JjCK zp(4Bj51N!T9#_T1{EvtUcdOarB63A}uiB*TJ8I*^!^*^1jB1^_dvAvJ8Sw1<8?|;p rn#`W#$z9Ir|K{_A3N^oYd{ju1)q zXmgKj3mY#t0}F$aDgy(U-YlyU&M0iipu?cRU;rj98BBpJv(4?Qfy`JXUTf4biMS_K zd`vw5q4e|#?VsGKdz(Hqom1Oft6eKDqV9aKjHB5?cm2$nt%q_>i?=NKaDOtNvtzyc zvj)E&->L&=4}ZE8@HA!Vy{O;JwVJjJ?~6lZe_fi#v1MJzxo__ece(b5{<QOZCw`T1m?B*4=OhQZCtZoeyVYr$gAU7e6n@@j4^ssBad8rvf^e?XT&agv#rbKo!d0=$ECYDeUYMqjBEJ(kAG?VU4Qa|ZSwnX@e35X=RYe}soh}O?YZZq zM&5GI+P3<}DJM5P6Z$Y&pIK8N=0G;{{P(tdW&e2{5#}hp`lx@-rSK>hvpnW&H}|hE zemG<9rqjCOTq{_IEj3Z(w9(XlP_=WD#Yc%*LtJ=F#?@mywgjP>e<7eOS0?@Qyy_ zu8Y&{Ca~)ral5SIY`_aw#K_3Xz|zFX5b^P(#-_SY_B;{%oZY29(oPc}9E|&~@3~g& z&!o*)E*;DMxI);a?2vkLa{b4v8@Be{J>k0US?aAF>?bmXE$S0?=QQUzUj8+gYxcjb zul^QrY!Nx8@a0rg<+sWv)r*X`7i=|bD`AVtD0f1-{qOg#h;6(x2L{4vV8IO rhTlBD1@D##ZIdw-ah-kh!JRXgf3lv~uJ@knEtBwuL@nnEMg|4|jH*;O diff --git a/src/bin/hamcore/see.sys b/src/bin/hamcore/see.sys index dd76f791441054a9aa2929573ae7c3d93dfe60a8..9d4bba88d890ac23a1a4ebf25328d677b5f94290 100644 GIT binary patch delta 765 zcmaEGf$6~orU^HgExu+>yzR>@aE)QJHX~;dh`-sq*p*p8^_b{=6E|^}384wwrQP*= zH}{maaPjgmurO$;GBAMY&9aT*jKW3?It&U724K>X!IZ&}!DMrLlO;1&iOa3i*hP+P ze3N^>O}AM=iX&cGSWoJw;OfttYkO zZC)t4^K@BDBYwmBG{Qi1-y5ZH6`SnZv?N2lBvOg=RzT<+P*s>ZHsrjKA zJoO5ikK3C#p6UEt`=`}%)k|h4rKJu=y!}0@mpZ3!og?p_{NP)mzD{QFiwPT*CN0cn6IrJ8LDGZeQ(0l@ z_b-2QJ@zf-?$+*`_vcvTRj>Y!T0N7tzLxGaUfeiWO>fJw4Ue1x;y#rE99bd-bwqvt7<5K?2fMmt6x8fHn^r(-VRra;$K29W rOCG&lrQPy=`Ei3U4-PdX@0BxLD9`ymHnF_TGf>=UC@r6yt!~|O4k*}O%=;|em$IgU<+&i1lhvCdq$a`vtL`)U0(dsJLku% z(5pA~+*3TeZ^e`=b}xCIds^<#FAp)UzYDIVvnbWazVw%?%e{Q`*PBbv_xb95`x-v~ zs8Q644N^R^d*aUCng4vD$i3f36eeBxXO!&Ko&MPHFT3roNld=ikNOl$D0R|*&bhH^ z+aHr>6Wc`Iwg#*0F*|qeBwy^^d}h6Q7uH73+uzF8veD*X@Kk-)WBZOi{5a#$vftZ- zD`zj8b^RLK?9$&%%Tg!%FFRXrU}R)yXk=<=5@n#w#;Mij(e|B}k(0$xj74PATBiPI z{N{@enddVfPugN*W-U-)zzbKz$jHjT(!|J+c`v|r!P#4`MZzMkOHGX1Hm$$SntD7V zG0}~2^P6XCU*0%=IlrM(gX`^w!^{QUAGBhH)c>2^|HC))-sCQU`p0b>8~Y`AJF?b= z-oBkyo?)T9l1t@H+eC)w4e*-?t+<{p`2oitph~ z%ZqJlX1}+KGpXZ#;rua9{#MTO@^B5eTiezt2(^n00aOkvmJC-0TVI+EC3(?FaRt7AOJZ4H2^UHG_!|w zNdpry04x9?05AY703ZN405t$H05r4Xc!mKKHn}aeZ#b+8$s4qS-50pxAzhcuvweDf z7Zg3&2y?l`j?J#ntv44$1Y*@d)ije1l0korx_f_)y(KSE0gAT2vFiQYt2xVQpwT9?$zV*rG#CH#zSX65&bO`<;>Zl}+W z^0EnBUDLnfhgm57@|V`p`elNg&~OE5GxUjIp11)(-NO0nGRd*GGO$iuc*TRO^F;Ez z=|)Va3CtNwnif*=V+{e$ipswu69fX!&67`)&3`d5H!(9ZF*G<@Fe3&DDuzgg_YDCF z1Thu_6vC*=6*||+yhw0SDnw@k80fz}(l8AM2`Yw2hW8Bt0RaU71cCtogAC#CIVb%J zlae<%>Si|e%(_HodwSnq+0DGN1f>Xr4)v+;w(G=p>a(2^Gt-gr^+_U`=)}SAp{U<+ zg@2vRhD}&;x{$SeG{hCH3S&jvU3!~IsSk3KB23v9NGznlzLkeny6v}3Q0h*% zokX6CaJ3NW$*pJ@9SS;^YTX=5v^69+K9eiv*Rw)O-PS)tQ}~?f(JVDcD((K9UGi)0*l7R&y?kE6 delta 765 zcmaE`is`{BrU?(2J*K)(eC*5I8^XBRn6WSl#NWI;x{z6bXU1Np$B%#ct`yxV_r8Qt zZL>!F3lUy!1{MY-RR#tyy;-&-oKe`2L5D$s!2nEJGMEBcW}DkfJ(;meJg#VC6lt#6 zXOT05!|>&$!ydO?x?S`$@279Bt*R9l5wm@nzVyly%jEi`zBRjKwm$YhGHWv5B**%e z8!wrhBjZ-h5I9iy^=HeUshu{tZZ<}en}dUAZ#Q3j@QsMzVsoc8FODZ?zFH~BKi@tk zA$Engo$ckmPvK!==MO$&nDFW>^O6l;+$ZUO?wVWiV0n&1aLn_#u*&JT8CLIWyV>j3 zT)TaGNq3lYX-?UFoqIuv79|0P=7>l?4s(f+sei@4xU}|&etx`j`<#xa9=XQnt8bn< zAh#s$PI=Lm>3|iTbi(3Av>TqJo|81Asm(QMNcYOZFw1yq$e0R*S{GaCZ zG-;cP+Fq|!Z)Gnqc6`jv_w(j|wt`8*F1Yc!|8f!5R~O<`uK#LqHj0>jyUo^Q$L?!U zPxBY7s#mLFdQmjlfAZOS10y3tLt_I&^C$ylHcqWJkGAi;jGQcnVk{y?N@Ar$#()$ti2!Ri5* zZ?Bws^W*l2jm5DBX47uH{}gl~L!+`~)6PxV@jVw_?z52Kt3P8`+iM~GuX%}K*qMzL zzn4B=x}v+#j;DfT6k!c*tjcyO7l;dHZG8X0RVMiP!9kA diff --git a/src/bin/hamcore/strtable_cn.stb b/src/bin/hamcore/strtable_cn.stb index 0d972aa9..47d766bd 100644 --- a/src/bin/hamcore/strtable_cn.stb +++ b/src/bin/hamcore/strtable_cn.stb @@ -557,6 +557,7 @@ HUB_AO_DropBroadcastsInPrivacyFilterMode Drop broadcasting packets if the both s HUB_AO_DropArpInPrivacyFilterMode Drop ARP packets if the both source and destination session is PrivacyFilter mode. HUB_AO_SuppressClientUpdateNotification Suppress the update notification screen on the VPN Client. HUB_AO_FloodingSendQueueBufferQuota Specify the quota limitation value (in bytes) of the sending queue buffer size which the flooding operation on the Virtual Hub can consume. The quota value is applied on the total length of sending queues of all active VPN sessions. Specify '0' to disable the quota. This option is effective to solve the out-of-memory problem on the network where there are many flooding packets. +HUB_AO_AssignVLanIdByRadiusAttribute Enable the VLAN ID dynamic assignment function. Each VPN session will be assigned its own VLAN ID by the RADIUS attribute value when the user is authenticated by the external RADIUS server unless the user object has a VLAN ID security policy. The RADIUS attribute with the name "Tunnel-Pvt-Group-ID" (ID = 81) will be used as the VLAN ID. The data type must be STRING. #关于失败连接对话框 @@ -1919,6 +1920,7 @@ LH_MAX_SESSION_2 连接 "%S": 可被 VPN Server 管理的的最大会话数 (% LH_NEW_SESSION 连接 "%S": 已创建新会话 "%S"。(IP 地址:%S,端口号:%u,物理底层协议:"%S") LH_SET_SESSION 会话 "%S": 已设置参数。最大 TCP 连接数:%u,使用的加密:%s,使用的压缩:%s,使用的半双工通信:%s,超时:%u 秒。 LH_NODE_INFO 会话 "%S": VPN Client 详细信息: (%s) +LH_VLAN_ID 会话 "%S": Assigned VLAN ID: %u LH_INVALID_SIGNATURE 会话 "%S": 已连接的客户端发送了非法协议数据。无法与客户端建立一般通信。请首先检查客户端到服务端之间的连接和网络线缆问题,然后再检查是否安装有特殊传输数据包重写设备。 LH_END_SESSION 会话 "%S": 会话已结束。统计信息如下: 总输出数据大小: %I64u 字节,总输入数据大小: %I64u 字节。 LH_BCAST_STORM 会话 "%S": 检测到大量广播数据包。您可能会按照策略废弃数据包。源 MAC 地址是 %S,源 IP 地址是 %S,目标 IP 地址是 %S。广播数据包量大于等于 %u 每秒 (注意此信息是对部分数据包进行刻板的分析,结果可能不正确)。 diff --git a/src/bin/hamcore/strtable_en.stb b/src/bin/hamcore/strtable_en.stb index 02f53f45..c2f78a91 100644 --- a/src/bin/hamcore/strtable_en.stb +++ b/src/bin/hamcore/strtable_en.stb @@ -551,6 +551,7 @@ HUB_AO_DropBroadcastsInPrivacyFilterMode Drop broadcasting packets if the both s HUB_AO_DropArpInPrivacyFilterMode Drop ARP packets if the both source and destination session is PrivacyFilter mode. HUB_AO_SuppressClientUpdateNotification Suppress the update notification screen on the VPN Client. HUB_AO_FloodingSendQueueBufferQuota Specify the quota limitation value (in bytes) of the sending queue buffer size which the flooding operation on the Virtual Hub can consume. The quota value is applied on the total length of sending queues of all active VPN sessions. Specify '0' to disable the quota. This option is effective to solve the out-of-memory problem on the network where there are many flooding packets. +HUB_AO_AssignVLanIdByRadiusAttribute Enable the VLAN ID dynamic assignment function. Each VPN session will be assigned its own VLAN ID by the RADIUS attribute value when the user is authenticated by the external RADIUS server unless the user object has a VLAN ID security policy. The RADIUS attribute with the name "Tunnel-Pvt-Group-ID" (ID = 81) will be used as the VLAN ID. The data type must be STRING. # Concerning failed connection dialogs @@ -1902,6 +1903,7 @@ LH_MAX_SESSION_2 Connection "%S": The maximum number of sessions (%u) that can LH_NEW_SESSION Connection "%S": The new session "%S" has been created. (IP address: %S, Port number: %u, Physical underlying protocol: "%S") LH_SET_SESSION Session "%S": The parameter has been set. Max number of TCP connections: %u, Use of encryption: %s, Use of compression: %s, Use of Half duplex communication: %s, Timeout: %u seconds. LH_NODE_INFO Session "%S": VPN Client details: (%s) +LH_VLAN_ID Session "%S": Assigned VLAN ID: %u LH_INVALID_SIGNATURE Session "%S": The connected client sent invalid protocol data. Unable to establish normal communication with client. First check for problems with the connections and cabling of the network connecting the client and the server and then check there is not a special transparent packet re-writing device installed. LH_END_SESSION Session "%S": The session has been terminated. The statistical information is as follows: Total outgoing data size: %I64u bytes, Total incoming data size: %I64u bytes. LH_BCAST_STORM Session "%S": A large volume of broadcast packets has been detected. There are cases where packets are discarded based on the policy. The source MAC address is %S, the source IP address is %S, the destination IP address is %S. The number of broadcast packets is equal to or larger than %u items per 1 second (note this information is the result of mechanical analysis of part of the packets and could be incorrect). diff --git a/src/bin/hamcore/strtable_ja.stb b/src/bin/hamcore/strtable_ja.stb index 68b7bfed..93f7319a 100644 --- a/src/bin/hamcore/strtable_ja.stb +++ b/src/bin/hamcore/strtable_ja.stb @@ -572,6 +572,7 @@ HUB_AO_DropBroadcastsInPrivacyFilterMode 送信元および宛先の両方のセ HUB_AO_DropArpInPrivacyFilterMode 送信元および宛先の両方のセッションがプライバシーフィルタモードの場合、ARP パケットを破棄します。 HUB_AO_SuppressClientUpdateNotification VPN Client のアップデート通知画面の表示を抑制します。 HUB_AO_FloodingSendQueueBufferQuota パケットの仮想 HUB 内におけるフラッディング動作時において消費することを許容する送信キューのバッファサイズの制限値 (バイト数) を指定します。クオータは、すべての接続中の VPN セッションの送信キューの合計長さに対してグローバルに適用されます。0 を指定すると無制限になります。このオプションは、フラッディングパケットが多発するネットワークにおいてメモリ消費量が増大する問題を解決するために利用できます。 +HUB_AO_AssignVLanIdByRadiusAttribute VLAN ID の動的割り当て機能を有効にします。VPN 接続するユーザーオブジェクトのセキュリティポリシーに VLAN ID が指定されていない場合は、各 VPN セッションはユーザー認証を行った RADIUS サーバーから返却される RADIUS 属性の値に基づき VLAN が割当てられます。RADIUS 属性のうち、 "Tunnel-Pvt-Group-ID" (ID = 81) の値が使用されます。データ型は文字列である必要があります。 # Caps 関係 @@ -1906,6 +1907,7 @@ LH_MAX_SESSION_2 コネクション "%S": VPN Server 上で管理すること LH_NEW_SESSION コネクション "%S": 新しいセッション "%S" が作成されました。(IP アドレス %S, ポート番号 %u, 物理レイヤのプロトコル: "%S") LH_SET_SESSION セッション "%S": パラメータが設定されました。最大 TCP コネクション数 %u, 暗号化の使用 %s, 圧縮の使用 %s, 半二重通信の使用 %s, タイムアウト %u 秒 LH_NODE_INFO セッション "%S": VPN Client の詳細: (%s) +LH_VLAN_ID セッション "%S": 割り当てられた VLAN ID: %u LH_INVALID_SIGNATURE セッション "%S": 接続してきたクライアントが無効なプロトコルデータを送信しました。クライアントとの通信が正常にできません。クライアントとこのサーバーとの間のネットワーク回線に異常が無いかどうか、特殊な透過型パケット書き換え装置を設置していないかどうか確認してください。 LH_END_SESSION セッション "%S": セッションが終了しました。統計情報は次の通りです。合計送信データサイズ: %I64u バイト, 合計受信データサイズ: %I64u バイト LH_BCAST_STORM セッション "%S": 大量のブロードキャストパケットを検出しました。ポリシーに従ってパケットを破棄する場合があります。送信元 MAC アドレスは %S, 送信元 IP アドレスは %S, 宛先 IP アドレスは %S です。ブロードキャストパケット数は 1 秒間に %u 個以上です (なおこの情報はパケットの一部を機械的に解析した結果であり、不正確な場合があります)。 diff --git a/src/bin/hamcore/vpn_driver.sys b/src/bin/hamcore/vpn_driver.sys index 3b808eceac2b12a3e0abdffbc57193fce130c6f3..8eeeb7901f2da99c684bb51c7ab6417d6d99e918 100644 GIT binary patch delta 765 zcmaEGlJUVw#tj)v%*J0cCucMHGAW$fyo;$z4a|4f+$r#eJ^h+;>H^2Lhh6usP?4Xu zSwO2njF*Rjg+WV|fdNc!p6d|KC~U-_!=S)m046ONOc@LrOg6JSMKWWRD0VGl5wR+Y zQ1ra*socSI_Swq$^)uJKsGhp{uV<~eNKMiICoB>R0v}w=Vd9vweCBq=?NyWe5*_R7 z(mPJp);_!1y~XmYRs0iyzmkE0;o+;^B>XdTTf4gX)#{M`oP`=9+x&0cH7?N?Jiz|u zb9~y2`3cA0zm9tU^va4w+Ot<4j=0Vk!`M_LKe`m$!66!VNyTkR89)Sk>DlZn<}U_YBd=9Utbe+GzCgndr3K zZE-J;y_a4!Z~v5tOPh}?7_YHf@S^NY_MYTGE)^3F)`b-&%l>v%o-Y*>zu6)pC=)51 zsO8y_Hf<7H+9{PiA0HTKUE06vG3mBD*GP?Obw5A?u}48 zl-74BdEKOs@0dD6CZA6_TW@G+ZfI<1W@Hg%pv=ap)#lOmotKf5#ZZhz#G`r2ngHpq z=ie1Zi9Qny;-5M#_K^WEToEH9D+5atBZHJvRcskoO0C$!b-#T6Nj=l^(SBDUHqCUg z?#(bkrYQD5rKfNAuS!4OBeSpmg=*9)Cj+Ol(2~bTORj!2u&vi)wefZEI&rnQyC-d1 zV1UXDwlo#C|C?5tcW1RFepPhY|4T7!{tm&-_R*pm2SYxsO?>USAzY&-ZR15o%bM*^ z`_fFzzX>!fWxTt_GR(B(@ZT+O2#pkzcrR3BxcG(L+a)~dhw^s? rzE92kHdk?Z3(IrY-L>4czaD;P`PpK-vxD31Xn*|wjNRtHp0(m4S3W#V{@BFNI_Ze8D zy6(<>VgEeuO#Gx1i}!x;FNl@b zyv*&M&Nb!P#w#2%+jTbg+A;`XHX7#J7;m0N|v!Abc`+>94JI;j%&k6WPU#_{cC@peB<8$3j z^7a2LzJ(m?UN+^NuR;H$kK!xR8a4cydrfA~EI;&Rv3j!Hs>-z|_D4C!tg09OztVq(iwch2H93}F_G|vD=(7qL3?GD^RB6O{ r-nuy3!Y*gg!!zN|L5!`3O(i<4wzA=bvA<>XW?88yOe?_Pbk- diff --git a/src/bin/hamcore/vpn_driver6.sys b/src/bin/hamcore/vpn_driver6.sys index 3017302251c531e9f3a17f610476cb3b977519cb..1ee8464054ef8206d3463ecb9ee0c654fa8f3092 100644 GIT binary patch delta 765 zcmaEGhVj7}#tj)v%syW;CucMHGM$Xxyo-rT8_YkhyHmhDLqPb*lLCiT_p=MGw?25d zd4gVpFfR`S3xk#_0|S`eEbA1`C~U-_!=S)m046ONOc@LrOg6VWM>1oT`0Q53BC^X= zY@ zEbG6oI%gHLJ(QWdBi;FoVE)z}2R2MyWPIG2TO`o@<6?}szC zDSX+zzkW`EmzAK$gQ*?2W>kDVU^)K+i~Xh@QnB^TbB`|gaVX{bv18X73-mT`e6!@l zsizlG8sEq=M#SEo?RM_Qtp2!%-|T}5|84qHl2mq}<%RA~?Y8rtRa!UxhTRuD$@6jb zgKzb>FE>Z%^f%9>efZMu+;F>LTmxy+sY} zZfx&$`fcI4R)$cD%swZ!4zGS>KH$Fem?risiG^NEm zuU&6gXv5&JDEPwW6Z=&jws@4u9u53?eEns;2Vq6WLv(hq7IdAxm+QaGWM;or)->@0 z?FWv{J9yvHui@sNpEF<2taB^;qHSVrZF2ZeLtsy1jnMrR&G$MDM=$0cVAnWtLi_pt sh1IhXx4m4S?mcg!PS%T_kC*J1P5PL@aliXYC2wO|=PrTDpjiwI03DB9;{X5v delta 765 zcmaEGhVj7}#tj)v%*IpPCucMHGEH&cyo-rT8_YkhyHj8y>!F^Q;$+W##&36c%*xQ; zJVCEPn3tP@g+WP`fdNc!mURke6gFhgVNhT&0F#ysra+e2=62^uW~>sQ-O5-*Y|3PA zt9fP}J0oh_W+2YKPD|KZb91eCt+4m9J%jD@3Le+qiMzu%)tvwK%sS*)4Ao$6J>=URA`gS?cti@*JT^h(RtC;RWczQTD##pr_5 z)q*cA`X@zL4!@1t`Bg{fK+e9&vESsmTdzgbUnuff-%#Z?Z#|0#-+7I)TQXN;`L*`N z#LQH5YV6612y<(we!H4aZgZ{T|E2FaeZT7N;CuXCW#crNlO4-Hos=}0XnZ32!@TB7JAwu{A}R@w%Gr|(h;0jKYjZ!t(Dow zENdz%P0G%oUJ!7GBPwYGBq}eGEipY)N1o+`_9YA$zmwRBC_RK29xPh!D+7R zY7C412A3RHHTi773s=O*$jZRd#K@p>0c|B|1!hviraMy#H|~ zzSe>JgA&&lE)Ebq&1-Kp%dJCtg@4S{uqw7U|GXavGyXHOyy{xxeQAxi>q`eoA(J`|ss!!T$eQ3+^16*pT3BIwz-3tzfBsrbT(3 zqnoT+;HS^eAMf9!X?{gS>P4B{h5DVxSPr+`uJ6xo$UXHnjQR1oV!jKFbzUze#j;${ih oYJSR5nFLd&XobHMKKxmg`Gk?}kA?KbhxMng1b64WUCF=z0C|#2VgLXD diff --git a/src/bin/hamcore/vpn_driver6_x64.sys b/src/bin/hamcore/vpn_driver6_x64.sys index 29420d1b251b98e3f3e718f0a8f57334f3f03742..ac44717fe8fb7dd12734c29390d4527e7743dff5 100644 GIT binary patch delta 766 zcmaFxfbqct#tj8b%=O=jjB)3~@MFl{|z zwOL31i99b40}F$eDgy(U-Yn}M&M0iepu?cRU;rj98B7@r8B8{}2V^p1m0%7@V-!i& zpO*SRWogGgbAvwP2S<}13cT8|xi+*`TqH*1jI_@ZC#7Yat&4ennP%RYV772FU#??) z+|$*4d4G?lPT1m;w|Ku{zVUi7^{H=a@}^!{Gg-oH`s;>i?d1d`{obE7n{$4LX zi$nTsQ-26eZsEF{ZWMH*BQ3Xb^3P?xF-N=tZn8gXyPnm<Wnbc|=y5PIZt8}EEw9xcuKst)`f4~kt%}vQF%p!lcYG*+1`Wy`iDGp|O#XfkBjkG8?B>n@8JsUPew9LopVSqURhdZ&!F7 zUC=pSJR#=1zzwai=?1)TMU0HB3@lBI3^G|NDz7_cZQwlGJ7xRF{cpP~U3#h_Q@v^( zX7hjfsj0YqzSg8{+qbhm^!YNWSgTij+@q>Ci#6xQz75OyQ|i@zdZlU{lGm*AcX%e{ zdQR@>v$nH;_b%eL=#73L-^iN#qdWb);xUE02esVRR%m>y?EL=e%Chi^|9n@ppF~e) zkqt``<8Zonnq|kk{2#M}u7@V>pJ<^cA*vX0Pc$Gw({W)^ZLUmu>W{dE+vcCkteh&z zuXv{Qf_ie)9q~yHXPEokR+oep{$xCM)avCyO}`U-T5oU6-Z57^;_2syKe?B!{^WA# ri0clSlhKQ0%fJ8t#O+Ar delta 766 zcmaFxfbqct#tj8b%u!R_Cl@pMGP`9kZa&O3Q5!4}u6I=6^t?uk7T$cnc{X`drzy2| zZr0I%BG1dsz`~%U%D@1oH_Q5mGYT6r=rAZS7=TGj22&u*Y;$`+CNowE=8!Z-5r=Bc z!`2E{*;mifo~tsUs(W?jyoAlQp|#>7kMH&n!fIzQ^;hi5m_)~ZA>m|CrRAF|uhD9DXHW!|0gLwx!>O;}IQ zE3je*tk+RXxKF&6$u>TfazDtWHYkwyCW*mwTnV%}y_Yw4I_e zA5_~Uu9y zRFw%{C$6n{#k8h!vVY#$dIKXPLqlT&W78-DWj0Q&HjlRNyo{VIhGHxtf6ALoLN&~{ zociu(n7hnaaG`pUg8?sG5hEij14|Pl1N*fLUWzsgOmzR*Je1zGXT$G{8fGfe6%)28 zwz_a@{ha(vykzQ+bXdXcwhLR6!@eD?hF^Bb*>o~ZwsohE(0(@)o)`B=Wn zKc73(J~IFLW^ihf!Tc0sXU`9ZbU%Dpv&l~->)NG*9Jk*Z7tLG5m-we|i|Lh2uC0}I zuk()vt6eLZRAgnKxf6%N%)RsNeoF zIxFdull(v408^{hiwV1m-FPK_u4Fp!&am%B=H3UT*6-rJ*-qWJ_SFRAJM)+2LbyT21&fjj&*S&6yW(OO(qNI8^ z>u5hw#RpOlGVS%;9N_A~TQt zb-Fosp*+`_CDrpI8il(hA2)8Uji?nD`7`1Al}EA z;JUjn6FL?ctZ_0}Gri}+qN7`8N_oa_N>`7`e6uT3N&n%!!bN;Ft37gDO6ER&aN~yG zTY;-97Wx0%x7oD(GkZcz>15qg-V%njo!3mJpUQu=S}f`(+YP4>7v8)#t!Y>HPWdg# zCN9o$Yq!G5C)X}qQClN=enF7h>CR7eKQ6vdO0H*ZUVrq8^6qIOTdN{Vr%c+tv+(WY z$Dfir47|k>MBo1}y;Qq?KkqE|Rm+N>9!%u^`ds>8-m0%&!HQ~je1@Wz?Wd$SPJeyG zb8hCl{-5kj>%vwfShJ_FuP~n@z`nTBWzYQMjy|X3pWayIecwPX`p}Esh5I+n>At5} z`@OIALk-ul0;cspC;Jzktv56@H#9afG&YYiP-f%QYV&CO&dbQjVkpKUvY=t*H^qy( zH<_RDy>U%Dx0rdypI`%CxFSYIRtA)>z08|I)pXNS}b?^k{GQ4@F=<=pB&zSd95kd@rsc2G>+ zoQ2{4iPLN>3O3LGH2WC;P!X-1>GY&%arP=AXKUqhOJ1 z1M`M;D;`xp`)Bbok<~-U-0<|b+tNPWdPmC>q?MeWYMgI>IHzvnvY$WZefQ>d_@Jk& zsjK|R(dpm2JvZ7n`*8|pxv4Go|FGkzanFSY1@UJyzw|yAGvDxVOB&C@-gyo(KixhV s`RRT&EZAeKbbpHOJA>*Y+Y@K^mfbqF;Ps5`hcCnY@5yZ|e!##00FfP2$N&HU delta 765 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

jar+| zVUJboI90c%ZYVEO*&+X{^p`eUGUfJfNz8lO13!zwX*xW>YTBSX458rsqiCFi>xyE zUrG-5Fy>#K$j&W~oVZh`%DC$e(zbb_l{hB;K8cS5m_^$CY2cU8;z;dP6gzIPz;pg6 zfW0p%luR>D;ton?hL|Mog;C0P(FwqEdi6(iR!v-q(b931Qgl8isfi_ck;Ijz7bFGI zG0eyIj?FFOflDV2$7Y#-m9n_{vsgt@p2!|9E9qEMY%wW-@f0yvHg=)6J^X6?eMhWD z^Y?N?PfaLoXrEIMPe~nfy@_j`7Q#-`Nrq=`tikGZju%03Ep|G`i?n%O{?7AiDkm{4 z|5jEC%R*{X8igz6x^b4HKt_s#fM?e1wzFjUtd>BEh~~RgONs}7^dL4>)3dx9i^Az@ z@y?9n<5KB^8rMu}TD)mH>nQy!YIj>8gtyNpiaO_Ocn1q9)rxn5+5+3>lXTr?b$^&s zw~;o2yN1RZ-M=Gf9K2RqY8ep_!9cCxrEFZ;!;Bkm`x8BN>|ySxGc7eOZCPrY(soPj zD`~4TgRXjbhnnnv<5hMBXSqw&`;pFx4H`c{jf~X8ZX4p9A`GY#TD;Z!e`LYe8NvvC zX%tz0(R}tC=h|Fj;I6WU<;Li$e}>v_dwTo^zT; zQeHMb`<0Cs!o*3gI%QjlkUnd<+5s~iW!x-Hw~QlAx7b&I{Q~<)Yy0!dO|5O~^;avt z`SkZG`tx7?G24@K)W9&!ORJk`I(EbCBQVYBXc%)y$VDj_;6SEm31(h&@G1%!grxH! z4hA-8w(uxnF((Z-dWA5`oS0ikd!=^NL(P^GG)OwnbhvQ$R39?mn`V6Ra?F&BN}Gwx{aFkR#NUTyYmdIHQY?P=VRgFlYi?fs_H4rP)Yn<% z;};>9xAptnuRemTZnod^bEbg=phr`P{Zs21$qodPu8?+>D7oCWl9r&BhbURN>^fOoR9(PWfY0PIlys* zH7)92j`7tOze?Fy!wG%bBm%r?x_r3NHJ=dBS9ha};eX2PU7r?o%_lv*pP@&VvPn>w z+2@88D!6_Ig2wL_%4MTLEikACV6g`uo3Dj?No;gp%VJ~iwWiou@rETfmcL;a8&|)< z>)cv@Wm(vR6+IswLT(s_{PhdyxJ%Uis?Aq2 z3%-)G(Co7-Sz*An#ACAb>QNq(C#sA=66UzK zxlwE@gr{|*?7hV1M!5w}6ro!ap%0RAjo~zY_Q4oW%6X_NxsK(vtc{-L@8YfU7M?(C)CU4876;|!lo>KE) z1|X^&E~!m%(c6&Nogkb8(JAr$JshgpGDq0eK?%_MtOZbc>J>LA(ns0e0o!ogwOB6d zI#s${q%Q^BiDf5D1q{zjB1>cvCVC`)vc*9CqQ3Zkt~I)-JF%T^ppLKuSqFf|=Oz_t3@H5cB%l!aQnTHF{Yn!eug3R`DZbf{ ztEcIcq>$5%R;72gjd81VCl;IKJ?WRklW@>;dh|vstidB9)h%pc@X46G7a{K-Ch+K)X|s^_cxhTW zD6ZN)#zPXDx(W}6JJ3ruDQfG}m&2Qw>=1f~x5dFsxu@9hUU_FyV0U8Ipc%=JyI^F3;*`RF9l~x>Q3ry`W$FchJSR1C^B5>0uAx=>QZufr`n?T@{|u~ z`{(xyg~pX2LgTRt4$dck;X|a;I+k>1pfY}u;xKV0o!=7jBIi)Ig_7lIK+fY6(2nTP z!;x8d3kD^e;_biM-ZlW)T%NHGP)T7!uJ_8VTno6jx4Wc2d`syRunCSKPE6fZR?^>} zzG-KVnlc-E#Lh>)Mn(4{pTwY~|Fv!cwZZ^~ZEOwXW zV~gh;v7337kz?(QkPRjEIjjE3+_m!5#L_A5&r@~~-emo5NDWkhGAZ{{Ip`DA*>id8 z)Wp;lN=R3c&evdnv^hwT`RVnVHjJokkbx$zEYtbLtPLacVUf zIO^3Cy~3C^j0?*lzjIJc3{~I8NW|4Fc$g!}cb^b6@uf05^?;dXNzf84rPOmB2e>0K zbyiVu`~^=gsEp)Ef@R0fq7>O>ia*e^j&x%QZ=v9R$du22^Rmvc#^p%9u?QSn2Lm{V z$$NvtVrH)5@2QIPgYw~jI0eT=@34kEP&(w-Hp(aiBWRyYQbdub#Na63_u)ir! zbz+YVgmH5zhR)%5dnA^a_D~Aj=9aFrjoJ?@)?i>>1@hkZZ{=^|#gfcTrg`MdU_}7&E0R6o}f3M#3@z_ox{@u+%^MD#b^X~D2=8HRG$JvjI&8bCO zDTnQZR7;M%Ei+ldQ{kNHfXH=U$J@X~Wzznq$std3Q%=J^Rk!LSv{~8g0dd9l%o5)A z>H%ywJ{r3ua>w&dpV+t~w*o|~BFmqLZzfNgMl+>UqB@p|Uj?Yb8Fq{dsIrvY?GXA*rn_E3mE~2d42^_ZNiFiE zPS5IpbuPJyblO_Z@ekpt}M3fXvoS~&1H&D(w$mT6bCR&n9lLDtkhL`38Y?ca8R&y!;~|Yqp|GfPEqnaz#=5Q# zh=qG(Fdlpj0@>VTWWkAUVCG9NqD=oT;VMS{2W8J29Ys!O z3FBryHd56Si#RmPIMqZiTT^|eQXs}34ueLAmc+{jqwFHNVRk6P>kJvTwNS)=*f3v) z!l6{h*|&;NIAIoZo!*xFdHn?ss@?<5h{0BqUEFZ5smCO`PROMnZ_Dp_VWR7VZHcE7 zGryT9{@%)19ogk4v z8-?%X8ZFUddL1}3XTd5r--xn*>?Mgg)AeI3>@jm&FBm2+%)RESag$Qm33od9Io(3x z(&MNPR~gFbHlATC#efxHOtoBhy53JEuHtft)Z+pB>kEnQCYPIrsMyiJ+Zuf&m?PA| z-WE2L;cXqvNN;B~>tY=Ouf?t9dl*Z57|7b=rLo3%7O}>kor758d2ktjBo`o_Y(K6t z))>iVtTB>htTB?!SmT=G*4A=S%O0kqn&YN7hVS5=9Wdd&led<$1r7&ooyM>Rjk^xn ze6({#s`2P-xM}+{GVYjf*!LrMmvaXbRTu@`2LN=u#O`vWH5h+&p=6es$imm4(K$=* zE}z3)#+BV}?&H?(@;N+zuow#LF2|FwB*YuuUGC;AfB?J8UEF}e83$POaCOlNbId#z z4$^mEgE`*w26Gf8`G;q0Fz1nm9>X+I+-B}!U_Hl2*X0oa)41Z$g%-fmAx$S z{p@Rr1-lblj*C!O(+@0c8tgRZ-s<^`*>kKfiasMPWZX1MZZ6h;xRO*Wn>f1!w1Brw zz`KM6_Aah1hv`E)IT~F$KZhD!G6sy)dFW|UCXRtf;6FLSonc4_?flDW4aN&IB}6GK zY)XkMxIkqOu%_dRBY!4!@EY@g!*mWmHUHp|oXQ4RcVg@DBG0+xrYA_;oh)&`b%7+J zJ_e*uNL&;#CVWDFN?erc*m{SMxGoWC&qH;2ccSIE*vDR!1lx{765u@~0av8YWt$Ud zy_~}ZcbY`7m1*{sbJ0^8_txV@Ppsa0T#B_;CPiH9*c;w-x5gQ{k7Zm1NjHX`%M3YQ zf_ghYd*DBuq8e}ewkbS;8P_}I5f7c(zx;ei(@~6s@#H>#jceHAOMhKsm{mQS;m8}% zNhZU-E#bsMdP8HGRK<0?8#Bs!lCh91!NNCcq3w`PS4~=mi+vDA(D;hjjsOpr&r~>0 z4pW|VB6tGI(e>)&k!O7yeu$6R$IJj#1R|NSk?Cg8z(kOKT)Qr0*r}SgueH5 z9;f>ZIbvVZrts}yhsrlvb+(O=S3OAg9d4Ys@XQdBr;H$Z$}ru(2&HAMT5Zt%(>Y3h zCPQ~GOy}bnrewL2JXbP;N-DXM9Nk($lIEstG7w#Vk1T@4>G}m)l-88=WRtCgGqKic zo}U5+l3={BnRcaLvIk6}Ki-#Q^kF`pS|}>M;;{u(vA6w+%w4>&I!Hgr7B?2AtHjNx z(v!u_?P=#_T;q=^Qy2ZcLVv%!%RFrk|4gHw|DE2Tck;h+?en|<5_`_#sR|lhvchIO zHWO!mN3}n(VI>3kF#U*5I?bTDt*a>Q{*|YXnHz2YmIk4En$F=M)Nxizpy*FbA1$sH zORIWxeT^mmAq2Tmx~VZ%E;gB>sH-|Q_YPGf;7{tnJE`HF(Rx^S_>y~@G z@$Ycex%kzjCASKP1y)2y*u}P-jBG?~W?umDX-!!z=38`B<@lPn|1LUtc4vIR47$;O zH*n-o^b}^k`2Hv_8g4t7I7+(d*Rca`gv{&05fcN>^d~5hs;{3@=nEqBwX(sumUqRO z8Ol>P@rrF;**Jp(wJRG%Z(JdxtHL~%?cRIrB98IlbK30v{B6aPDLhK-!tTVLqLDhJ zM5kf}7!mbBt=?TAVUM@G`iH|DD(k9$o4cI8*cGDLx+yJqng`)u@2)G~f~PZ)G32SM zZp9N#RWog|elv^fb9@)2=68Q+^LU%u0V63e6pHM8-syuS6e;+QZ&<5$VYD+^(1mDX(8-8@7WD8T zXIRwW=q&$m{7Oe`0es(j6$gf88Ze-60aWp!C&?;~%hHxtVStVFCwYP0hrHOw=3p-1 z=LRj|W3P%9no~Gxc4i*?GIpMl>+@6jtcfAb86t=ZM>Kwu`uYT@kO=&}+7Y`Dn;{Y& zv=GRIKuK`e;F*B(aBP=WKeNz(m%f0(c8>zvEx>k5uxqFh1Qff~@Nnwa3cQ8v76UKkx zppibdNiNa+eL>@AFW3x{Ih14=Q(=wdPjbNJNj`Jzl-L5<7t{m2h8v5=i70z>sCN%@ z2;MsGgTj4?o|0Q22U&+V8^;z%yee*id{~T1^pxBJImo`S{^AzM4P4uXQ_>bF*5eUn zL~|Oat2_*vj;k8rb1A%kEjb#t$adnXNHY)IUOste1#8ouAgNs3bL{LC8N>-a#=#jf z!zCg^qGVyRkgAvR4ytn28B@kPSKSX>)tIK=M9n|Y*e=8?*s zZ(PV0n_6pY>hmRkP2EgSk;s_wua<2s<8CeEZe_Wxtl6!s=+Pf(eli=|`eVyTTTzHWRdT`c@4x>z`tE*5+QT`c(Dq>G#W1LbPR)Skpm(c@fu zn%cV)HN}#PO}G}@;i}=1i;MY9_CuH*wuJVo`Wz0!?uBB1)2s1Q$XHt;1HZZxJ3e$; z#asQ^%t=0ND^JSXixsAkb#k@h`yKuLf&L1sKb~_bB5M?1kp5QEU*npOr;UE9cOU)r z(BCgVjy6i|kWw)x4P}i5K>m>xBpvPV{1bdS+O0CbJ&M8d>50l$e^=$C=oHUn*Zl6%x?a1_Uhh4wV z-o~bX$^;JKkXx>&;?P*$*s#B!^^9ALfB1oQ zYUQZoDOr&lbv)%(mM3SF7oCPEnc9t@xv%rVul@4i*VyAP@}aLsap-IRNqOk&nS2uL zTmU!)>+Mr`xt-r@IH1-V45}@Y2Gqu<*nG&_4)_qKy2^7;H}d_)aTMHM7ZluP2Dyd%(PAmM z%{B$M#ZqvaZ3^y&Q z%;&32tvAnF??_SWUCn4(ZEC&6dOV_xXil)VU}3?us%|^`ICg_DJWCH*m87#`9MV}K zPVjUVNrw&7*E#SFH5T2?U5o?JbQvFiN~!XRm0A+lx+K!qpD7N3uH(GxX+ZHrHifeO z24TdOo^~pED>x2s1(~;AbQGatBlqSBW`Jx%2dbUV3>*|t>D#6-e;Z%+jH7yX@kn)< zI$D>|(Kg0dM_U&&b+p^sEgkK~cDs(Yq#YuB)ZxdSC2Vr~!;hCTBumF(lV=@&U=!9O zS#yo=Uv9CyLx7cKvjZK!=*kqZFO_mhdWQoZp`#y?IUij`fY|^iQO*)uOI+#sr z$6=Eb@Y1j{C)ngjO4Vx^0dp9reT@FvQzhpSn*gO77IkVmUg9{-WR371)N+VK0a$I6 z)0;zTK?~5NS z-~2x2i$`w|y6L#wQZ){@uy4j_Jyiq_rBi2@Va{t4*yM)z)b#lWUS!^X>658JV@ZW% z78Dij%JwXDNvf5smjB6_E-$#wlR#yVi>oLVH6v~xNQuh6d6V_8D`H%G0c|T<1oxK zCkeo3cQf7XX1X&@j%ApC{fMPa7$@xvGt6a%xXd0#zj3mJVfK_T3|=zBpd1Y*p2uaF z4A+HgX)PX6M&%Su-@^>Emx0(j9>Z)u9m5Qs9Lq3B3mUl(iZqGReAMoTGt9_WFnQitk(W_Z|BC?)v{L`{VwfSU*sB{a{YvNRX=x8q*DH zHN}}elT{`y zj{bg?EFZ`jUWcNLcV72AH89lZ;zQ5fINOics)ELfGNCZpHgof_Iatifsgc6(N7f7%_4c;mOsS8cbJ(175&Axk(jF|Hw!{0mM?@QD84)y0 zWtg0~jG_7mP-Z}s8Q`;Xs0a+2wEE!>Ijw$p z^l9}D+xhCn{%PVB&4s=sEEa0Wjut;nVeh`CFp@#ESEMH&>t7xmK5_c9Iq<2nQFY;)4w_Y0Njw-)qwzOF-IL!R$b^g^ z9+z~VDd7*scOYvZMEdC!G`&2tjl;6;=s;N3b`H8)iTmmu2+LZ996LG3c6_aWD=-38 za)eb$3`|}54oZIH3`|&8DN&Dz3lYomB%T@jFOQC2dzz~v>KB5?B}lcdT2@6AbS0{S zUIqoMrqD-KQ6IllD$^zXM(_={2)^gWtjN&>*LezkaiDZhmhDf25@opJ<`HGM@I7IQVAN*I8`eE2$Fv8QG63=w2IZ!d90nzgL=ZNa#VMxkNOZ{p3B;H zl-cDoZxZ>znDb;x-Vg6R-Ft1R`@{CTiDN@pWli5>+x)d*9;;$RBlAL$#T_!9=V4ns z56ilZ7g$n+)s*^q_=Ze>P7BS0B&Hru3(-VL6lpuGvq+EJxH-|4+a@|`x)tSGPKjPB zr(Bj+tfg}vOxxxsTYj99lW`tq-(lhgYbqWqzc*)=Oe#51Wl^Ud7*-wXbvWpM7qrjn zhc6{&4exH8gcGbfsO{Y$Za=aIXC{On;I6!d@t_yw~3EKWcZluj5zO4eoiQ( z@l((!2+G3wDsAcOb)3?I&FA+&4H+0TPPC$9du1hojH>g0H@~12;jl!03K=h2mF(4@ z?Gzur!Y15H-ZV*cYgt0^rCSu=yYyF{_*l=^TGUyppN`(2+E|Fx?XrJgWx;8_uOdIz z!&dJ#4%-SQZ>fQ(wVxN$IL~*FoYh|QyXW>_taGJgpaL2bq(?_ucr z`S7%flyK;}nGQZ0jSY{D6Xhy>$%7e#&Ii=bv<`;Ph?sHB&C!HxxLkyF_b`q4fZV7Z ztwLDgAWctnsjq^6r3+mWhfYGPAN}PJkEOraHm3rA+q^sfK`mU>?JRyeX*ppZrtT;4 zEiN)uV&`Iu>Emu#bg^oBxp@O7rq8hF#x(Sc$`(@dKC+F|Gc3EBH%e)tS~jTdM)Roo z1kG15M`%9r1zDE->FM&J(oA$0`iS^S0_rXOBrsx}Q=-p}gpAjZNquglM4yxTOt->h z0{ugOxJ!h$51^8&J2P>ZChtm8vJTbHRD_Nj88w?)`^RHd=Es;D72dxORjtZ~hmdiu z%l2hu(*cL_*5+?F0ni{OZ81+eW7EbWX4LuBLO&+uOit&fHE{`ltYSp$8|JAHBt+96 z)O1NgS&X7MWOo)7a>T~N`Iz=*nthFA*w^AJZm{_mOE+K$`?chdSaxPTBoB!&`Tt(K z*9#mXAeAPFKbI*-0W5zoGdrA7Y}Lik79832 z?z&y?UGH8hD{9^SyRFxy)-8OwN=k-pC6)h;ZQUA#ipoVQg8%pVopYEM4%+|T`+vEg z&klb5y`1NHe$Vs#-p~Bb8Tm+9NEmG@NmQRHPUBtH=*>M? zULPq=k9qYqO>XRLQ|u4!DzBYLO?)@2Igzf@_-B)J?TLSM%p~dItm`*l4GpckZsqLU z*e$yH+*q&2cjQxHoqp@5gAdS;QJXG4j0ux|pgQ-$S!?GJA9d<}uLHeE~9k;Pa8 z&{H1oZSUJW{qmo-end|?Z%G7!%v0$*(nprB#NKJ~-6TUd*-KxHncZu=!@>+vZjj2?PM+Z;Ud^oP=sG-iR zJ)wUwo=8PKcF|ppmcC_wFoMKza^>fs33+n(=EupqxygR!sWl`MQEdr^&JfpC0Tt(wG`7+Oe1q% zK1%An%JtAjo%Ei1g{yc*ye;JoD0Ui(ogu}FCB;%D#SDzSL~poTGwCckDfC+Xuy{R> zX~oEtv!0l7G`JqCZB0EkE|tf6`0G7?{_duPSZ@(MQp^3bPIyT2+bO-|$5UbCRfK=q zzGDUoHRR7RTThXeF~2+QJ@P8~Xwu0)keZSk4Sc07UOSI0!$t-x)2O$*BctBwCO#N8 z>2)z0R*WYp8pdAdn&ag`fX%LnfUR6C{7lZ}4k=4Kyb``I&=Z?FH1mmhN?5$%3Qx1qt!; z>ojAwJx=e~{OC5FUgsT*`E?P0kU1`?Z(GYo=(?K!%B`;U4E^XWX?-RP5mNh%77^0> zj7GZEx%CVw>}~x6wE(Dc4^%hlq&GH!kCG&F>wLLkdMij zF;VBx&)!kf|CFr%DOvwhT>pQgXg~4Z_N22>M=l?Q;~DiZOd#~W*5Ox(#RY9t^J#PK ziC%uvfhEd_nL;-o1@Npv-RFDX-s}C z>P-FS9`EH^YY+3jccdFRG%BC=uIknGVZ=VyF!$D!L5MYn)o1H5@P2ZpIuhAJ809irDI>**W+m>*skq+80}canN%k6aY$QJ&!a`pBP! zBcBOTZyfnh*lP0iVrt~?F_`Vri*Ns)Mx*U3^d6(v=&cUhN((l6vPRbjuhtte0Y!aI zPCX~jNZU_SMP%#6_Hz2-sXjY$c-EM4o@Na?u#%tje#+^><(q#VP8mmsj;iv#bif5X zeFab*O|UKw!QI_m0|X}!+=9D%aCa6B65L$_1a}DT?hxGF{on_9{O{hnRb5-X-MzKD zy|Ys@-}H17<+RLRXCpjCpU^$4^nKnLU)iIW(GqaDB+SmcUgLafpl8OuLlRm%sBZgL zIc50JY_I>;+L?d4a^z_9%?^Yw&%VBR&9!xdQQR25FeGy+Pbv)O7Ca^Rm7j>mMXY<7 z{YmiOw_`!Ic?GH|!Q+@Xog5e-mpw3-{sJoq?IVT<;fs8q#vIY_m18}^Y?~51i`fyA z&+Xl*gJWz-Vq-d$592y`$4sq1H=^2q1kCb287_6sP;}I+7nU2k8Pm&EXAyGUq&n%L zJ8btR_bKVQid#50`1XfSCO1Zt5b~#hgh8SV&5C(kVqkMcstViTf8Uq@sW7oF<}Kc) z$xOGPG);l2yF5jFP{@mh(L0!$=7<%H--@((&iK2{+|@|(o!qSPYBxBivGF!s^VDne zeJB6ko3*;eQUA+&In*y12UgJ8|hncrJ#XmG-e6dziRqr5&65mCiJpL@o1T!QD8Z)F^g-7r<^~h)?wD87H29Fx4AaOb$zD<`5Mw<^TE;hlZvayDK+O6c4*IREM$lPrp%>JvZr2oV6P6z ztn-Okwui~wwJtxav84S2vCZ*^Zln8wtX&Tsj>~}nlwB`*yTj%??U{9qMz5KlD|6yD z-CDY&gC|23_oO~r{6kG7r*C40n7efIh<>qXGKUR)UaBlzSvV6a1509?nU^LTS0p6j zhRoBqgY9q9{R;!ecXQ8 zk3aI#97T6Y<-8gP9*kYd(ejSZ@1$rR^4Nt36@`l$79ba8VK?3lCXMAVbaGg&fF1w% z;ysWR?k7sWg3DXvW_fA!FQ=EcCTdMw&kwZDix;neUbGl57oQuCHQBC~T8YB;rDHh$ za&(uYC4Qh|8PC4>QrP=}fq^RmF>%;$Y}u?%(=OOUVII;g|d03@M5*u2V}G9L+k!ydJPq zlz8r&F$jLI>m=H%Y@SuHEtY~Mh?#A@SWN+uk00AdK8w+Icr9ZQxg5EUUl!ax$Am!)N?+kd-<)3-~_zaO??XsK1_6*GOcoeOwjRni(Qy=$f- zkh~N%?#%1osA~lI`L0S*U(Pe@~wq{Z>R{;ABIBjHb%gl6~T9Ci`X z5ELNLcsD{m;CyjY7MOQ(n*rCli%n=MJs~VVb(~j9-8ha~()Mz&tqaNtkJMl0&(}4* zfBh*kj=|KC9^M(o1oC?)S@Bk7bMUq;I+O%9nd1BAP+M)eCd&00{!|sKIb~hS_{Ym1 zy}2Yxwg;9Lx2uSTqQD=?P3rbgs&>KX=jEsOzygXJhQK*|{b^ZAcr}2Q zD&TV)fX{u_aDi}HD?nd&usvT*lDG-v=3Y+V6c}K+9H%<+NWHV3H=~hoP7Cy2Mzz;a ziM2D;No1+{h^hLha2=XHr11gEdGr3C52;Ot&;>Y3=CIUPi>|X2yzLZAzNDbCqO>%o zZr+i4rEQRODjLSiQyE9505AB8FL1RrQ@@pP>Mg@GjZ!dG^UcSrQ;*w9^v?mDcn@?T zA@(=MnK3GjW`mKd^@^fTnWX+R+lH{~Ox5Tj#k^*hL;Vk*CnAQDted9=T+lcr_+MC0 z#>FoMty5VaT{OmACT@OH$YbJ9?fBJ$dUls({6~3sPP9C{$ud$sf&A(tCT6FasxNYBxaX%3{DYF6#4(0iWEajcr8rCg!=2BoixhfJR(b!Dmpz z6>RIw(Tu5d2k~t^uDnt6BdR2Q7};;}hhhYC*!hVm>hKwAr1}F-l-GqQhx5$YEY+j7 z)WLJ_Iau@GB?3X~4&uJ~4)2-1ws?$XrDtUI+hI^ucjl5X!pK)phF(AsF_ADdkmxYW z9tc{g4>tW>0$^L8rfsC!a9a}F8Zd6W6MX+H2~G=xMzc(^Od&vzqq=(@a>n@v?S@y)-iPNl|q zkY<#WWt6QpWCoefIJm}mdON*Lk7A_{vY)-Byi}2ib8-EM>f+1-cZPxe`=;~Wjibn*vBY-Di@Yt?)%nZ&rF052+1}OW3;15? zZoQCqw7~y}4RK>x1+$zy7%jGYVBk_85zQ8M{K`nw@w;|FM&-UFF2rh`?Bx6M4Ro&W z6!?vVyftbkBNK?Q5}`x%-L$v2)Kry%cvYOvh3W86rZWM^Cz1M(Q@#*6v$=A2J)D0R zzj&&GzI=Le4|mNdm~T$R$E50x8zhkSch3Xslk1G_8;aU~G-k{v?nv;izEhrql~r-# zpG@dq;im@@YZEQ2=xxz|>+iPwPb+NkjvEhiq0%DZ_<*^h#fVaz+F#+^zxqMdMmzVp zNO^22XJ6i03wFl7ZAya_6)#Uu94KFPj<#ErJV9F};r>h5YkSg;imlbf$9%)0blEO3C<5hqF0z?_5Nh;~4;&fX(?vAhaVM_c5b zR{H5K)L&>0f?3BTUH|vXiZ=FwI%ruiLuQ^US_)XD=a;!$bdv&EuBDP?(HhQ9LAU#5 z_!7X9xVK~chEBQB7dGGvlNmi|_L}>Bq-2p`%Rjz+Cr&CPI-|e^9myeWSN+_eVvfpa zfrY~*!}@c@P~WP=K-A25hMedN)(%E>>BO07r5YJZ3yFTqDU=pk0C$GgdB68w)W3IM z{Z4>@VjgtOfPPL<&|xVV1>d1R5eT9Nd3*!1j?Sr$r#$8-^89C3)%*H#s!j-0M4Vtp zm!bI-6AH=T`94|xe6i8hrDBx;#qtsXR~PS%Fezl|;AZ8!0saJc`a^mB8o2F&p0cETB-H1kXN0B(N}Ml{?&mw!JzFCjMBv$3f4 zXOIK+0;);2yLbQN!GvA%&`^mmfOs@|z9mQ1$qwo3R|4J@SgGz53AuqQ_>5`3%8-1Y z_UJD9+Anvn_XRSA(&VW`74rFhYu3iK^jb%6#ra1_=j?H9YDNwBRipUDh-2g+?;M&V zScU1)0LWAv4Vjs$ZEvvQ4p;2t|DuK=muldfDOs7C!QjDRF%_xH;8C3ftje_@#gg;J zJChx@$a)2-8PF}~BV4q?2es5x#nMYcwML;katdO+oMZuuh-}KgZOY=CJl^$1RB2DN zsII7tkc{9X0|brUzLAs=wCfLf2i$fuY)NcsZ+$YNyTT`jq7fyHLmh{LNq_&|9@7Y6 z*X^}MIgJ+8B{6gXa{%!R2nd4^_>S@qQVHTE&>|1#3z{AbT;Q;-+nIMBrSeb;)bU5o z9SDT(E&XYNFKA#W^Nw&wwi+x)Xr_Rt?rhP|S9jTY@Eg!Nf#Tiu-K<7P-yyM~VMY1b zk15P1@*d4=S{1CyPtl(pyy5LBqo=}Y#*x}Qpo1me2`$)Hx08t`G{3SFnR}B_D z^a3;qZ@ym0ZQ!w}U>-bN9DrdJ{MPn81_2w|tJ}95K_12gQfN9i&s2DeWD8~*`3%+_ zQWt{vdmQ=va$?kcJF*}o7}*oC8}7Fx+BayWA6gS`5JI{4pGB2sjHeVfRqI*)q|S>{ z)F7mxj>8jwJTBW60Og2a1-TM{`kz-q)_?NDAO~Qiq4nnr9S8ac$LK?>1mb?U6Hk<+ zhLj#!1L9-v%oZs*DLxwemg?{c%t}CNAnk{%i9WROq)@n!^AQPbzKPSq5RjcR5EgN0 zbTW&P=&gbBMr<`?>`={6@uDKn-LP85$HXx8fKgPiqBV6K2XKGaj$j znnuBhVY;EwsD#z1R+Fo7k8DnA%9yiVGT6ImK)-mJ)iqqhqopVbQ=6wPc~9B@XZ`HH zs}@NCK+#93v&g^BV}mm_HDZ_+!9KCSV_ZCMkJA%>sQ07Nwd$~4ThXIbT@hF3j5+%# zKyMa$$>%%M8KgUOTR^rb3OST}9x^=?XP}u8q7lSSfR^ZoYi1p`rM722VkfZ{Ay!V@un5Nlqm&{4EXUA)QZ66}4g_mtPe%KKJQ%}P5H{0*dv;{oO4!8z?dc!PU31OVHF!my+-teK13Nh{Q7QQw+#lCwodG_M7PB$AWZqn#{ThWCmQ%)jP`RmVi55HL ztu}jLAoFWUo${RUKy80;G(?I4f}hR`5Ozy)vwurJ5wLMnG&PI+pL~w4u_=?Zg7?O7 zm^*^$n>%u#jqdhG@e<{_`7!&oa1kNflso7O>!(xJr4 zs^q5w4@DUtT?sczR7K1MnMtXN^btZ4rlB*t=THe)^1^mQB`YPRVGUuAfneXCzFfy3 z7A#aN(cn|qzXxKSfk(;)FA$^Td}yL*)1(0gP=n}P(+Fp+;~@;L*;Rp^Tne429V?Kx zmR9f`_%3gh(LzpnIHIdie3H}my==y6w4OfkRbQ9kTg}>7#Uy#b^UyECfp)plPaX1f z*nMcFd6yvu=YRwOS@4@FaO}<4OBnD(y_tr=1JxnQXqF2PAbEP^S12CMzF0;~-Q`yt z!v32#-2XBWn1?5=nPd*(HzA{E6MA0#^}@#goyjc@@r<8sS&kfNAYcDP{0MQZ_&ZQ7 zX_YnAFU~edxPzLkbIaYA@z_YzEBbFIlAB4tn`Z0YZbn}m^x2ONM=fXMi*oIfEDvKw5$&{^$@5L?3agpe@K}c9(nLT|+dj1?3*>K!yU3IDFwBR$DvF;sG4NWZEzE9jdHbYVs5xFE2D)8(j)d+sq z7`;s+jK)&=w#TRjP+2>-Xe3D5d)X)LVI+r(5G{HWRNZXjdJFtjLz;D;l;GR%$ zyKhRfU1_)9KV^-XnNy`_J8zrmBqt)&3nQGj@Vt~``8_+VMIb8N>UExK$R zTY={ra$$}T<}}_!3^mx#w;lZ7o-BDktpdXFX7)%7g&aSo>hLVY1|O&iGUEJI zuxTfPna4!XEU2n^P4@)9KtBz93%j1oy2yn`8Qu(SH;Iamw%)WOje?8C0KtpqW}M{0 zzqn1q*Ad+4Yxmr4!RonCY|4XZtx0XA3sRuplYP8G0+A|u;r-Hfj9P(SBz}cnmFSmKwXMvX z;>lryoK(KUn9zC)PyBuSi*+Lwj_*-VbA41NqyO$$!zPqzbk6Rrd8GJEA+2p1-7>U3 z>0ka~Yz_8yx#G^boYHX#3!7?Y9TH=pS~smv<>=E|(bahxXPGED#-}OsI^Hj^nFKl> zWHa{o$r_i>Q+zDtxd<`kYI~Z)n=sqB2jVijrp?m0C(=v;bVsv@%8MX zDVGkZ=#qSHvg`~w>wOqm{87n4 zZFXV{@G6)50~k_0)?Bh%H4qahHkYo@W~@)D*x)c$)|LG`ZqjKX_1aJ>B=*M+a zY;;=DGl}|LQoG}=JJ1h-$H7+oI*DaZ}g51>bXLFWe zgTGcziuN0rx509^NGUk1hP5~OVZSsg4ODFz7+C64sw-{EeNrE3J- zjCGB`jBGz*IYnPyl0$RyUzUq#xJ>A~qo$O|`{+5!3HS1%(I50~{L@z7CNaogs~E+T zhxVOYod$lCeopEO0AxQy4U0A;%*iADW3$%VQxnfHL_sqvT;0!u_@i~+m_rYmH|}Cm6b5L6?RxvyXO#*?qN8&({ocrm!nPR>P4{R?sG%$JW(*EwELQ ziy0e*ywX)8qUH{R>31TZy-o5ED`D3DPZba$BXSO9cJb_z5m2u?h8*#bva;?$G%6IM za-mvPGEj{zNzq)Q7IOVK#AdN_-h!KHCa^4&edhi}B6xlqR8h&U*1}w*alv|0a!(!x z`+VAo4xp^sCo?)&2ktr4Ldgn{6fIb9u9HRDOELyi$NRrQjqaV!B_6j98Ta556o`e+ z?<6$Pw7ygu0lRRST)#KKzV(v(<(Okt-Mop9dZb!i8wa>TxNTiQe`xtAW+w2}-v~?k zA~DVkz90sErN#=|-{ciovM(7s*>XGo);iw0p+P9h^fIh-F4pz+7sV9Jy<$O&NJuf} z#3bzvM!HT9RX(WjMZ$uyJ{&hLHnB{wVXm!m^H!_;4?zBdL2h3WRh&IhZDrbh=IBpn zX^RhW4x{rH+!$b-8iq2sT)1N7mbZ|F+G>aJ<71+oys%?%O3_JLm+Si(; z^?|oZP+EB=>aZX9=$5W(?=$0}g!0&%5AKchy$#312^IW;xofbVThdEiZCOB>BgRGd zB#!-(1rQP6Dp!r06#Qrv;+$oUpU8i;FiBVZ1KC8pfH1Pnza5cU^ptR5V&hgiPopqk zt5a0j`j3S(G59AZ*YSjd3M&uG1lPV1>Qs_Nm%Po@9kY)*?tum(M>L+!87ZkDI=WIJ zL#}7D^3$cgXEghQxm@Dg5T~ha$SO2w z_u;hm@aD?rlZV{HB?)O8$qWYw4e3+h@n8+dQgfz!vE%djXHG7<&(xWk-;S1FC3l@& zU~mcGT5-BT12_YZ>>B4~gHmXSxIG}yvx3kYeZ*ZX=aJc84Dt8L=9{XV1Nt$K<&SO& z4OqOrBzqQmneOV}7U}bN9Fs&bICjV!HDn)H2oRa@03+=I%v(w?B=6V;eVar9ve_Eo zO?ybf_f3yim_~@`_y1I2mMxJN5AK&^He4XEwA*HL*=+e@3*^zb=-^=$^V8w*N0YEd zo88NtiJMVHaHS*KyUay4y*R>B&}vKASZEL~wu!={IvxW;x+M zZJbhPUBtB)Fq@?eOj+x`0G`z2;^uc7ht; zx1BUcyv8ccQOmRFucT}BN`fu-eDP@%fGE~&HC*822pA0 zr}8loVAUc?m74z)s12sCt#At}9zDijDi#iE?2?H2SmV~p;MmWg0JbtHwldaRHf|71 zS!3r}_)92PNAxaAi*S~brrlCk*@-;_5w&>b{r>%^)g?Bs=sni@MM+}gRM~5N=w+iE zZbjeIiY{QUv&p}31D=(tTzijX4}~iCu8J&)gwV~Gn};KEpjRiVFmEc0EZygUPYo0b z51u`(L_IAeEzjPg2fRpm2_cBff7AFNujOnDmS=936D#Vj;Z9;Fg+>1y$aNRxQ^XNf zjaUy@#fTgH*@%5ECez1ePTE|=_??wHuTm$-wP^)K9rwjsE`9ENis=rfNO_xQwkMF~ z_n2x>bZ&0fzX)2BxF55*mL3`@OU!}heTVKgqOJYb&6V&G3BX_sDiKntfz=$Gl1VuS zj!&(WoqOg$&*{eThLQfSezhUV{&Lb!qfAc1P^&>l=u#+HFKR`?cJ}rZIxu3t7fmjS z9JOUuh31du6=QwuL~|+|#2WZ(f+aKKZ<&v->={ef?A($x9`}cj$@!c~iLDuswis$x zXw1zki&X?bLjd#*+4WG^%cdmou38m(&qkB`9D`{XhAWwx+%REB5>wc?EGt`qD+R&U z$U=h}T6=k87>osWDrLKVX1om#Jh=9kN@i>|7CE2)t}knV1BZ*mxIrkYXdG8`&;; zV30QzLb!FF)uvOjthq%X8=bTu5!4%A!LTqptnYL7Pt4k2F|6J`hB`>t$L?So;T^kC z^-Alr7`{Ofl(($?FzxmH8-CX%wJlze81{7b1r14y3k|R4^-{)}Xx|a9x1#8{;%6Aa z_+%e3pwZvwn-a`Emo%8*mDYplnbv3Gl{VG8kvQ4~s?yNXiktF9xJ_X;cNj57Lc7(% z5_9>=zZyNAlsnaQ&7K`0IBq;3sMqW4nbs2}IBo_tqvMD2dVm#2s{>HeOvlPq8OB7E``QkT; zUr~3_S%dW;w}U`M@|$1pQikwD(Y|)MsB|i!3QQ^cS=2S7Td*039;$@4hdD1f@!1N~ zU0){GKw=2)oK}U~c-fZSpwBTJme(6}2}gh(^zl(VRe&E?=Jzb_!kegD zbKM-MUS?5O|7n{!ufUWM{ZrmXy>#^;fsIR?f1Ncce0I%#Y_Kip7Q6>HKDQJ&i_w8j zF#zWI8@NE$q_Y1;OUv%DtY3joRc&4gG>+G7j9%8J^6L`?+qasQ?xZBMq*yPcN;k7h zm4N09lns_85%W3nc#_78a}B3HWm%8`rQEt7}rlJ`Ok(EjS2Rk$uap5HUB>Xdm%Ks6#UuhCNii|5bI z{(z8lwDH%T&(drx^jgy9nRVK=CG!0$FdyKq1&SWgb~c2cvRhxAzujwn$lrqdM=e6H=J%5Y83bXcUJX;`kB3C4KJ@B!kTg`~m z5pBj6Y9bpUA}psb&+FNK@MsNBYsr`YMS}B@0PYG}^>DMVyO&lqE8v}$$_cG&Fl~b0Tlc+*x~*Yc=ZBQEKbsu!+uLi9#utb)=z9o(KtfTN zGf|H35Ea5Pr({;43Zk%aDDsfbjx33uN>-t2Aubc>&qJ|-je%zAHqImXfbko~q|o*QF-IkayN7oB4+%9F<%vUJFSraL?dHjY z8iqmcrg^NuS$YrLn}gNZj|z5WrZ!AM)gaG}Nt44m5PNSn1OcIlRr`52bF#-oCiQds zPS=7AED^>napBi|>)P3aM~_`M=Tm7J8ACQr3+%K9jywWB+XdDca^RHh>z?6bSt{h>*q zrLiKfH*vpd2GED}H>4cXNw9G$X<2JYiT))RBSGquVQJSn-}qZ?+@-372={S~_qeCM zK@bt|z?_3&e9u^TYDz1i*-ZOu5O}Qz0E<@(+8{4pyJXAVa@{K7bR56Pfbd$v{1dd^ z>xT?GBJ3S4#u+e~^d&$OIqDTPt&2(19C_U4JRTT+z=J`OHOqBHQJ7a*q@FpA#Fh6f zh+D1_ysE&j(9om9iGmk|#B&nTBK*!J?TSkae@vN2_$5ydI$NVSzxm(yG}&FaDx#>_ z)hV&+bJRGw_7^d;;-J{lt47$X>-xGtZy4XQo=vhirAxCJkFR7#tTmsk;Jn+Y2@B9v z8Dh=OfI;r;(MBA7|EGRkj>xkGWpI57(^9hnV>@)=<7H))(Yrpv_OC9b8$&GwL(qWH z`v6t8BS%`8eqfj|C=2EF%Nb!)omjDfwzAbfKhHb^d3so&Y>vjGqwEUC%1L~+!?gR z^RLfF4@dq~IgU7fCt_x)ffr%{wzK<~v(Kb57Gkl6v@>Om<~y5Q`s*d7LOsIVRQmsR z9|C)as=B3eZ}V1{cNY_LAZ?T8UPO8Xp=+kt!yrdQxgF7uAVD2zg#mH_S9}N7TkO-2 zfF4wnUtkOR7vwWArVE23@evHGKGf7^H?$eFx#$lvTZpp2^=?S=GtNQyJOWRoBiMo$ z4!V!u#4C^N&kLfLD3Z||;VEh!YWNG>DMB~0D-^Wo8pHyu=u&eW$~dh1M}$0REkKbS ziZ9AvU7OCij&M_Ti{$kSSN?3YNiaF2I-9v**E+ucC)bi`bPP^DV& zY7?pQ3OQGV+$)J161d;dqLX-UoVrrA!MBrY&4oL^j0DQW%@}=W7=0s2W*FV^EoAK! z5w=esDgRD9$B{zpunXh(9>C|$P3wzwTX51zx2Fwza7@ctpf)T4Zy9lb-y9m^5CpryhxhcL` zm;g1EBhrTuIIlhY3}E@tE_-a<<~#V+R$Ymz-pst-@}&$%SY0eNTOsl>dE|J47xfz9 zPtsF)jfa~4eyC9q3FP}dZsn9`>@UOXlf-H>iX2Q zTlvwH41qetTob9fm6ab&|56WsF6@e4X~ji=5Jh27kzpz-Ey`nI`@4Xq*6cR8AisZq zD4YGTMH)~-qTVTdWz${MKN|0(dVJ}lRaIoHx24=7YRJa>3(sTcci350KBaAAM!{tl zS5OQ|4r==XsPcV78fLv*tQGn%3^l5W?ZBHm888i%MV2sRqK&H>KQAn$4{yw_< z2DiC65x+pTOd*&a-1G2)7}u1jD9VHm=ZE++$ebOAfJx=w>R4yb){7>*RD6esM2CVt z!WP|As+y;O>c7i*f}cUJ#^3n)Lc&U~kfWR@a44&3Md1hDY;j(2R_oMlRYAioL8Qx! z-T=KFxq1-_{hgXesCQXgP>!4Cw96q5sDfy~(3tVz(;cJN45L?&tU-mWL6)pRyKK%^ z8nzEorg4ar%~7Ud)24B#k~JukHOQ9TxLV}7b?c>xW<3%vH(swc6|Y)pW=H_rs`{tG*pE%3l7I@N^^W-t`liH5ocC>poWWNh{=Mmck@c1hj<- z{EJk)M+RvrB1AOSE`;Mq2=4-ACK0-Cq{o$@COp7QRYMmsr&24Y8pV^4Kde4Lwa*INph%AqSJ{Hy|G9@`)_^3250)H#(`VSYN=j$lFJ5pi}gTjJpQoocABzr})K5fG>3zfZD7ClqsjG)SbqrI|ci!(@;MY>-SAz2zyJ*dLeJWtADzPtjv<{#c^CvaV zWAh+25wpr}kSvWA$ewz9kx@$8+l~3dw3yuCWkw_yg=%lwTi@f~^`u=&>|gy^r;`q& z(jc{T>iOlh>WJxO5J%MKk+C6qYIM_5kZFD<(2_=k2ma`wEiy_``=?UM4Aa;VS{#S@ zTCzEQ&h6=0DBsPc(eM(PUt19I1YpET3+LvdXL$Tg4ak*=B4wuiGGj^hV;) zJiy3#7@KNGwEF>3dCJ&O1+mhhnQ!N7F#D1^^>Sz5frv2m4u#T<2wmOm;0FmpfWf|$ ze{8n=37LrkJGnOLWta+|1W5^SEDn7&6hrI48NYzCsmfay(Ts6=quXbF|Gjp*@Mp|1 zxYTK%0;Ta+I@(6%mF8FGJNH?YaAeJ@_dI~!(2I=oU1xia;@-KhVfRJxZHYkexQ^H~ zwX0pT1)B_i^~R^W;&dqa_6O4*urRPVrmp@}u_$9>V>9@kzz$5Qzit8z+oLVuYDb!- zuI3)^$z5RUR0N~iT%i3ufAgJ1#;_CEc@M2z=*j}#<^Sfj4A1+3MZ2_S4p$?pz;{JV`Si|Et!U%Ltw4S*BG)rymhN2Bys zCVXCy-%0qX_Q4cB7w}7S>|^&%R={bI%u3Xq&yr;t*A*fw!t3=Aqy5<_urM^TddIc~ zn^%Vf>_F0`$9^?3DXQ=hGZ?Qh!8NkR-18aSXB%=B_Yx{r6fS{EYu>u3Z_)^e(Mc;z z?PQFG>k+Nifa?&%D@g4!aj;{#QF2RPx}5n|-<&2Cp>G_{@4HS+@w%|E`N_f-S=3Eoll&zXRxroGF~>o{!8t&i$P9#X*%Sr2D>RgqE!>mnl$}_qC!e3J(Muc8 zt|w?8e!}k`0iwooUvu~dFJH#8%v#&4$a_)`zA8&6-M#h01t44mzcv*Iq+BZRSWKkX zsOx{Op$~oZd+n(h8`Ud=kzB*k*G|!IQr8D>p4C;JFxH&)0&}nHtS0K35$36W>JQH! z^6HbanlnoO|KvkuRs3VDhh_Eyn`h2dCl_YR`@o~ZgGbx2`uaL^n_hYA<-0|yjXGXm z-7oNe^0o5T7cF-$4L7Mbi&RVX#WeHO7vA;F^P8%ZjJmU%%9ESkw;9&WvMSgy)=P)h zu2uc|GMkaQv97Z6E8aG6c`FZdo6X0q%h$Vv$2|7^yOS+vDN`=t^}MRshHfm|v&Mj2 z4$9O+0t-Za#pAJ3SH4EplKB1p3Op_bmXhSg-xD`Np5vy%9Cpz1B-B!IJH{0cD*3|r z{oY!)_6I((S4DS?y*D~40qSV|4u|j{Jli{4qaaW44c_wAI6#3J0drrGEO3gJ1(Fju z7&Q7QONEZTH&o`$=PJy`ib|##BM+GPHxR+_6f@L_kYQu@e@aS-b2{V;RKbM57o__x zs{?)SxiEB^l_eVCMQl0S={M-)0%@G9e}9Cy&DhvNoWt{nf(4 zA}%L~w83VP^#hR$U}nbuj`$Ci18!vcmpkFVjZHL~Lp(^dAL#wwhZ)`Ny7mm^a0dTG z(+TNSO;b2h)N1mGk=}ZOoSEr|I8#um0-T}f=>m`;ld$laRnZBO62J0&97e|B8w24W zz2JtqhUKcXh;XT)q{lf269Av90=O?9UoIa?um%W##&zt5LLHwr{!bAAOFUdbDrbO5aaG?CpW0VG zX!7m5=>dUUK3wOg04&HaG!XDG-4PJJSP;?>k_a%xEQ2a8HNL^lTe%QmtN_3Q3nKu4 zswZ|Nhd_ma3!b-?V+l0(vg9=7VIy!PhX%~Lqme!10!1|DIK2Y!;~>!h&P4b>_~k7< zU(LEhk^ja)e&Tc-K7k5AA|RHAlQsJ;3a6L09yGoOwG#57O}{pBGQNkiU_#f@kAVEb z4gn9h)eS+69{^o00EueW9r*ucoLk)|CIQgUjz$ou$p6V8=Ewt`|5pi@&ZhxE)Qt~K zJPaYL#SGL(iwbZKVWrp=qv9q6U5KHgqN0DP%wJm4I$CM8nLb^t&abQE{8Ly6{S1EM z`nS4@go2DLT3A>(JwA^7nR6=O0zKm0J?r^Fh4DtIXv?rqv^%tB7!MBGi;MY;*4ax& zIG)hR0yhq_YAD5Vuz$il-Kf_DlKJ>N+lYCWR}%>J0$~yxEfCd2Ekdsv8(Yh76BF?H zq%jm1cXU{A%YA`JHO}iEfeH-hVcb#@Ja_ne%$T#WxY!(|sYzzQZRG9#Nh-)0>DT8P z?cZ!qB92=Ss#K<*a;4#i6QW{bHFMR~1RX_Z)Moy<7Wq>h!>5M0Kq06?{-Gzu*Y6>q zvc?5yX=!n(#!tBL=iefY`tJxVD|VtjO&(h>^vJ19jPUUcJ~9b+Qeznr8IDGQf5yHk z_zzjn1<%b>F{vmNI%&MaR&#(qed{gBplLACBwspFZ?{+&j$>eVP@MdssH3Qes@jv> z6ht&Z_-e)=jXY!3Ajc<%$hUM&({6#g1;-3v6wJW6Xzd`rS;={xoYnb>iwD=%MvA4d zyG6eD1FXCA^GshJnG705UK01WO8Te2J1I`m(8302GBPGVZ?b$P)nKwURsY?T;${l=JB3TU4yVexK(1vqn1cM=F;b zewdt0jgE{EaQ;Qi%t*PB9EXCd{DUBm!t7(T5NA38Co!H5_4&v94frZxhV3TyZs6T; zZD~^QJ}9&WgRB|<);V{o-*a<2naPX#mh$y6U2s}G#wGo1t`Yfy5b@RxtJxkXDFkPs zk6u%|SM@p3h3tT~Qr9EOCJq7HS%!Hm;qvOmpt!^6ye(U&RZ!)Dqa@=iU+liLcC ztb4n5ZI_V-%h#&TNFNa7ybk0uIc=TAV)Z$?GAv9& zg@HXnK32ub8)jCF<~dovELP^zi}@vTC{|3EGzhlL{KfY~qxe_iQbP90&R)TeX&qTJ zZ_~%sa2%zS^>BAH^ePBD_;4mE#BK>tbPc~7f6nln^7pNDp|hP00{Uc4bNrn72jg}Yrk z)x30Qx#i3vX-YBty9-_PjP$1mWh1u~Ve~G6>AR1;)KFMhN>7uLJG{p|*fCzAQ{|ay z8D6-KB5Q{HmkVP_eELMFh!3^_STzdUSvk&i_@wbzRKE{Eg>Gzmpkp?zXwwn&r#TTL zIVUOX)n8#fAM5YAy1eW`m*6&aHqFC=WK04(LP%CT2Ptc zysa#mEbc!4Xk=kdVsM<&@KBr)!#13=T1g9CrwarpF=_~i2i#V5c0CuaI>xk3o2J?b26H~P-?VWx{ZKS+6 zFcYGXy>*P%?f-oA4m zNu@RXyg_4ln()u=b!qZN`-S6s~{#zKK&4H_(iW?~2NWXN7-Xo`wPNRfwC(pMKnHVj( zs(rfKo0u{&G30VcbpL)hidgaJ4w2FihP?glpNXWRTaQvv$2up> z&k#N)AYv+cBTNbs`SDHV_K#qgj$?v&5XcR1E(I_CJ9S)KI!0Wq=%uooGfurC3EJ*J zdY!@|WMQhlq7@!`KphoqfAw{2W_VpT$cEY-TjHA>iD0t0eJJriOCyVPv85fxSk&&w zMf`48NGliP|FtW9&+})QYW61jw&lSR$07!rpElk&>5jpd&MHsY!@cLSFrGfmO!yq& z%QczA%%*Zqmrez8k9928Wf}rFOZiepMIB|3!XpxaEX=yTF+B!f8DvtVpw2e`mRZ&#+K_j4q@k7(T z(IRzYw{{rwzJZFzsdKa=PZggo#&n+w{4?C>E=Qx}fPcPnJObC`Y2aD+5&Pe=Czvj$ z>`Ue<3v(~ituprGeV~SW4e>T4X93z;d?SaYIQ*lM%Bv;o>DGv{H^$RK(65lw+{%}o$?p#+k}Y% zKmUx|Cdcp&>UztbA@a}NO@{~VEszoBvJlXY^lEalGsL1v=G6VzokQ`v8#F5)Qf*g9 zJTTdF7aBr)8TQC|U4hZ(b-@D4cL~(W?CZd;N^@mw+fVCJx%D|>aP-;puEj(z4J1~OROpM}5avw2SrdHZgPwzdmfk&~2)pMSO4Zm+``@dw?-0=Y$h&bT z>cz80!KNaC&!E4b7lGTTq405UPVvt~gNcyz<1JrZhp(Np?SpMM+6|$je}TqAs1S3p zSDzx}>Mr1*@oA;K8DmlUD0Euxc%juUT$C^-ub016gZ+I*I803N;#6$uOhDo6#bem4 z6LC_|RU~y!9m0>NS&+2N-E2ty;FDYL#3_BP^G^GDety1?j%^9VI+oMw*IBekJ|RjQ zFX+mtv6C=eKxLK-eQ83#q%Rjqzz*7(7#v2Cd(c2#V9D1KZ<7I>jzcvK=^ z6cAu{$1YV5#b#&73H@=3* z?JPvJZa-L$vo6XW>m~};Vzz2i-c}W;ohPE;og?Dol;?+I_8pA9yrBBxl#JF3)mI4W z1Bwd>fD8x#>J1kjaXs>^mRCslnTfXoR33!SI^QEgA`6kWs{U(2=tso^GvZ=+E{BN$sc*u4r>Q zJtGK9HZyH>K&NJGIQMfbsQb0N%Kk6(EgoT+lrEySsibzg|F%NgDPIhTfv-)gvNEa8 z4U>O8d$am+-HEf&1hzFMj)br`7+#nkidqtaPFCQfo_jA3e~o>mTrZ=|mY6+#RPQ_Z zBNa_?fKT}@O4ZLgM4;9W#?E;lag8sM>~VK8VkjAf4P0FB$Juwjg%>1nq`%(I@ZJRN zF{dubpN_BTrG|mF%M{3iEm&pop!L{@JL70X14MiMZ!Z;Zsxl!30~pc z{b4XCIVh!`i}7=BlMdNyYUm@SynuiDkkBRWpG7hYe{=7-^k>32V4doL@1Wqv+j^ZX zEf2^#=CbeH$mdqiZ;@fv)U_~-J`;qhG~(ce2XpI+kr>=^&@2C=2~hakp>WS=$)P8+ zCwDCr5_3*U{7?^lQ@6!hDomx~hjdic=vLs)V=rvTClixP_d&7%mTTM zeImUf)C5KBd79<0JJ(^WMQ(C^XFb~^Mw0;IrRblsI;8+)#KyTwjY-w)&{^82ykq!V^#Dkvs{GZdN%3~e^{ya zA26ib znt5f_l=(y84&r81R^HWm`-p*oS}!Cn_scwL^I12_Iy-#gVVdvZc@rKLG9(@Oy%`ek z3HxHm2Z=@9V5mmipH{L19m)Z1f5=8fjO3d`Pp@6Nhq#}o3&rB1yw2TD)6}NNt##{c z(YH$0Pu7C@x1~%)3*6d`%uEg0JyU#fw^@^VSE4>V`79qP7lo(fq9T?VcSsp2$$;5`-=AWynzmfA^fm-uoDtL#4pLy z+f)6rPz{OZ*OkL7z|qN6hj+E^;X3To>AAD-3ifTQ}x1D&*ZvSY}uwzDtmZi1~gZ7I5#>!Q|6n1lh8uaq;H3Vf2<&Bogoy2#+njt z_C(Unq-tYRT0~T{?|b=nmPlFf*^Q&$PA!ZIzcbf}mX^rQsx%UdEYz%g$SzNG{V=?d zhETtuJ#kvHm~M~DlAXx{L;A>dyaV@p=rK_cPnL-PSn!Fcrg&jO>kQJTf8WhaNR@c4 z^t6rNl`-VpqW4?4fADs41ztkk0IH0IX=~7M%}$sP`w-f$BCV#-pv|Dm+K06V+{BV~ zA?bFcB_I3|+i3(wj)cm2MBjP4=$$?~a8ruoF#D_FUTNb~WovlkZ9Q$Zgriz~CXcN@ zp(j(p&$ zFv08!Xs}{c(3WRU-aJDe&GBdW?&}L z-0H{uCPj2)e}8F}-bQ@!s9zEPY-M;`xn@3la7u&{!tpU@CBBoelfLIhDf3N-1`e?+=|f@XYV$y8?Ueb2_uLVw)%ujk_a$1zo=1 zRk|u~&3&5B5qotE^u0GzW8>882So`@(m{*fS|KXUAmm}F=a(pB)RI)1~c~_TApOr_)h;w*MWa2`O zmirYbzSiM=H2ML8n00W%PT+Dbmx6adUdza-I zZLRY)fAB0rja7yuRPq+=k%l$wmFsg6B{*-NdGah6e#QeD|LEVvLA$Xj$e4Iyf9aak zF_=&Ieid~S2wSH)&mK=HxGKgre{Qr6kzH}6!U8^Hj)o7M4gFl(fonhBLO|R<7%f)+T973IgM*?wIN}h zf7hp_bJ$BX;TEdv*G`0`lE}GXUt?h%yzoby+Yzn0{0C~nijRwKsVcfbYcZesEEKB! zehl_r3RYn73o)=k4R%K}d*sQ6wfkzuEal?gNBI=(<>ez<>L_2vG)$g)ST5Mp!SHFU zN8j~5a*)4rEd2rmAGH5|rGdn_KSViJf0(NnAfFBy`x07_q^5Bk?)0xjM%wQ88i?A4 zyBuEL$>wpSG4U~&g+=m5ehU{dJk5SXKh#dlWq$K3Lz3@IKn(aj?!~Hp>=utt5)lBnzf8l&l zBe~!52+eb&|5vtBDVR{Wr*O>IQIUnlUgU6~rUd@$1j^s3ue^*txc8K-g;kyd@wx7e zPKGcin$ofES;*8etg1fG;#wh23?f;`VrMPp<{q-uhysT*T)+U@`|%_JH^5apn|`bz zqVjs!2TL3emkk#_<4)3by!`x5f0*&$7t8f}QL~SB&r>e=)?4@=CO}BDOt{q>Z|;N_ z*6)8T&iW2a(9P30OVChx>Fu&y%~ua^N;)D&Y~&#)F%myq11t@!^w|_VoK8><-je1S z!QQ^vMYEJCoiAFKux9b2V8jK4aZ>hWNXX#!>|FY1g{%R6w}Wv9w+8U^e<22|NEH`# z$TcBX&x`P_XnK?G3urMJaRWli-h&_5nC0cfPl~4^i?rw|azWMB33K z_}apM;sWb^wHn=NwYTC!e**U^QF6wc5hLpmo{%&W|LT}4f_Pjx3EsL_4A$v^XpJA~ zo`VMZtd4Ez8Z7te-nmf7SI!M(M#)VBTiq6{W*U_&?U7gH;n-Gr0^QDa4ac{)of5l=0Ir!o0%6t3q7q zW-#KAtVLR%*xK;!)40WjSR~PIoA2jSsyzEUoU!E_>O;)sp|&wXaYQCm9%+VOu=$8U zx2jOf&CKB^*A3c5f1YUD{^Q<>;*DNmkimTK(TIm0uz1LAM@#_l`;o%B2 zVI#UfS!5_VPH`F>Ypb)<43xDvBp(?^I$h%1RqQ(5tu;B}@5xnLbsby7`0npM@S#WH zqPv_9BYNplH_wUm?d>aL%zoz@Dt#7EjgdQP_Te?auz;&qzCB?j<&VzAc6 z(C4kTatpqj{2YCoKHET3*JUVu+v&FEnGK%v)mxJ>Y|}mQ?=u9$UkB{lsU0|xRwb%=2u{A9(&R@h zy6AhG>%A0YfA==w=aF@Cn3;`+&?yc-bSNnRE>cTqY?9yQEn1bxVM4TY$o{S z{&>VzxU6*i)*}-R4Mdhj+xLfF$Jo09-z7cu)*Nra-Mx@%G*sjnV96I7$sRh&81nZvjh~+IHSRJjC-?=XQUesfg54eUPnVQz+U2BT`t|xa<$&zrW52q5 z96sEnRMh5tZ0&2!vPvP+)`&jW!J^+5)4=sd^3{m%qOb*Nq95E9@hV>JD(>lZ{$$MS zs3MSnMEVwYd(3+jEJlYE)Sfo; zEOFQ>N9=0NI)sJYZ;P6l=5NTL^2p;Iq+%fjnbt#r{k|`@oZH!s*L0O7T1`@lr+uIC zQ)N3F3)njaqF*6X2XVK->T1tHG16t9;l*4L$m9&A_ogk^NxE+I=ktfQO&a6Te^&Y8 zDMuZJsdmpC_mpH5I23ei)z>;b(FOh6XNunC`v$k;;{Bwru5g>8c@MGkesHwpd)q0| zAE&m;AGs-X;4*$l4iC=uKt$`0_fCbC5QFq=>|4{-(cuP|E)sEBw-_VX< ziv_{dh@ynm8l~xpH{qN|G+uP>6F5mjnvh zFWJ>}1byXo3D|MZ2$pf=aO+jI5+lLT=PfZ=#+Wl({O@y}E&51VgPuLV9uoarN#9l{ zMslC}<3$ML3+kJvpAP0$wVj2w#R0d>pNsbv+d~pZtMAtSnw;}6gIgS3+luhi$0=$^ zhhjq@wRpy=XP`?bi+GwqKeu3!&W` zBpnmxOK#7lJ=j{KavWKg$l)k}kGmQX2bt?$+VD&JRtzk~LUi53 zE9>7Gd-v>s?c~}})^7CEx6&PMtOiFu8SSWGS;qLBe+Vnx`}+BlJ*MLK zU-DTL&hqSjBs3@=M#W}V1b>ZUyVqCLDk7{3iak#ROK6jcotT7-`1BFkvpx$xh zBcUNxHsyG$#O`5Bc<@VU-WG4mSu7Hr)nCqtpTYT~UeyTes)#7vW574yITp6TQux=P z$I*@<;d5DR-q76Me~u5fm37XQAz^KS?pbU-4-;p*ZB02@XDm zti$9L)>Xzpe-gT%6i6m+2n;cr=vz~i0EzS$?s6GFdjCck6fe83eV)J0(0wqKILt3I zp(qo9NuJ*DG|ga&?z(%y{>6k|Q$^z&!2#+CyHUQK`$Oz1+?_Q-7T<-Z#ZZ*{Iv(l7 z_V94UUr&${KwkZogkT6G65*em5hEB(4~U~0Oki%VNU{=k;HnJuaiHHNsNm`*kF}Vj z>(?E{QZ6qve6sXkJ9gk!EtwY$r`F)K$A%+>2U1ne>BNzpKb~p!xO{m?N^Ws@LaXBc z0Jk5!0aDrp7Z}WaJhyh10=^!9HUeq8cS82})|>_0P~9)AKXoJb;uue}^{+qY(=!$0z##Qa}AZ-Lic7@KD@5l=em7%p}R@x5X{K`!#1Vs|D!?)Y70BvXa+ zxwz-6D7znzU{12>OrOD?DF-oogPw^8LXl8|UF`BlGSO&Y^vZUMhUd$Fg&+f(3NS|5 zCE?df8O~xjk&<`z^s7WNxFcnrhl1Z-oVqoV+YYPL{>Ew}$ms&PM7}>HGy5{VRUspF z3P@*#Id$)m-`4a+-MCXSktT$@k_vkCzqflRw?}0#r)(bG!hAAvRVtsW=Lqd}DRYu_ z1XHP!nUfyL#B^9uzkR!Z0$w-!&aCGuXA1Wl0>|ENt%JyWzdoJ%GF6d3V+v1aW~b=r zX^$+v+huEqmDyh%-D4~~&0=c25p}U!!O__o?9%jQDn0RS=s%W?w}8PZZ`c~2$4J7; z_}|M2-U{q*QKXFjbWmGdpjPB^X9YGk`B*pC8>692|2UcPtA@#cFE)abfh&oim&$Q@=(rkx{owAr#D1xDnhL!{XFs5o+#M>ZZ|KEXK^Fj6%`m%nY+d z8<>}CR#^Bs0yBn`Ox|Swjq2nJT>{Gc;cuD9Y5E(@aK-b(AsJl9pxG28u(e zKz2EqlTZIG2py<@YwRr&X{@<<7HgE*l=YI#xplD8Vl?FCrdbQQ&u}N#n3D%W8Ixmk z)AG|Yj44Ko{h{!2zsa!F3UUuI<{L9a8RS(PNFJx<8Y7Z3)68iWYp&j!l^ZC^ON%fV zj1~~gq|dMz19h5S&%trX(d+qwXnHw`t?6agpZ%O{%r=^TlZ|Erua^CeHG=b!gAebw zDDoH}Mb^S>qc*T0%}h%IMP_{_e2C^v7#g2uPR=T@g!awK%*--}^vyC`bF(rmfuelg ziSkg2{0kIi=VlR|vvMPH4XJ5XqrsY&3s{pCa(I@Pl#yl_Y%Cm+m2M=9WJ+0*Tq>4I z4F;1q*%T;$%Fvrr^7JXNpgS>FZ7J=Rs9!V3ea;3N@O`%4nwFH7L3I4vFmakrqLo4M z(&)3ZL2y0s7kkG`W68_T&dLQp4UH2;C2IqxicRt`xgks*qM(f85UGS#hJbcSAqqN~ zGRc#vWPO<8HKLSY<#WM|5=tzV%ECg#GO0X7N*iQ=C(Mie>sZ=TsNzy9~ zA<1%OvQ#hC%Z>EQtEn(jrZBx&5|U&}qCqmFA_U}=g-8{qWErIw%k;|UNCvS{%O{#% zPTpgG?=b~MRmXkY{Q@?u9iwluZdx(SrgI;mbQN1J-CF>RM zyf~0oGC4afqClT()IoY0AtL#Yyx8?|<`k$;T1OJ-Vk079L`KC77)}0IaVGhjMJk$_ zMlGj4qE1m>;sCKmJWjkz+(@FAWJ#t;N+fH4CErO-NzO^GNS;YL(!J<@bPSzDzedlb z*U+EShv_qP6X{l|i!4BvFY7JeAh#+!m6Me7lr2>Ws)edjRfu|;y0fN-My2uB>U1-7 zCv}%}&vd5nyzmF%m1B9Uu#hlY*om-zM`2$pZYgFeMXD~Uvnn@rAN5l84)reeUiE(U zYRx&#K5e{ig057zO}9h0OV>GE5xz8>{X;eK|7@PPBQji2@vZID*1Rcm`|`)i}MY1*lO+ET5b zu0PF6_stu|Gs$;6tsy|hizWk{D>XDjpnrw|#^QC5=rioU6rws_#hi8Sq7CtxpkMJwux5C-~Of(zbvc>DfS0oZT zkCsUjq^qQ7q!rSBvLUiO*%sLjS+v|DKQ8wPn-{h)Y)RPiu&S_oVArQ%BNU?*;}jDW zhZQNxTS{M5Csl-M07Ox$szCLb>V)dCYN&d;=B#$AZe;kl@b!crFdImJ&QZYc8}VUr ziDbUyv_vL7C9Rfb$g*Wt@Z~Ytud?4{<+5MHJQeK~!3v2&qZq8%srW+~q@uK!wV~lF z!pYyO&I6no)GTT~wV1L|tEmsEPpHk*_taymxp<&BTD)I;LF_K^k-Q=qBxyoZbSzl) zOL{lmMmk6OzVu`1Iq4ODsZKUTeo*co)-FsG796%N?5nUY3Q93vaYlJwS*d)ej8VM~ z)~;4PQFTxo)amL4>QUg&+uF;zzjS%w3&WR(9}Pzf5%ft2eMa>c$BM^_lf`E7Wbq8~ zJn=H|8u6#%ZJ_Bv@z3IN@ilR!_@Q_vczHWS^C`)7i4t;i61_-&x>@ES-yG(l*sOF@ z4OER*O@J)itq#zMb-i^%b;-JEx@EeLbiiZ{V*YOO40Q*NDow?~;&5@e#7|lxT`B!h zS|e{0rVbkwHaTo@7*e!R3{)5t#gKFR6lWEc5HH^9G3qpRrPdP=TZMNGPY*vpd{T-~ zJ2=#irc$ZN)NJa1Jmms99Fn|F-=UXDuS-R;&T^%EiTsM(6jm4(0{*ZnG)jYVwQ_?> zqHdvStLdUqYbI(;8aJ)4ww*Rm+gaOFOKIg0|Iykw?Rag9HeH(oSujmotevf0ptWf~ z(r(ah*Y44Nr#+^8Qd-F8bUkx@}mQc{siMjI7d zRJc*ycLwEuR`)*7-TORupZkyV5C0_0Z@%yMeLwH{!7uMc?`7`|?_KW$?<4OM?{D6> zUabF1KhdA+&+yZH%eVb>Kf|Bn=Rp4#`%C>5{&oIM{vG}r|8D2JB%cfsU(e9B%REEA#+I%IgeaQmXZ~uf}CpHZhUUU z(NpLux{0Q^0~nr2;O-DuTW5v$&6uo~e{&6X|p$gku@_GfmK^H-JQ z<$8HuKBiI#2Q2n(_U`ibc(?cu1&*s}ouk}-1u2Kp@6fyS-@@fAdd5 ztJC345mm1mRHJHA&1#lA&)p0y47-!OU-{?yK~u@Y&+ai6Q`kG&p@)b#g zLoC+kAc>jxR7NbL3S0*-_(qC@n5P&N~Ibp|V853(lK&N^5p>w=DY;8q8liDscW zXeL?Je1*7GtQCI}N6B@vL2j1YO| zwDIIfavX8UX=DMpncVdcxK@|33mG3plPIHt<|Biz#$9pqCi7xzi6!AU%XlS!U(cWC zmx(o^6@GJ=oGmYsCGsA5uszwn!A^7Xk&n~Wb!wBU@@lZj*li3L zUmF@dgeK6VX(~0SqO;)G^YOEm(n?xQ>#cXJ53I@j7@ory^XvF+Ji;I6&+^xJFaMl> z&nJi^ah$NlY-G~K;wt!FjrgN~*d(42?};zO_u_sz*`8-Fu}kb*?KSp;_HO5Bm8uA~ zWu7`28o9zv_vU&v-u>R=aFc#7%AWxDF#OZ}bNojCu^=t8qk>h`&L&mJ?8k_q3uH{U zzDK{ySOL0PL%V4v%VuX||F35&StC4PGuy&;vngh(dAzw0(kht$0WNC?5g{cNl@Fnq@_(Xgw4wiSzdbwS8%6H^v@Qg$4MEhvu|6Y57 zlkJ@CtZ^Q4nw@8zZfCdicP9g{<|?&L?NCW@VH4`V+5G|9cf4!8SG>dFe#_u}Px$R& z_D2POuc*x=3`Dt%+)G-2k)G%4HTwPf2gcEu^=wRFAtq2vuckNBJ7_(9l)grH(%tl9 z8p{r21+1R+v7P2`tkp<|dHezX3O0U*V8TQ8yep>5YMF-V*MnU)+0WRM9Nn4goa;P+ z)HqI^tu9tKsMYFj^#B}Tv)Zb*t2b0Pm~4;wRDG$w1%Dpna`#k!cP`T7Mt3!G<3V?e z`-S2?jSj zW23PZZv6(`g?;-a%V*EBtKchZ%su>IaRyjxM8wERGDUXU9qI?g-3Q!;@TW}!!7ca7 zy((l)0XXX8;2D;GM`>Nb@7kjWQ<6#6=@03T>09-`>XVIRBh@gC*+!0$4}x7~)WEav z1D!V*jiA}h#unolW4rN^@v8AA80dZDFUGLZO;2X$vCr7$@VH*&Zki>m*ZDnSkt~(h z!b4Zd4RX4Du6?1s)Lv$HPuJ1nW?!eQG^Ir45@lHY}z7)Ks>L{%iUw%c_l8t05 z`IcOxSL%1_>%eTALTYCH9b~O#f)uqpGtI*wMLy0G3t$%jW3NuX(AjenWn%` z(!hU=UW+ZQL~>QruW1xZV$)bEOG9TlgRNj2SThoTyOp)EZToz8vYBkAU~|*V<3f1N6 zO3dwlHg$)p4Rd`vlC1|DlI;fU78QIlqt;J`$gyDFTl5ZnJ$(ceVlc^0V;8VOwuD{F zD%qWE9USQiB-;)o_Ac=KN9bv~Ior$ub6;;(!kJz(-!i{PkNS<3Yb^z{G*~ZLuUjKl zG>_%K{mxDKdui-cHmHZFP{kI@t+ zfJ3Ltx8yD~gz@$ibcB`mJ@x|hf-BrsH#cOgD6KE}JPk5Hlh_QVvtuov=kf}8{9X8t zo6&(f`A+^Vj}mbr5iOF6Q^j0Si1c3ppI?d0SuZw>VD4I>3oPj_k|Oy zCa8(v+o?#36T_Kggqt)Uta~Z6e3e?R%GFKSsWr&mCsZ3|)2ZHsgMA2w(%ggHBV6iA zxUkk46`;E|mE@5t$UFKc`gFrUr<`MdoMoJAtTxs`vric>81EP(2Bn2`1@lkYrHktI?1}kT4AjccO&g~iKF3LzmpfpCGvjx z2)JMXi4g^N81GC6-QDRtya z+6f@4e7RT_%eC?o{JZ%o-c5BEf#kQl-R@wZzriR?g?wo17o*EH8V1{HK4-oF|9TbO zf2X<2+-vRRK^AWjzH_2l;NAd7o$QByKNWVk7UWJF*+$w)2Ux6&>>|D72NI*(`s4bO zAdqf-J)X|P@a-p!kBx5(51d_pNmrtW-%TU*Philau*naz$Jx{9K)cuk^KdiCoMxV2 z+UT#RV6K~;cIO=sX9_$|ppR^IUvvNBe&znco8%qmT@duD`0yhq!DxZw9i)Gx-%RHs z8!iEfC0mwtD)wO=_TVJ6-&THzI1vqT5}0|HeI(j97PYBIPX_1AK?^(+Og^8U2M)Xljc^J5J-v!9 zhhyCUPQMMkVl}O!4~C~KuOfl_ppPTrSnylxAvD-mERCPT7lOea1`++0A14-w%fwc( zU3?@ClE+F@X2@&gP4abr`L6sBy*Aq32raw_HFP;W&McLs79t&PP^-WW_alR6y2`!G zt#E6Rx9v!X9=8wkPCzf4kM7j~Z~n8_>a}^>yiY+Dx-WbccC1W43yhuP-{;q(?>G8Q z;aN(w)`~AjkYk7NH!As9`Z7#-A#Hh?>^E`2FM^(lnxSq&(yQ@C^`wAZQ<#h zMic~ z!sqg9`9}U5F@&ab7dqE7P6@iv+iI^G=Z<%$yT`k>dy-r3j`uG2mLcEoL9cAW>syL` zAN&Pfpl?gRK#w(lX0SSIHGKYbaiVOOugGGM|IPLc$93Lwy5PxoxJ$i5{CIzp-x3g3 zestJh3dwb3176u7>= znqRHgBd?#+U)I0Wry6NskzC^j;|Zh9c#n?IA@+#*EL>!wwFr%Etu<5bk?{@(QNFFN z#B;dDyFP5%E4@3tI!yX~FBJ`0E05OF@N*AASJ+^DPk+a*ViDwiKiiI7KhsL(>HN2R z1%HSCz_sds=&(CJtk0%Lfqyf>zb)pA<~VDLwcNVN`Zwz-w5y%g`__QAN1J$ z$dq3=6TxA>c9*x&p5a9;y# zaO`A%HO7oJ*9Ko}Vv19ExJKjz}+exyM?G!uJPP56+dUv*+ zW9Qm=cD`L;7urR3G1^_JU1pct6?UavWmnrZAmlnbf(FuHH`+~hv)zJ8wb|S3cDuuW z?zFq?Zp^F~QyW018nTDM1DX@##5!?Kyp!MrXDZ2X_*5s&A>llglkQ}IuCvg-a-3Wz z56!l~DRhdE0wqqVQ|6R|yepk5r`oAS_C%a|q(h_AgqF7d+_~N9a5~|<-D4-Uqo>EI zE_2h}EH~FJaEskCx6-X~BW|PH0zU44ga`M#L$2nfl+7_8O274QEHSK<=FX3qspib zdsxsBf*#gnG#f2OD?BlHccH_7=rp>FZllNOg*)^c1IC~+gjP0U1RIxWW|`Tb<=~x- zVBIj-@6V%d%%%~Jg$zG~QJmIB#nO-)0Gv6!pioH@~UZq#< z)p`*mdz04!w{J)D>PFu5dxK!ZXsr+a^^dqxyqRDog1+`QCt@;Fn8CX=89#Y`!8=2R z=Kd4^GPB&QKm(~VtIZmJv(~ILBWC^29B$kH_{3waIJjN{d@l*kmjdrggZnWwXl12a z8CENA<4g#VDY8WNzSEXcIAKK8iw4mI{|lUN5S$Q$_7ErIW#E3vq2uNJ$l=Q1YWw}H z1s*o)UV}0=^r{s2Q{YTL_N21Vhnn{JPAA-E)MsKtZ&9I_*s{?M^PsT`sHgTPC#fx}6&l(G6?H&IT~JaFwA2SR4M0yr`}7zC zRmDM92~buNw3PyN1?Tn*3RBQn22_>>o#jAjdC*#cyZ@cKQg~B2=&;hQg6?XdygF#F z9!|9l%Igg^Hv-jv#Xxs)P+mfKqMr=cN)1o-88oP%!VKsz3rhU?`F9C4Sq4>BK$lfe zW(~Ai2X)p%pN(Vh)dlp~?sY(^UC?R|)Y=EV4nVO(-ms_niGGsLK&IJ#zF*)M`bB=R zUkav+>|@hrzr*kGd;LCtz}E(&1DR_vB$gzT|8&&M&_&CC##}Q3ryTXj?$8$lHw-*5 zW6bjkL!YbL=WDH@mjxacH|AL+^r?b|b7&DA z<%cS8Lj!H2+h`B%rNd~6aV(xCutb)`QkY`tEEk=>h!vx`l(KSGJ4P3+*xk{s9b&$L3EA0iMOE5cY$~Zc`W*TiU@X6iFA>Hy(~bhFCU|m`jAY5 ztsDaV#gB0a3)!P^A8S;Gd=XGZ_ZUTt$bcNkK2pek4mUAig2)&HYzuRL*d9&##4z21 zJuDo{@TzbJ+x8`OZ@7O6Dp3*mcLp3hEA;Td<*QWPzWr;$&W&zcf4E`6UIp8f6K+p& zxH0u^Gd#K#E*)%3N9fdpNcOmJM^dpDKi-IX&gvDOQN&3ic-0hH|SC`_OE)VG{GH&&}ZVI`823LTjYvj zQ3jniAbUEY^F9#=+D-*$=Rn=XPrN!h5b`A+iq1i@6hg^$AlfEmNjFqH2pz|N zfKfBU9La}4^RuE?w7*kVmDnT(QHy7Md0y3$AYTJ+z1IUCC6@x6;PZv3G z`SOq_n$fg+-57Xx8hl&9v$LSiJSejm&RhpYw!?LYyaXsQ75zWQFM$Rl@YfDBvED#? z@#8}7(MTM$C%~o!p_jHmZNnrH3QGrnHwM(02UaYFz8avbem&s5RH!C6KMxcVs3K58 zFQy%w>!yd!I6CDzcw!Ug+D`|MbFyzgWrK`t1&Cj1-iq%p=F<=Ya_YzqiA1)8pZg*M~i z+ijsY3zi2L4t}l%A}WB#Hh^44%tW|oIh?ZtI!T37Rze+vJOPR*7LCw?2B&Mp)CXlI zCOmBCVvfCVpQJGR(^UhKwh6vL!mJE(v2B0qrH|7FaLaXI>&7sDwt=X-u%mt0(jnYs z47M}@8=8XcWZ2A%eOuXJ#fn6Kbi{y@Zq2<23{P2LK{IyKkbTvFaPseU+RC` z_VPom2W0Wj{nWSv*MaN6b>KR19k>o$2d)Fxf$RVK`VW?@@fyw$n;An(?Ob~}lv~?3 z2d5e5!$eM#Q^K&GaT*~sLpfALX$v*RV8jeF;}kgzO$Sm`I&77qqGTg~yR=nyjf5Sg zUC}`YwvrS|sVMI=gPPsj`|kaH*R}upzPZLVv+lL-b+1|L_xr8;c`ncT|M35}UnHFH zUnY;ruoF;5iMgb%y1nRqfamJX=_6`@&L6-$X{hf zR#k1vfG5-0Tt@ixLo<*b&=FRnRB_YQ{)`wn3NIA~x6+ely`Ps%n18F;pg(PQ#N~>{u3iDjWb7Q{m=*sTKyr`^`l3 zqq7qjG&%{-ZC*+Y4M&#PVJ#M4@XHx{+Yxj#{ac=6|r(>R4>Bj{J36)z1jy*jw7q@{rwl_}se2>pzufE`qeG13T51pXnfA1>n zZ%#eBbTMUrQnQC5U4ZS3%+3goN(yspTkD?Ye@QjdvNC!O&?|*O1!=-86d^}R*r5n71R}5| z5uk7QgUZa5K*|2NJ$Weo2XJC2^5>7evO4w4cv8W3YmO~HgxfZtT_8(gzKwaYDi!p9 zU~Dsg;9yl)i^?nQmEW6I|5!C!koV$;LWxuDa!YD%K*wZ)OxI8Jtk((fE~9HaPj(44 zDr8>0Y8RC?M<&m8p!;rsvreMNCR3bL$T3oszDkL&W>(r6z(bqBj8~dsJQgiFfWdO< z6PuuK$sQm^pM`ESzY?RWv?!VtN{#koL@@Dx%mf053Mq+Z2qv=hau$mV^8?ZXnp0Dv zBG!1iQp8&bSVLCO3~wQOu_EyO+kxi-qp2{uVpU{T7+v^fN+tdtRcn^1JyW{aY0N%p zyJyI+VPSU2s*bHD6J&Q*nhC`R8y_su>4>2m#7C8mxp~^HEnzyVe2n>c#$6CqQYSZm z*8~}0(%~~kwO>&ucw)p~?${uy(|LOT`~8NH$L%BKJ-_FlT;RwVdN*&R+2#gFNncuU zRBHRCp7ytwXyFwa4AV;?^@07&-IER(p$GO|y=obL`%~y_-ipAck1mOMEx=K0__a-4 z^bbX!p5JM$bj|ZvfX4#I0y&s!% z&E_hnnU1$VEUzT()c<&Fa6E{bAfVj2CYNRzBb9N4>r#JKZ`7fa9H&hgUezkTLP;oKAQtmU{Y*cY{=Ia zq0s=X0dN^=Yg58!yUFiq-Qr`p0o`U@HaYRh>szV{QK27nrQ2x~8{5_U_Suy@Swwwx zp>0s0^r@?56c1mc^_B9anhphjMc2`Wn{G%W+QZ1dQqb%E~c zZRVOeU9m-d1dq*Y*=41g%VWtQ_wKl(sv;E(hdke5jSPnjVXY{EwIXLaJ5abjN^1Vx zV8cXrMeWs^?enc*{L}k??bLn`Akv@qd!qf!ejoZjiZ2ADD8AWW#TSYRoh=-L^Qde(qoZ?ZhFnM^Git*c7wfFuhb4AZ9%t^kZ-wH+bcC@qEr}DzWyBDd+*wroG z{Di*8WH0^QuP&RBFCFTNtj%*-_G%;PobnZe*I}!M)rqX70f#GpHeBtb7;lw5TGM{jA{Gnl`0# zjagy4G%pxsJn6rwfAq#L$n}R4cdn)jUd`g3cjcQtknzqf$jv7lOr+>V-YMfI-d9*n z%vqUZb>S|p+2g?cD^~`rf3P=4O0-6EF5W#IkmK+WeSE!sjbWw5)z~W+mu4BujAJj9 zFWV>cM9GAGqHRh@c!&UaM*M)>7wJF(34jyvQds&g+pBa2;D{vy5r7U%#gYNtY5sFL z1W`Va$g$u|FP|tWu=~;$$v6Ajmdc=h+Y~l)2sA1of@ndbvtgYQe<_U(umVuAWidhA zTPQaF#T%BKznc*d#gx;%iBY29siu3|``&WeEawp0^YTysBvaqbl)fWVNe;F7rV`%6 z+e3j}Qc3n)X_iLKL!$@9w|1dU@Ru4L+V6tW?r!f*{%uaA)V(vr+L(q>b7Pv-A0A;b z@=pa33S*L`HqohDe{fCDYaZ1+@5VR9DYotAJ~$Kf@PeHlIq7NA&uu1Xe94Isug1;u z@)a^Vlqb4_5}3P6<39$NSH>jj^acKHhUf7QIr!NX3qzK4^o%q&vQ zJ;2MV#=VHrTz$R&CZp9TH$Mk~7g7ey4=y+JBet~7` z$dpW}D9?F7vfH;&SIO*AsmZzUr1-pVh3X$jFlMerY=NB>2_gw|8XLH1H(dmoe6g6G zJ~JtkjHxbp=@;XX7_1wC8NP zJfgUK{h2qPUH#8VY`zsTud$^~)ifyT-Q29s+OyK9e`hJ4G`8s=?AXrw@q!-dr9|aP z*%!6GRi(e%jcwLz`NO#I{$cxCVsD@S>D|ZYbhYPOSD!7(v%21r_k1)?;N+$AY_gx;h*C4fP zoRphh=_P&a&GQa3UqqqAATdurs+=r`_@ostxdPn8<+rVRGXmxh&xp^zNt5?fV&ewL zz*S0Cbmd)4L=gX%*^R779!1*t-JE5?lqT5$e^`}@VO8Q2zMuUF`;FkhZyJnDp=DZ? ze8hy50u}-nF>$n>IUYlJ7!Cc~-e^=<6S?2^$Q4ts8uj3~@*-o!$;a8c6P%@s2inIf z{-j>tO$@)IUi^Ze%%uEWWn>-uZEaWD&S!0b=0CgH@n}1?%xB_uLdQN_9gp?Fa%6v< ze?uyT>VmaRz3(>mV(9G6Eo0BA_Xb1yURFF`w?lB3vwLp1O5UxKg3U?i#>v_XZSns}Y^}#jLt&cYjFS$`O`eu{%GnHO!OZ`nm@HLCJ%1bI6?>m?OR5Oq^ zC^+$cNa+>x^7SSBo%;RE45RU+Eme}ne}_6It8|L3b5>bY3*3L@kBpDooXt4tb>02f z58e0sU${J~97#IjOSrSBoV&CqZP`Uznp3RD9;{o(;Sh7I?`n-DuBzCg0qui(^_1RK zhuBtUB!eT#QVO#lV>KWioZiA0Wk>`9MEnEN^j$&xdT*#WGZ(&An^_fE6eK5pe~$@h zi%!V1Xy8fk%9d^z+B8l4$=kM#j`Us{?pOP z-)Iw>hmeqRZjU|ibjewN>rbX&5zCRtHspn5h*s{Yljma0p!+7!OMnOQngIy}54 zR5j!A1zgH$xwe9^xS^)wsq>@{e?(Te%XhtZz}-HQFDvcEc4KQjFz64>v;_I1HGQIUE3R-l{Fp} z=9r{CJdy?ZHrgL6o3t_D#OvU2s9*WrvhQ<4R|L(6c0{OT=rod&;Gb zQ=?K_VKwlcw4hmzr>6Ag=1uRgdnnangz~XD!--6z@kQq_nSS){t7{Ddc=Ozf=1q?5 zy!F93YPa-Z9uf<9Na?S0Ed}uq?_qr!6=H_{Pv_m=N&Lm&6AU!O(S!YZ8xsM8=Sz(w zqzG?`)(`~Q!58|rR#4!-e}U)GlKD467W}xvEU19n(Pz37-A0K24ji@~xt&x=6DZ#o zY_&g0*`RQJ$JU`go*sy%zA{y%fxDHoM%SM_1L zTl-JhO+=Kh*fh};G5C~FBblJ=8F#fgq3h+@0NvNUtPjm|%X^`^e|z2~dgN zQK?tuoY!ctewA$Ff8g=C>0qUTL&^LVg|S9e7vG)mIv(7cBdA_(=^s|JHO)+T!^Q!> z(q}229L<2YdVByq6z{?0aH-MJ@FwrU49B}OqUrJ&2lx%Id~7nC5fRD7o6zRrzvcoy zY*rMV#>G>)_!Ufs==?8kGM*KVpH4o^@t)LJD$_#Phih~+e}1{J4-Q_KZ?F^SVX$2u zvwHg2uwZ$NaEqW$9T8?oUhF}3U9`+lUmoKcmOy3F=wTj9-JOUQK;+~a7G@!oDcCC^ zmYGNowP4YboW6dY>iJ6%ZWa#z9D?XbGeQ!{)`=U*;Lxa{@)#PtUxhiP*jl?ou8{3Q z0@=#VjbKf(Iwlhq+Sot@D;p~-lB@l~g|-yp26>EdQf3aTvo?o_=D^(E2C|mNET=~> zgg38+xTmw7lIa}b5dH<1isk}wH}w$%LK(ys_0lH0*1{&oh>sataWEk;2?hl#4g&%j z1povTi%)oN80?wL@_1^Qzip%#(Q%CZw=(AfQxX(fVOI_GuntQV9khKw-=5-tP5G{u znfU@ie+S}X)K=wlnhi)|?9B z21D*s0_F6xT*U^Z5>*pXY?fT}p5IQI)n25UEs<FdbwFjqHBo)>Xx^6f5b2L%`e=#vPF*7kXGBsK-BL)d7hDe6@4FL%RF%|?AZ1YW*5LvPIy^Lyuk>6e` z2&1J#FbxI?Duzgg_YDC70R;dAf&l=O?;wcgVbG(J6u168!+zEVq#hM1iSs{y#N?)3 zH5bCiso^O@Dr_8McYjzJwvW$#w3Yb&sLC}D8!jCje{fbXyAX^v!H@K&!kP?cQ{CZr zvY9)m2tMyhtB3%i+kNdpN#@DpQ%Si99%opnLr4Z=14=&+wws$H0-1mXLNSGV|BBmJ(FgU>vmv& zOBFZ`MHg@368gM8-@)ZnssCPxOEc%Q%$5~B)xgP?`Xl~Zz2ML#IwM}r_UcIR^UlLw Z9^4vC&>L+nl;>nx^0M1*&Pm_xga8j@9ZvuN delta 52510 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 diff --git a/src/vpnweb/vpnweb.h b/src/vpnweb/vpnweb.h index f2df537c..7a4a0b3b 100644 --- a/src/vpnweb/vpnweb.h +++ b/src/vpnweb/vpnweb.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Wed Oct 22 19:52:16 2014 +/* at Mon Nov 17 21:41:35 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run) diff --git a/src/vpnweb/vpnweb_i.c b/src/vpnweb/vpnweb_i.c index 7f4abf2d..b7b3059b 100644 --- a/src/vpnweb/vpnweb_i.c +++ b/src/vpnweb/vpnweb_i.c @@ -6,7 +6,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Wed Oct 22 19:52:16 2014 +/* at Mon Nov 17 21:41:35 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run) diff --git a/src/vpnweb/vpnweb_p.c b/src/vpnweb/vpnweb_p.c index 173f5aa4..87dd62fd 100644 --- a/src/vpnweb/vpnweb_p.c +++ b/src/vpnweb/vpnweb_p.c @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 7.00.0500 */ -/* at Wed Oct 22 19:52:16 2014 +/* at Mon Nov 17 21:41:35 2014 */ /* Compiler settings for .\vpnweb.idl: Oicf, W1, Zp8, env=Win32 (32b run)