[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [win-pv-devel] [PATCH 05/20] Add base do-nothing service



> -----Original Message-----
> From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Owen Smith
> Sent: 24 May 2016 15:21
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 05/20] Add base do-nothing service
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
> ---
>  src/liteagent/LiteAgent.cpp        | 209
> +++++++++++++++++++++++++++++++++++++
>  src/liteagent/LiteAgent.h          |  73 +++++++++++++
>  src/liteagent/liteagent.rc         |  60 +++++++++++
>  src/liteagent/messages.mc          |  66 ++++++++++++
>  src/liteagent/xen.ico              | Bin 0 -> 25214 bytes
>  vs2012/liteagent/LiteAgent.vcxproj |  12 ++-
>  vs2013/liteagent/LiteAgent.vcxproj |   8 +-
>  7 files changed, 420 insertions(+), 8 deletions(-)
>  create mode 100644 src/liteagent/LiteAgent.cpp
>  create mode 100644 src/liteagent/LiteAgent.h
>  create mode 100644 src/liteagent/liteagent.rc
>  create mode 100644 src/liteagent/messages.mc
>  create mode 100644 src/liteagent/xen.ico

I do wonder whether we should continue to call this the lite agent. After all, 
it's not obvious why it's 'lite' (and that's a horrible Americanism anyway).

> 
> diff --git a/src/liteagent/LiteAgent.cpp b/src/liteagent/LiteAgent.cpp
> new file mode 100644
> index 0000000..7920e9b
> --- /dev/null
> +++ b/src/liteagent/LiteAgent.cpp
> @@ -0,0 +1,209 @@
> +/* Copyright (c) Citrix Systems Inc.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms,
> + * with or without modification, are permitted provided
> + * that the following conditions are met:
> + *
> + * *   Redistributions of source code must retain the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer.
> + * *   Redistributions in binary form must reproduce the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer in the documentation and/or other
> + *     materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#define INITGUID
> +#include <windows.h>
> +
> +#include "LiteAgent.h"
> +
> +int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE ignore, LPSTR
> lpCmdLine, int nCmdShow)
> +{
> +    if (strlen(lpCmdLine) != 0) {
> +        if (!strcmp(lpCmdLine, "-i") || !strcmp(lpCmdLine, "\"-i\""))
> +            return CLiteAgent::ServiceInstall();
> +        if (!strcmp(lpCmdLine, "-u") || !strcmp(lpCmdLine, "\"-u\""))
> +            return CLiteAgent::ServiceUninstall();
> +    }
> +    return CLiteAgent::ServiceEntry();
> +}
> +
> +static CLiteAgent s_service;
> +
> +/*static*/ void CLiteAgent::Log(const char* fmt, ...)
> +{
> +}
> +
> +/*static*/ int CLiteAgent::ServiceInstall()
> +{
> +    return -1;
> +}
> +
> +/*static*/ int CLiteAgent::ServiceUninstall()
> +{
> +    SC_HANDLE   svc, mgr;
> +
> +    mgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
> +    if (mgr == NULL)
> +        return -1;
> +
> +    svc = OpenService(mgr, SVC_NAME, SERVICE_ALL_ACCESS);
> +    if (svc == NULL) {
> +        CloseServiceHandle(mgr);
> +        return -2;
> +    }
> +
> +    // try to stop the service
> +    if (ControlService(svc, SERVICE_CONTROL_STOP, &s_service.m_status))
> +    {
> +        Sleep( 1000 );
> +
> +        while (QueryServiceStatus(svc, &s_service.m_status))
> +        {
> +            if (s_service.m_status.dwCurrentState != SERVICE_STOP_PENDING)
> +                break;
> +            Sleep(1000);
> +        }
> +    }
> +
> +    // now remove the service
> +    DeleteService(svc);
> +    CloseServiceHandle(svc);
> +    CloseServiceHandle(mgr);
> +}
> +
> +/*static*/ int CLiteAgent::ServiceEntry()
> +{
> +    SERVICE_TABLE_ENTRY ServiceTable[2] =
> +    {
> +        { SVC_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
> +        { NULL, NULL }
> +    };
> +
> +    if (!StartServiceCtrlDispatcher(ServiceTable)) {
> +        CLiteAgent::Log("Failed to start dispatcher\n");
> +        return GetLastError();
> +    }
> +    return 0;
> +}
> +
> +/*static*/ void WINAPI CLiteAgent::ServiceMain(int argc, char** argv)
> +{
> +    s_service.__ServiceMain(argc, argv);
> +}
> +
> +/*static*/ DWORD WINAPI CLiteAgent::ServiceControlHandlerEx(DWORD
> req, DWORD evt, LPVOID data, LPVOID ctxt)
> +{
> +    return s_service.__ServiceControlHandlerEx(req, evt, data, ctxt);
> +}
> +
> +CLiteAgent::CLiteAgent() : m_handle(NULL)
> +{
> +    m_status.dwServiceType        = SERVICE_WIN32;
> +    m_status.dwCurrentState       = SERVICE_START_PENDING;
> +    m_status.dwControlsAccepted   = SERVICE_ACCEPT_STOP |
> SERVICE_ACCEPT_SHUTDOWN;
> +    m_status.dwWin32ExitCode      = 0;
> +    m_status.dwServiceSpecificExitCode = 0;
> +    m_status.dwCheckPoint         = 0;
> +    m_status.dwWaitHint           = 0;
> +
> +    m_svc_stop = CreateEvent(FALSE, NULL, NULL, FALSE);
> +}
> +
> +CLiteAgent::~CLiteAgent()
> +{
> +    CloseHandle(m_svc_stop);
> +}
> +
> +void CLiteAgent::OnServiceStart()
> +{
> +    CLiteAgent::Log("OnServiceStart()\n");
> +}
> +
> +void CLiteAgent::OnServiceStop()
> +{
> +    CLiteAgent::Log("OnServiceStop()\n");
> +}
> +
> +void CLiteAgent::OnDeviceEvent(DWORD evt, LPVOID data)
> +{
> +    CLiteAgent::Log("OnDeviceEvent()\n");
> +}
> +
> +bool CLiteAgent::ServiceMainLoop()
> +{
> +    WaitForSingleObject(m_svc_stop, INFINITE);
> +    return false;
> +}
> +
> +void CLiteAgent::SetServiceStatus(DWORD state, DWORD exit /*= 0*/,
> DWORD hint /*= 0*/)
> +{
> +    m_status.dwCurrentState = state;
> +    m_status.dwWin32ExitCode = exit;
> +    m_status.dwWaitHint = hint;
> +    ::SetServiceStatus(m_handle, &m_status);
> +}
> +
> +void WINAPI CLiteAgent::__ServiceMain(int argc, char** argv)
> +{
> +    m_handle = RegisterServiceCtrlHandlerEx(SVC_NAME,
> ServiceControlHandlerEx, NULL);
> +    if (m_handle == NULL)
> +        return;
> +
> +    SetServiceStatus(SERVICE_RUNNING);
> +    OnServiceStart();
> +    while (ServiceMainLoop()) ;
> +    OnServiceStop();
> +    SetServiceStatus(SERVICE_STOPPED);
> +}
> +
> +DWORD WINAPI CLiteAgent::__ServiceControlHandlerEx(DWORD req,
> DWORD evt, LPVOID data, LPVOID ctxt)
> +{
> +    switch (req)
> +    {
> +    case SERVICE_CONTROL_STOP:
> +        CLiteAgent::Log("SERVICE_CONTROL_STOP\n");
> +        SetServiceStatus(SERVICE_STOP_PENDING);
> +        SetEvent(m_svc_stop);
> +        return NO_ERROR;
> +
> +    case SERVICE_CONTROL_SHUTDOWN:
> +        CLiteAgent::Log("SERVICE_CONTROL_SHUTDOWN\n");
> +        SetServiceStatus(SERVICE_STOP_PENDING);
> +        SetEvent(m_svc_stop);
> +        return NO_ERROR;
> +
> +    case SERVICE_CONTROL_DEVICEEVENT:
> +        CLiteAgent::Log("SERVICE_CONTROL_DEVICEEVENT\n");
> +        SetServiceStatus(SERVICE_RUNNING);
> +        OnDeviceEvent(evt, data);
> +        return NO_ERROR;
> +
> +    case SERVICE_CONTROL_INTERROGATE:
> +        SetServiceStatus(SERVICE_RUNNING);
> +        return NO_ERROR;
> +
> +    default:
> +        break;
> +    }
> +
> +    SetServiceStatus(SERVICE_RUNNING);
> +    return ERROR_CALL_NOT_IMPLEMENTED;
> +}
> diff --git a/src/liteagent/LiteAgent.h b/src/liteagent/LiteAgent.h
> new file mode 100644
> index 0000000..ab192ef
> --- /dev/null
> +++ b/src/liteagent/LiteAgent.h
> @@ -0,0 +1,73 @@
> +/* Copyright (c) Citrix Systems Inc.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms,
> + * with or without modification, are permitted provided
> + * that the following conditions are met:
> + *
> + * *   Redistributions of source code must retain the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer.
> + * *   Redistributions in binary form must reproduce the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer in the documentation and/or other
> + *     materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#ifndef _LITEAGENT_H_
> +#define _LITEAGENT_H_
> +
> +#include <version.h>
> +
> +#define SVC_NAME "xensvc"
> +#define SVC_DISPLAYNAME PRODUCT_NAME_STR ## "Interface Service"
> +#define SVC_DESC "Monitors and provides various metrics to XenStore"
> +

These should probably be changed. 'Interface Service' is somewhat vague and I 
don't think at actually does provide metrics to XenStore.

> +class CLiteAgent
> +{
> +public: // statics
> +    static void Log(const char* fmt, ...);
> +
> +    static int ServiceInstall();
> +    static int ServiceUninstall();
> +    static int ServiceEntry();
> +
> +    static void WINAPI ServiceMain(int argc, char** argv);
> +    static DWORD WINAPI ServiceControlHandlerEx(DWORD, DWORD,
> LPVOID, LPVOID);
> +
> +public: // ctor/dtor
> +    CLiteAgent();
> +    ~CLiteAgent();
> +
> +private: // service events
> +    void OnServiceStart();
> +    void OnServiceStop();
> +    void OnDeviceEvent(DWORD, LPVOID);
> +    bool ServiceMainLoop();
> +
> +private: // service support
> +    void SetServiceStatus(DWORD state, DWORD exit = 0, DWORD hint = 0);
> +    void WINAPI __ServiceMain(int argc, char** argv);
> +    DWORD WINAPI __ServiceControlHandlerEx(DWORD, DWORD, LPVOID,
> LPVOID);
> +
> +    SERVICE_STATUS          m_status;
> +    SERVICE_STATUS_HANDLE   m_handle;
> +    HANDLE                  m_svc_stop;
> +};
> +
> +#endif
> diff --git a/src/liteagent/liteagent.rc b/src/liteagent/liteagent.rc
> new file mode 100644
> index 0000000..78e5cc7
> --- /dev/null
> +++ b/src/liteagent/liteagent.rc
> @@ -0,0 +1,60 @@
> +/* Copyright (c) Citrix Systems Inc.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms,
> + * with or without modification, are permitted provided
> + * that the following conditions are met:
> + *
> + * *   Redistributions of source code must retain the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer.
> + * *   Redistributions in binary form must reproduce the above
> + *     copyright notice, this list of conditions and the
> + *     following disclaimer in the documentation and/or other
> + *     materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
> + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
> + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
> + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
> + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +
> +#include <windows.h>
> +#include <ntverp.h>
> +
> +#undef VER_COMPANYNAME_STR
> +#undef VER_PRODUCTNAME_STR
> +#undef VER_PRODUCTVERSION
> +#undef VER_PRODUCTVERSION_STR
> +
> +#include <version.h>
> +
> +#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
> +#define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
> +
> +#define VER_PRODUCTNAME_STR         "XENIFACE"
> +#define VER_PRODUCTVERSION
> MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
> +#define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "."
> MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
> +
> +#define VER_INTERNALNAME_STR             "w32xagent.exe"
> +#define VER_FILEVERSION_STR      "1.0"
> +#define VER_FILEDESCRIPTION_STR     "w32agent"
> +#define VER_ORIGINALFILENAME_STR    "w32xagent.exe"
> +#define VER_FILETYPE VFT_APP
> +#define VER_FILESUBTYPE 0
> +

Are these fields correct? Why are we baking version 1.0 in here? Why 'w32x' and 
why does the description not include the 'x'?

> +xen_icon ICON "xen.ico"
> +
> +#include "common.ver"
> +#include "messages.rc"
> \ No newline at end of file
> diff --git a/src/liteagent/messages.mc b/src/liteagent/messages.mc
> new file mode 100644
> index 0000000..0289c44
> --- /dev/null
> +++ b/src/liteagent/messages.mc
> @@ -0,0 +1,66 @@
> +SeverityNames=(Informational=0x1)
> +FacilityNames=(XenUser=0xd60)
> +
> +MessageId=0x0001
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_POWEROFF
> +Language=English
> +The tools requested that the local VM shut itself down.
> +.
> +
> +MessageId=0x0002
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_REBOOT
> +Language=English
> +The tools requested that the local VM reboot.
> +.
> +
> +MessageId=0x0003
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_HIBERNATE
> +Language=English
> +The tools requested that the local VM hibernate itself.
> +.
> +
> +MessageId=0x0004
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_S3
> +Language=English
> +The tools requested that the local VM enter power state S3.
> +.
> +
> +MessageId=0x0005
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_WMI
> +Language=English
> +The tools noticed that WMI became non-functional.
> +.

Does this agent use WMI?

  Paul

> +
> +MessageId=0x0006
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_STARTED
> +Language=English
> +The tools initiated.
> +.
> +
> +MessageId=0x0007
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_UNSUSPENDED
> +Language=English
> +The tools returned from suspend.
> +.
> +
> +MessageId=0x0008
> +Facility=XenUser
> +Severity=Informational
> +SymbolicName=EVENT_XENUSER_UNEXPECTED
> +Language=English
> +The tools experienced an unexpected error.
> +.
> diff --git a/src/liteagent/xen.ico b/src/liteagent/xen.ico
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..844c993ba290e5055a8900ca87
> 86ea0e031138a6
> GIT binary patch
> literal 25214
> zcmeHv30zgh`}eRfDyxbp%LPP0P*D&;Ku|!*C70CP%6&KYl**FK5>3So1>E;F_X
> T$}
> zv_#yu(o#fox2%4ZmHNETcg{JNdoN(xr{DX&|IfeC@0poro^94MXU@3@VJ7T
> EXs8p%
> zmSTXl5OakPI-QcgV=lxqra3t&`9L!vZrKUu7tC)f);I{^P!9ZR-d2d6?%-GQ1FVF2
> z(^uoyi8cO091YO;InR7UTWS0{F~CxY%5Mr0$Ud+M(SrfM5K@&$rj0MDT*#Ev
> R3+jo
> zCmE?CH#e6HNd6Z@NHO>yNVxoEuo*kH6rQnTQ_|ALjva1XWHUA`ZDL|#TG
> }LInUu7|
> z#FhmGiHXT+h7vXt6AP4(mpG|dlTC_7E-
> 1)LF4mMXk#%SxPp`?wkjzFjO$J&Zl$WfS
> zHeuHb*i6(^t8t#9D5a$dy+A4|p+;3yLJeDnqLh}WxV>pAl%=Z)C}Q=XKV~u*5
> W@h}
> zXaagVE0XF}0Yp>5uhFHZse1Nex+JA*?8S5`pjQLBT3ZNkklsj#v{q0Gq*Wujtdrt
> R
> zDfE(h6n;%0dAQbWU#f<s1%17gCewRVOqcA^CkPbNQP(F*!*YQsT?(*IOjjx_)
> vy9p
> zliDwe)hA3>y9jj6QBc(YHB4`*<+V6b4j`@NG^*@gDNsz2DXFFuMT#2sw0Ks4U
> mMS+
> zmNj-3Fm$PSzKF8s7i-
> c?7|lo4RQmiCWzBaXN?#u^$Bow$rMs~fJ&se>Bw;4w$3nzm
> zjd~=6H{wDe91*7qVS$)6nepWr$H+WEJYEPEW5ME>#aV$6g@_%C<6Puzgw
> Wzt<Sls3
> z{EHaHydW##IdLjDUO-<i_ze6gMBczp&41H+Y4z3W&rKlPL*G8ENVb>Oep-
> 8y+P-Rg
> z<36Kf#51(}jNp4-=^<5VAil3~ioyRt;>+K=&lryd8|9wDnw5~E+)IY5*|8H7TjCxv
> zNg>#zaSkC_PP5|ap-
> c>ed71|X)4budl<O_e{iy{7yb?@R*9#t+Q?Vjw>jx(vV<FJ;
> zNT*35HXzk80mYc%GLPj%UC<SC=_T`W2~_#zG6Vs2J!E!Pq4@*f<eD~>?V&n
> c_5_#5
> zYM$9ymTgYt3Y*lgMEy<M!?gW`Y5NM3_Q$Fq@AX>$@XVHb0=2sk756V%M
> h>}D3!dI)
> z#N&57h9rh(ArDm`mjzOJ))+!4vkfy%55sb#b6KuX)d79b3;lAa!yYd!80St59YY)E
> zshlo7q+)PmU@H+{Ir)O)oa>Ahu^FA1*o+gSTk?2mCTuw3#BePhed=*R`jdiYq
> YLOU
> z_aevKkp+mEAY<9vpg%c9Q=4gWTCC~S+d*5ixyM-
> RY<OM6+QTgdlohmc@InT%#`{iN
> zMU?lu`k?g!6Z$dUs^TL0g@uWJ{rZXV<Hw6B9zvx1Sc!Chdojn)Ow11uVnMLA$
> f#LC
> zOb>Dvvujrp)9ZSP`E^}HW`vhmRZEDqb%fYZSBNd)LgYl5iHz8qVpC&Rk=-
> mp97?bh
> z`R(jQQ9B{d_I43h##R+yycI4cw{9wybx067!<vb8{kw=Pw!i&@(c(sW4RL>6n3y
> >w
> zO=M+diKR=IidCytiM4Cjij5mLiru?+ivtG^hypIVkh4RsTSt!`6~~Sp6DLlb5T{R{
> z7U$2O7hiw<wYYlqs<?6EhPZX>mbiQOu6Xd^f%x&qAH^@f{33q;{de)~nOuGK
> P4jQ!
> z-xm1a&;q=Y|39dvl|H<HapnyS3=HDH5oew&!sV7h{=VMco*o{a-rm0cL6*-
> Gv9b&a
> z^!4(p5uk<|UY@>zA(my>VBO5EXI5ltc=-
> mhjZ(Z~PfBn@h9%gm5(2E;+eEkORe+Z_
> zn=lbzcIiru5`it$@H7=*c25INFBuF7CIVphLb1YVe3f)#0jnTyjmOg@XmszO;wo4
> L
> z`g$^5;jCs96dDSB12qBmrkbSdIjhQ`&nkubI<xv}o(&tu$bSuk6=uHHi%~)p1U;+i
> z4Oj(MWkS3b>Zk(28iDhWsH!?-
> W$7z9;<WOp$}+^Lc~!h>Rn>r1P!%RIi(Vimm~-JO
> zdz>Q8ELD^yvhr6beAO((hg8<QQQ0MnKU&Dj(yx*}=mi>R#`Hy;@Iwu(0(}f<8
> k;6)
> zP*kaskIG-sFld}Ijx#K&sPG3>aWx7C0#QZ<uCl^bK`tgiYsmQc5R(!#P)YufVheSQ
> z1r&ZKd*e{7KR&*JVUd&M4|KP;mul3a2F2<*6%!0H%I)plmG)u&avW6lI!5fA2
> |<A@
> zSNW^k**S6E&W`DJ`hK<3cSX3pot-SNE=QbIAoDvpmA69(*0_+-
> EX4%dm3MNovy<%H
> zKn`}!&Me@-
> dbGNNy;vYFm=)SNsN*eAXYK6f?Cjv+P(Dgk8E0c>XUotm#Mg6nw$>^7
> zc?4NIySqc8p2lu%XJcb+V`F2hxfdVhY^}00zs|wO$K6fZs8FGTovp211sjH~E$18
> @
> zoSog=+<hu&>Ul&5TD$wH5{?cI%%lYe2S<h5$K6^#-
> (kSf&rgwXb9OWgteSQE`1v{N
> z)nm>Cx%v3}L&TjcVi-6NZhv<-
> rE!#HmpyXy^XC8~kkJC?n3?I0#oj=K1>F2XApt88
> zl7W*7&CQry69^4eWF(V%VVYkFb}69q<1#JyYYAr8nQB*D3evgz*G15?BIEC-
> EA4*7
> z7Wl@iNq`X{)Zbl)+py9srdO^t_k^x`XlUK~_1Q{w&IFd`izbMhdr+Xx!ou9l%-q64
> z$C>BduVpn}W<Q|VVU=po>>9@Md6u_9#c{49wng+zJzsgGo?jKJ=U1uxNQiP
> )g7Ygp
> zIpF+Cp5t)L&#dzNipAvll@=Ew@2#Fw@wreg@&<7#^8D;(8iS1UCmH^MI2DR
> Yv6BnB
> zfj?Tl5OnritA`eA_0;OEwF5VSa;}%Ewo{?nZY&tbh5B|SrJeDds$;}6@E%46OC^$
> 5
> zgXh#ao|Ymb$VFuE^XB46Pq8oDO6+V<LF|sO6T6}u#kz)-
> #hM0H#ExiJF}+bOaVXMK
> z9E-6O2b#EwU5VaeS$uV|`qesOXS3=er&Wm9@>+=4)Gk`=c|A&;Y-
> }aYHnS0DlWoPt
> zHumD%Hjd&-S4WZG+(qQI_YxO6xQcJvIx)>jobKQ$9<($Qg>4<h?XKm--
> 7faxDnHW}
> z4s;dw2DylvW2%Vz?^Y4{-GjxxH{!+Kx4Md{!}^KC!(JDkkM1t=#`Y3<?+p-lQa!}&
> zk96YBCpz(9Ms@LEez3?-
> eM@}t;c#(c+6Q9Bj2UA6`t@SdrcGk==FMW~&Ykj^_spD$
> z;%w$*aemPZadGJ!@zu&K`TU!gmnY7hJEwo{{pOo*#P#df#dqI*C!c%2|Ni@b
> pL-34
> z*1yUB87=TnKc~jZP)6NjV?%5CSFi40D>OE?Bui|lPe9F(29c2sLTUzhgqm{1`qgL<
> zr4J1P{EQi5eIg=dh*F}+`aXsXvHtZVj6#Em`X0p$vAW<=f=*+I^$z44sC-
> n$MFu7W
> zdaDef9-eIxTKnRG$+vMk4sAK*5h|-0>%|W_?PX|$=N*|sqMDaf5bKU78-
> *dcYSq?A
> zwUab=Ssq$N28E$jvMg3eRbU{t5^peNP&jbaD3w@2EbsKxpfPB92S=1USXot2
> |F@DH
> z?X;|w1Imkwt(5Zi?Hg$vC@-
> gO0&J|LZ&F3Fq}h~1xeM=KWoRUeY~;1Iq_}Xo2(`7g
> zE@xwH-B=b_TU*PxT_aA(28`uBJ3>3q+aV<x+BYr-
> ^=tsUcqgaUvRo#e6owXdvRs6^
> z8a++vGp<Vih*)R0+NA_HXGNSXIAf1y8uZ0*p<Y9i5N5AQOCK%kB^ZTpOT%K
> ;VBy>_
> zCLyV5v!+d(CdNcNTNoEJL#VlP<vP(ZG0}A@JDZo7A83cz(DK;tl`nOE!3$<VkV*Y
> T
> z*`M+CQ5;dKjoe1?-
> h+4_GX4>7Eed&?k*mCWa7^W`hX$eSp0IN=f>w?=SCuPd9nb}x
> z&@H!sYzsEAPjO=C82Wt*_9j{|*r&{{=_pplx{75{9%5q?Z?UbJn>f(ML+tNdP3&
> pm
> zE4H?-
> C%){c6DPX*iu~6DMSiC`;=~(~;(UJ}aekz)xH7^|Tpw3M9PXJYP7X*GXZkh~
> z=SIFJ?tL00_Uzds4jw!x@AH=~U6S|phYuf$pMU;Y{QB#!|DI=S{qb-
> 7ZwvfiZUOy1
> z#Y_gxx|x}clbf59jhV7sn3=mMM-
> DFLa?LO=KC}YCjE^|9;AkeytQ@_)t2#QmdwcW2
> zhLxF_wPQJ*&ePpn=UvXRoVA%5&X#l>ym8C1SMudNb-HS5-nM-
> C^6p^p<b<u6nI#{l
> z=yZV2y@Dkh;3F6<RDgYp;zK|S>7YeL<wUZg%rb|WoonUFu6AZ9mBFCCc=w2
> Rka!oF
> z$_zkRK`RF@WFU)m7B{>e3^SqQE9>x=(LZwGBP(-
> ;CBueMo>7V6$?#(YFmRxVV>|$9
> z&`<^*@InT%&{5_W7XOH|21;OyVa0%bH%4_vT}A@qbw)2nKgLMLJ1UR{4Q1
> c~FJvGK
> z9nb}x|FwERHv?@2TkebyMlz$<tFOK~uS=IMU%c_g8<!ZDd-
> v}BW8c1gp8%Zxsav;h
> z-
> !lD5=gyr^wrbUCHOqX$co(t^=zuQhgzkU5KUk*)1IM5^iw|Nn=RMnE_UQtA95
> G_V
> z(+LwMJexduvc#M@b0|AITLNi~4j%Bb%u}w@Ro;Z>u&zlA^iOjJbi)R0Sr~Nt-
> %7F$
> zGX~njfuUo>v)}W%O@GjQhJWj(q|lysJ5v6jFp0}uT!`P#OCYV$!2@2%Xm#n;tJ
> lw5
> zkG-sVGGj1oaL_Se6Ski-^UJOl%VE4=Ogb|H*v5N3d-g1Z-|6Y;&z8-
> aOt~YH=*pm~
> zbZdMyx;rnB?yss#4>w29_dBBK`<!Trhn#-
> 6DT3~=45hmn0d(vAs&r+5yOf0v=z`Af
> z-
> Mimy*|OzEwl#r)IfD5P+b=yYSO&ghZNNGa!hOAK@ZiBuFb<Zo%|m07=thbg-
> N_81
> z2OH|s!|m)N{6xGBh%|v(1|BYdus)pbWCT*t=t^|x?IeOu=w=&Fd5)ZCn^PHm
> V4DFS
> z;L8imZRW$6L7gEN#_e(f?SnqwKRk&FM^>WSbA#wU`|yC<^}$BQXZ7hmz;(I5
> AzYTB
> zTo2Gt#ysGaGU$`FVRU;=09_mEDs{sKY;k*CW81SBBj5uAzQCuy981iDG3VT-
> O`9e>
> z&L4~&JND_)nUg91?fP`%V;$XH9!mGtgwefK^%!;O?g}0kOuM_R4&7Z^hwdz?
> O?MWX
> zfN3a`Jm6hXSIXX7%{o{YWQsoYqGO}#6KugI<^?|-
> En#0!2lNBRlHrMFiNVk1SZ6SA
> z0{ZmnbMO84-
> +#J<^<5a^NjE<AquUE>N#79Po*zQDvV!T>yqfeK_s4g00_nTifpl|L
> z0NtEv0;Zu%@-
> XkM%$js7J6P(_>s$~*MU#B#!XOWV&2i(#JwqMX7xV+h66OPZD|KCB
> zI>tQKEnSZuJ@U{7&~t9ECtXkTrJET+5;tZA(v2AbR5ab6iaxDQ*C+c?;Upg_{FpI
> O
> zN7p8J)3px)FBP0-
> 8p^<PoqdE1WT6APZld1MKPO1?oE@Ol0Y0c>3G)GSTE~EoCFTOt
> zFm5XIcwdb%2;Wcjtw!IbdQst&>I%3X*CzVVRrc@O4?O9c_dMuI3a=+)-
> 0AY@Ds*{N
> z75aLF8+|>zaxq45nrSEl4|uP<Q;ohE=fOI>q^@hIJL}f$eEYs9o$Osz_5*xT=kx^j
> z4*~ZFqjAJ}w0-$bojSdabq4b&cW^j;#Wueg??vCRoh$6?<*`-
> i>(TD?75j5(Xl1%M
> zxFTH`;7aHFxzPDO&UCJ~6P@enNauPO0C|ARzyn^$TpV0U>VPijyqr=^+JG(K(
> r`D*
> z9TYC_6<C+lwH5b=AovQOwF$s!%x!m`uV=B2Z6BOOXL>r(rIGH8Ds*v}8=Yr+=
> LS@y
> zvwdCYOfM%o-
> QAH+b*n(9x|FAroyyV4j^*e?2YWj4nqBGOGVp*GGLVIiv%Q?9&hrDg
> zErwK*wqW<-h$^xizQ8BkAK1sq4BV%&*O0HjIF@bC<81iIkt3fho-
> vv7+LotP9V*lE
> z_LXT_+e);wwJR-
> c=|W4IJJaH1CtB3hkrpL7(Bgy&bg;P{ec95QzHGs0Zbe_bQW8g*
> zwm!j*vg67tXk3A^8#~Z^*0CVTkrp;%y{tR8OGP@>gWIMLw^9F!bf&K><+rgV
> _=It!
> z-
> lwtGz<MP6fMbk%H(qaU;a<3PP!b*MP=OAm^`aYv*XZ``+hyYB&6_lDY(Lr%XG
> @0@
> zEa>wl=A~kDye;kBxQ6(fyE1X<=zjXVLq$6FS~<$^Se}k|aiD^(j&!VjIf75{O<j*B
> zvA@{!Vc!bhZFnCx2yMTJ>v_1T6&-
> C?j*hnF{(dK!{&V*R@ppan?CDc^bc9#~2v7d}
> zleVu|K=Y!?)4oRLbg+?`5%xB+pjiXjOFr-
> $%4#})`{@VD>m5pmn_1E4&21>Jr7azK
> z)sFqJmwp^dvLyJX_5t>My%^QuJEJ_;Yv)HFee`rg-
> z3UyYE6e&$Dw2!nLg6lk8YjF
> zEz^I^pK~XU)1*e8v@_bA_C^amrpH#HhY#+Tkk{(+l-
> r{qwHxh^Gp7TME$BcKOFEcn
> zrTD=<z?XwbRs`R$=i_mHm3_wEyDofZRN`+%|G=8Fvnk)l6Rc<-
> (Abjp##zuFZohp^
> z?CH|VY5F#V?b5=7`}b*5rv%y%VL>^Of>uUYQ{L_!rLjsH`t{<<8MM2h8SRc%uq
> Vb`
> z+JtTRAbnwfb~ddj*COn_*=IaIB*6EsUAw-Dv9n}i3hj(CryTY-
> C&q$yaXap6XwEb<
> z+8N2<vixyf=$A(iON;?+93X!D+i$es!?$T}s1?l^(23B#S|7n_Ee+qV9@$H~;>yvE
> z20}vGk+#gFZTJ9Ra$+r{efWqmq&@@Te&)$zCkta|<y#$TTZ9>HYoG#Y#@70x
> 7~z8U
> zcdkPZubeM)JitHrd_3<EJ^JB$rJdC}82bOits9inN=I8+ryd5jq%S7^z(<TBJjb!`
> zm;-*i=5NFLx~4-
> IZ4NV|&EbqNL7NOwkMjoD7Ux7)cC3=~S~~cWmp}jbo%Z)jFw$wL
> z-_SOEQG7BZ_y}L|EXuy)c{+go-
> vQdH_F=@|JijnL3$vi(Q%BS9zy12$zA$WaE&ciA
> zkuPk=&?oo^UwICH%f8F|0MCaap1aRhN4pSzxBb%C*EfM4-ngb;V=;a-
> KTXpZ^LZ;W
> zX>C2rm$n1n;3L)<Zu6hmf1GX9;kD;?JZtlJ=YJdP;;Yd4y<7frJi-52!~4*@TGoHt
> z7JS8-fvNw?g9RBO#Eg~$ru0(s%R<cQ!{!lkeKl=!)4urgk3VR`{0y2{)1H<F|Aqci
> z>>K#6ji2inKZ_%He-k7mmIj-%ZUswfnvouAxyFZhF=JevN_4a6x_)gm^%-
> ?Ct=H-N
> zFDWJ5lNJP-
> >+MRt2KL~Cw5{5OkLvjOk=tLJzgsXT7PJbZg#kihaZO7C7S*(%MXVoK
> z7-
> &`ul@I(M1={mkd03A5m%ZSA_d)xnG%LWOSU20zY)bp=gXR}}RM(%&?7v(;dE
> d4P
> zv}`WRt|25A*0QCAAvVOn)8O{8r1?P>G(XT>B0Ip0G)%3*`^xN$5^ZbP{ts?Gzh
> C%w
> z6Ey$h_h~{6Tgnbp?XW%AmG;>O%`f<<`hSW2m-
> jE8%d>I+%IepV=2aIG3qyHdTf02X
> z58*v;O&iJzw4$s4OUmSS%B*27G0WeArVZ=&+%bRo$N^dy?n(u`<~)7!M0St
> qSOO7c
> zhj;I!(IJ&+ZUEb2d$0@p^J|sU`vo6y|H4@%`!Dwod?ppo`-
> eZXQu$oWS4b?ZUzz6D
> zb*Ajv4wMyAo-%9N(Y!z#n#=7y*WZ$6)v%<LSEA`R-
> Yb+9e!O>w7RUQZeHmQWy{SX#
> zPj2h70@kLRH;U-(#0Z*Evz)Y>UB^-Sq4@<Lv46mMEBmkQ-
> )yjkVh+!$?Lsqkf)+)2
> z(!$7UlwGe9W!7<~c_9uomvv?Y+R<$8=TTukbob6}>56H4B9A@w#(^DarjMBs
> Huh>o
> zKR>u<G~S@ZP{)6M{+XtY9890osz_OEKRc|l^a;LU?y762;r`i@=fGzeL$f<1(R44
> K
> z!_hvpq;ViEi1MbaaCe$lm-
> `j+H617=xH6qTb+W8xl=pxm3ujTfuO+4XSd_q$W_(6;
> z`Qmf$6;F6PZC|^J-
> VOJqdEr&1Pw)+62WQ6I_J+?d<~#?wU<_qWolKv42+C^UMJrlH
> z(2}Iuv>?`B=I4d6o-hx}S+|OQ{rRV2{PZLJYJjW9zo3~looJfQ$_UeatVzO`$06(b
> z>cB2Jp0F1x3zyEHqjwV`Xo{y9!8eQ@oO`qX`sYVH!*kw>`{f#*(Pp$yqM0GCw5
> C%c
> zt$ZzxmbQqX1&xC#E4n((jq;()m>QJH>3LDUG&fR5{0$#v)c2q{Vby4MJ$D|v&N
> QvM
> zy~I>MJAGQx{L9hw8s#ZH(1B+1_?XXn7be!`=jpoqY#mO^T1C?GHqo@QeLSt{
> (u~%;
> z(Sl}2`Vf4AZ`{s5u&+kX@2dYseekh6-
> ^W@;(fS^(X?2%mTJc&uEqbLsKXZrByyzN~
> z5$Q{F>U-
> 0yy47e#ohme=R%J>Lu1M2^TqLFiavcJ=4>WLID+3?+AqRQrfxgU`0I7dL
> zQe9fsI)+wtYD$Ze!wJ3^wEcYczr^{8S_ez+gCkg9r?pF>S>Za`G^i_W9MGB8_kN
> 95
> zcWX&Y+s4y^<Os@YQitX>3Z{&P0W`aTAI+-
> oLo@4n(TuvDlpb1*((6=}m|ojmp9US}
> z-
> ~&J8AP+szH@|5(Eq*nIR(5J8?QQ7OLGr>E_=K~2_8p<b`IXiO{4CRG$dDm;mVB
> 1h
> zIE)s(+K6_(^A>F#)sHp}=}znWb)wa8wxMO*p9@>Y5dWT#G85|2+_>755gS5t
> qJwC5
> z!$6uH6+p8hYv_SI=qLvt_#p@R1<f1MlD3U$WtSGTu1`m42lf`Wh$i@eH3w&Ec
> >ln@
> z>lk(n{n-_K*8<Zmcr8lDT%PyoWJ;^+OKbbQPJ2Iok8(a3P1{r6qAer))5f=Y(z?E#
> zX+_spX-S7>w4hZS&2JGyS;<k9*|Y&=CPmP^#QJ(54?4=h2mZzF5@~s-
> 7PPu&d-`l}
> zcc~ZpVP{qMb~Gu}hu{O|EbsSsv2V{kzcr`>#?ktel$1Z`vi#KO+O%<4UpmC+q5
> G#y
> zpgkXtqny;SwEf)?wB_x=v}t%hT0f{et?u24R=nAcmUZDez21Trw@;=;uQikL;tsF
> S
> z(oQXDdABySsz(P}+rJxa9NI_9Ll5*pFZ6F1(vzk(tVOVm^IN=sVBfLc{N?#M>cD*
> R
> z{RP$|K0ki~J)g#e(q|+3)0d00=t%Z#I-D_`4yLEkKGf%v4=88CyR>8c7}`E=6m5NH
> zIBiWCMq9=Xr7dH)zc@x7bd-
> Y+{E&k@^gti<Zs0miiLN7k$JsrvHxJmKmwJDp*1??X
> z?SndK{V=&jV_MOxGkv)vn+nz}r~KuMWctX0x%7GFEIKr2I_1uqN(a&>Gty}P^
> hvaT
> z+9xtb9(0t05B!jWF6cpeS@({V*1WO4-FY0}!#foA|E1m^8H^)ymbJoI!hFD-{-
> _17
> z!|@Gh+XpFhA!j?C+p&etZ262%ZCpnu*RSS!t)SzpmQntSB_#kl%E1SI$er81nY
> O<7
> zHcgL<An3+i#dyd22eyszjxqDn@9zxiAm5*2PGeodI+ihIGCyl^JrZMR(>tT-
> #QHUK
> z<!~-
> tK6HTZse9?tzTFZR_vVlWjfQgY74Y6*Q_3hxPl%SfpcA^W&Tzl4W}kHoylcVv
> z=3l<^()=weW*rt-
> Te&Zepf7MQgw64<B+<CqyjC_(q&33^(cbh=={Wm#Y5!ij#?My(
> z()nvv(%$J)BoBBY16k;RF4l?n^k?z@fo=U`@2?H(!+J5EEU{O@yg)s$=fk*4e>a6
> b
> z>fDi1BEuy3H|*5kMo1v7(ZK^=j1$PhZ|>V$IJ;-
> v|F!Q2N~wnx>cO@@!`@q~3&sF|
> zIvIRFp#QEw^BL!@I5Wn%H~a0zz&Y&S9_NPsy=a>4$^PKj2G2lTpV?fWO&o9
> G{<)5N
> z0h}&k+78AxoK@nym1VG|z-Jo<#(1gs(--jte|SRvo`gTxlz$&3SLlCtqW^m`<JI5g
> z#Hqi_;qQx>UH;BRiwlv*_ezNQ4W|~TBF{5Wi;?~RIi$il1AlXoH>gh`@?1}?-
> dZew
> z$HVO+f5*e^B>xh^c>ee`mDLf)xoW$zfNW>A-
> Hm^@qhsaVR!%bd_wqMdVB*Ayk&J1K
> zb&MhgsX!Vultumx)z1}Sog)}U^HciM)*;O)zeflawsWKht;{5l25sx$R|q`dh0Jr6
> zzCa=C=m1^WWBb#$?VRXtS9`iQ*oE%D=T7(2eCWYUe~J5(ed+$Vs&sFN3*CL
> gp1y7C
> zNRUze=<oujO0dBH^bf|+>5g7>yIVQB&)*Z=pU2<i@V5{TmegU?R$~74L#Fw
> =3zUHe
> zypVxx`ulIgkC$o-
> =3kdNb^v|d(UtCgq@#QM4Z}VD7Uo_?kP`Fv9QOd^HJaq%@0^gI
> zt?=IY&{OJwF6b;#$x;aLHFHdVy58QFZu9p6cRul<JN#XRjFC14%J};PJ)P6H`8x<L
> ze~Z6`fG+6#t9Ib>4%4~KFL1qY^7jZg`CABm%->STG=C#;6BrAC#xcq?XnB-
> rd|U>d
> z&<z`<R9lj`tmtqD9ltBDL<irftViyfNLQkx-7C^n{=VVbKvyapR8iuZ%=7#7K9y*H
> zx5_1OqPH7K9{x7rNC$7&FDlJG(?`r5Gk`94<nI=y^rQ#(?$QrG{9uF|g;!}&H~w~`
> z3%}#)=BUS|uFkZ1_J{Q7(IX?={jP{k53a57@%!@2uU8=0fGtxW;8%VN7rMmn
> $1gIz
> zNlBnz?i7_c3&WZ2qETHbzqJEh<oD>{UDBmK;atlw;LP#csXb-
> 6)XBVvVZ*cyI3GFZ
> z?E!R_-zlGc#a53CUA*bxi326h)1Z6Tk__6B<U~7~I@67-
> R}4){{_CI3DWOm5W*e{t
> zn_3%idfJ9JV(4TOD>|8AZG=-
> z?dkf;Df)9sLqnHN9jE<k78#Oc`p$_%bh23mMPDg8
> zVGA}5?62F}z7`#8WJ&o9#K&UQSj}H}w>>@nQF-
> TD!k_`+$2&Kv;5FZ3J*vE3FXv&4
> z?d#VAP8S_aaHS*BmI`7JTc{{bAMad~9)5MIM1N@JpYqx6;odO@vYHN#^*Z?
> *0=5O4
> z2KA@Ikrs3~%2J7uE(3@7JC~y?vow=N@uP?LY0fJlbTIO-
> ^{{>3xhMhYgArCQgtd{5
> zbOC>zt&H&a@nf1huoG>Muq{<zZUbvcH?d!|E7q0vMcB~3`qs2xjgdCQwg`LL
> wKThg
> zWy}Y|fc%annY1jzNiQ#TLN5chOxl0ln%1GTr-7XcdxJD+Y?rZs=Z&eYN4&-
> ypD>XA
> z`1L=AF39xPXHU_LMn05dq8GN<zTx<rwxnYt%4z6GyP_P55m|wDF?KSh^Lg=
> ~JiZJA
> z-
> X$C!*h2Cg?%s%gyjf^iEYm;#^b<|*+>EwFsk&JgY_WaA`4>5z&wzHuxN_T6Gy-
> Td
> z6N2bxK1VkUXooY|lZ<%xw+W#;r;e6rBYZQl>eC6dBBly|gTwbBw#D}K>kmdD`
> eS{x
> z8|5VFXjc<YB~J9FZB6~?i-j|&=)hLGd2pM=jRV{0@`go})6`e;f?vb#<mz;JT{hi0
> zmaF0*#|P=w7yD_?%!#xj*2Adp)hPh`Bc=`SPrF{JLAzfKq1~-
> ((Vo_|Wg79zLX$U?
> z+m-
> B3umM||UBeh{u)MK9?d{Z%@1t>a;LXPR_(1n2^m0g$@>0he@wB%ipZ~LN*
> f6wd
> znC7w$Y447q)%<Sl^WmN7@LL_|(2(|YcxcC$#^)nCOBpSOPUwaWLz|{)E*~*v
> Sbtg@
> z=}viX_n`a<!xVftl=5E!$0v@E{6|uHOI^?j-
> KO?R%QN4)DMS0yk|;0AOX*8z=6>?>
> zm@|=%j2kF*Ko@kDW~(e3e4X^p7@FI_o7ObqIWS=aotQqJ&Sp)a^NVNlH)E
> Of)v9cX
> zORKWz;<5}`1|IOPX~gf8SQa{7wBDw^u$+AUNMrx!)^wp2{EljK`$n{HSU37&;%
> GYl
> z>HGYh&Ik0xN26%p&~CK(wHW5n(cEAcf(*;!Iq13lZECZ$Jp6~Qw6_M()Q&AEo
> !?Q+
> z4sxXoFG~reK|>jMRJ$+K*QMDji^h8YE6<<$bu|}%R>cCxHqZUdF8jx)7JrRYKFt
> 7f
> z%lPdsY~fFg82@fpClHLkqL!o*mpQ?X9*hx;b&MhvNQ354LcoBa^3Z`U9&~<`A
> KjZ;
> zQvzwwxEv_851GDhb$ms-
> KAxZRrm$QoKpA+zYhYGD=PJI(6}`{j*}nk5tNFpP$87d1
> zueT5X?uYl7j0?m3=*r0I5|@Tor(*+sB~A=h=;xV-
> <p9}M+mrb_`0SDNpPwGdZyZh@
> z+(|h-
> 0{FXeU;6BW9+HM{AI{C}CuyKVhUKR*)*Wo?NvC`I(z$Uh>DPNV<j}dtdyo|)
> zcz^usFEU@WYq8`39{?H1GK#)@-
> G@$e^OGp(6H50_9yGdNe|P!_9e=Zio(H^;VOgN)
> zNQdf_-
> ^pK(Bc1v872kZNAHt^(=I}aDQ(q2V$f)w`_O|rnvLK0L9Dnx77%BVb<KO6q
> ztCwW@{;iv|tZO4ZA7ofwj;l=xI?C@HDzUtOJLx<2A{VnhqGNA1pgUjeku>a$R
> =+cl
> z@?Nh)kYRbWANqj4<ma{HZ${Da)c$mO(oi}zaWI|WJW%jvLpt^G5IXbeC^|D`
> 6z%WL
> z?@rYI!#Lvfh~*7E=nQ`&`62)>WK723y5-ScbaLP;bZ%68{+_;V37`x-
> ENe7=H9gSD
> zplxl!=<{Albm8qz5=euFGVo~prNvzSQuFr_|LvnfgWs)|rqhs?%4e;)yi!31vi}Ek
> CuCXov
> 
> literal 0
> HcmV?d00001
> 
> diff --git a/vs2012/liteagent/LiteAgent.vcxproj
> b/vs2012/liteagent/LiteAgent.vcxproj
> index b133576..967a3a1 100644
> --- a/vs2012/liteagent/LiteAgent.vcxproj
> +++ b/vs2012/liteagent/LiteAgent.vcxproj
> @@ -193,11 +193,13 @@
>      </CustomBuildStep>
>    </ItemDefinitionGroup>
>    <ItemGroup>
> -  </ItemGroup>
> +    <ClCompile Include="..\..\src\liteagent\LiteAgent.cpp" />
> +     </ItemGroup>
>    <ItemGroup>
> -  </ItemGroup>
> +    <ClInclude Include="..\..\src\liteagent\LiteAgent.h" />
> +     </ItemGroup>
>    <ItemGroup>
> -    <CustomBuild Include="..\..\src\win32stubagent\messages.mc">
> +    <CustomBuild Include="..\..\src\liteagent\messages.mc">
>        <FileType>Document</FileType>
>        <Command
> Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mc
> %(FullPath)</Command>
>        <Command
> Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mc
> %(FullPath)</Command>
> @@ -210,10 +212,10 @@
>      </CustomBuild>
>    </ItemGroup>
>    <ItemGroup>
> -    <ResourceCompile Include="..\..\src\win32stubagent\w32xagent.rc" />
> +    <ResourceCompile Include="..\..\src\liteagent\liteagent.rc" />
>    </ItemGroup>
>    <ItemGroup>
> -    <Image Include="..\..\src\win32stubagent\xen.ico" />
> +    <Image Include="..\..\src\liteagent\xen.ico" />
>    </ItemGroup>
>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
>    <ImportGroup Label="ExtensionTargets">
> diff --git a/vs2013/liteagent/LiteAgent.vcxproj
> b/vs2013/liteagent/LiteAgent.vcxproj
> index a8f59a3..c1b5c5d 100644
> --- a/vs2013/liteagent/LiteAgent.vcxproj
> +++ b/vs2013/liteagent/LiteAgent.vcxproj
> @@ -197,11 +197,13 @@
>      </CustomBuildStep>
>    </ItemDefinitionGroup>
>    <ItemGroup>
> +    <ClCompile Include="..\..\src\liteagent\LiteAgent.cpp" />
>    </ItemGroup>
>    <ItemGroup>
> +    <ClInclude Include="..\..\src\liteagent\LiteAgent.h" />
>    </ItemGroup>
>    <ItemGroup>
> -    <CustomBuild Include="..\..\src\win32stubagent\messages.mc">
> +    <CustomBuild Include="..\..\src\liteagent\messages.mc">
>        <FileType>Document</FileType>
>        <Command
> Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">mc
> %(FullPath)</Command>
>        <Command
> Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">mc
> %(FullPath)</Command>
> @@ -214,10 +216,10 @@
>      </CustomBuild>
>    </ItemGroup>
>    <ItemGroup>
> -    <ResourceCompile Include="..\..\src\win32stubagent\w32xagent.rc" />
> +    <ResourceCompile Include="..\..\src\liteagent\liteagent.rc" />
>    </ItemGroup>
>    <ItemGroup>
> -    <Image Include="..\..\src\win32stubagent\xen.ico" />
> +    <Image Include="..\..\src\liteagent\xen.ico" />
>    </ItemGroup>
>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
>    <ImportGroup Label="ExtensionTargets">
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.