which included commits to RCS files with non-trunk default branches.
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.2 2005/08/29 21:15:47 byordano
+some docs added
+
+*/
+
+// Description:
+// This class is the CDBPreProcessor interface,
+// supposed to be implemented by any detector
+// interested in immediate processing of data
+// which is retrieved from DCS.
+// For every particular run set of aliases and
+// their corespoding value sets are returned.
+// Usage schema:
+// 1) virtual void Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
+// This method is called at the begining of data retrieval.
+// run: run number
+// startTime: when the run started
+// endTime: when the run finished
+//
+// 2) virtual void Process(const char* alias, TList& valueSet,
+// Bool_t hasError)
+//
+// This method is called for every particular alias which the detector
+// is registered in the configuration (see AliShuttleConfig).
+// alias: alias name
+// valueSet: collection of AliDCSValue
+// hasError: flag indicating if some error has happened during
+// the retrieaval of the data for this alias.
+//
+// 3) virtual void Finalize()
+// This method is called after the last alias has been processed.
+//
+
+
+#include "AliCDBPreProcessor.h"
+
+#include "AliShuttle.h"
+#include "AliLog.h"
+
+ClassImp(AliCDBPreProcessor)
+
+AliCDBPreProcessor::AliCDBPreProcessor(const char* detector):
+ TNamed(detector, "")
+{
+ SetTitle(Form("AliCDBPreProcessor for %s subdetector.", detector));
+}
+
+AliCDBPreProcessor::~AliCDBPreProcessor() {
+
+}
+
+Int_t AliCDBPreProcessor::GetRun() const {
+ //
+ // Returns current run number.
+ //
+
+ if (!fShuttle) {
+ AliError(Form("Not registered AliCDBPreProcessor: %s",
+ GetName()));
+ return -1;
+ }
+
+ return fShuttle->GetCurrentRun();
+}
+
+UInt_t AliCDBPreProcessor::GetStartTime() const {
+ //
+ // Returns currernt run start time.
+ //
+ if (!fShuttle) {
+ AliError(Form("Not registered AliCDBPreProcessor: %s",
+ GetName()));
+ return 0;
+ }
+
+ return fShuttle->GetCurrentStartTime();
+}
+
+UInt_t AliCDBPreProcessor::GetEndTime() const {
+ //
+ // Returns current run end time.
+ //
+ if (!fShuttle) {
+ AliError(Form("Not registered AliCDBPreProcessor: %s",
+ GetName()));
+ return 0;
+ }
+
+ return fShuttle->GetCurrentEndTime();
+}
+
+Bool_t AliCDBPreProcessor::Store(const char* specType, TObject* object,
+ AliCDBMetaData* metaData)
+{
+ //
+ // Store object and metaData into the default AliCDBStorage.
+ // Storage path: <detector>/DCS/<specType>
+ //
+
+ if (!fShuttle) {
+ AliError(Form("Not registered AliCDBPreProcessor: %s",
+ GetName()));
+ return kFALSE;
+ }
+
+ return fShuttle->Store(GetName(), specType, object, metaData);
+}
+
--- /dev/null
+#ifndef ALI_CDB_PRE_PROCESSOR_H
+#define ALI_CDB_PRE_PROCESSOR_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class is the CDBPreProcessor interface,
+// supposed to be implemented by any detector
+// interested in immediate processing of data
+// which is retrieved from DCS.
+//
+
+#include <TNamed.h>
+
+class AliShuttle;
+class AliCDBMetaData;
+
+class AliCDBPreProcessor: public TNamed {
+
+ friend class AliShuttle;
+
+public:
+ AliCDBPreProcessor(const char* detector);
+ virtual ~AliCDBPreProcessor();
+
+ Int_t GetRun() const;
+ UInt_t GetStartTime() const;
+ UInt_t GetEndTime() const;
+
+ Bool_t Store(const char* specType, TObject* object,
+ AliCDBMetaData* metaData);
+
+ void SetShuttle(AliShuttle* shuttle) {fShuttle = shuttle;};
+ AliShuttle* GetShuttle() const {return fShuttle;};
+
+protected:
+
+ virtual void Initialize(Int_t /*run*/, UInt_t /*startTime*/,
+ UInt_t /*endTime*/) {};
+
+ virtual void Finalize() {};
+
+ virtual void Process(const char* alias, TList& valueSet,
+ Bool_t hasError) = 0;
+
+private:
+
+ AliShuttle* fShuttle;
+
+ ClassDef(AliCDBPreProcessor, 0);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.3 2005/08/30 10:53:23 byordano
+some more descriptions added
+
+*/
+
+//
+// This class represents the AliDCSClient.
+// The client used for data retrieval from DCS server.
+// There are two way for retrieving data from the server.
+// 1) asking for DP (DataPoint) - usually changed frequently.
+// 2) asking for Alias (Alias) - alias should be the same through whole
+// experimnet.
+//
+// There are two type of read operations:
+// Asking for single alias/dp or asking for set of aliases/dp
+//
+// In case of ServerError the coresponding error code and
+// error string (description) could be got by GetServerErrorCode() and
+// GetServerErrorString()
+//
+
+#include "AliDCSClient.h"
+
+#include "AliDCSValue.h"
+#include "AliLog.h"
+
+#include <TList.h>
+#include <TMap.h>
+#include <TObjString.h>
+#include <TSystem.h>
+
+ClassImp(AliDCSClient)
+
+const Int_t AliDCSClient::fgkBadState;
+
+const Int_t AliDCSClient::fgkInvalidParameter;
+
+const Int_t AliDCSClient::fgkTimeout;
+
+const Int_t AliDCSClient::fgkBadMessage;
+
+const Int_t AliDCSClient::fgkCommError;
+
+const Int_t AliDCSClient::fgkServerError;
+
+const char* AliDCSClient::fgkBadStateString = "BadState";
+
+const char* AliDCSClient::fgkInvalidParameterString = "InvalidParameter";
+
+const char* AliDCSClient::fgkTimeoutString = "Timeout";
+
+const char* AliDCSClient::fgkBadMessageString = "BadMessage";
+
+const char* AliDCSClient::fgkCommErrorString = "CommunicationError";
+
+const char* AliDCSClient::fgkServerErrorString = "ServerError";
+
+AliDCSClient::AliDCSClient(const char* host, Int_t port, UInt_t timeout,
+ Int_t retries):
+ fSocket(NULL), fTimeout(timeout), fRetries(retries),
+ fServerErrorCode(AliDCSMessage::kNoneError), fServerError("")
+{
+ //
+ // host: DCS server host
+ // port: DCS server port
+ // timeout: in case of communication error or socket read/write this
+ // timeout will be used before the next try is made.
+ // retries: the number of retries after which the connection is
+ // is considered as invalid and error is returned.
+ //
+
+ Int_t tries = 0;
+
+ while (tries < fRetries) {
+ fSocket = new TSocket(host, port);
+ if (fSocket->IsValid()) {
+ AliDebug(1, Form("Connected to %s:%d", host, port));
+ fSocket->SetOption(kNoBlock, 1);
+ break;
+ }
+
+ AliDebug(1, Form("Connection timeout! tries <%d> ...", tries));
+
+ delete fSocket;
+ fSocket = NULL;
+
+ gSystem->Sleep(fTimeout);
+ tries ++;
+ }
+}
+
+AliDCSClient::~AliDCSClient() {
+ if (fSocket) {
+ Close();
+ delete fSocket;
+ }
+}
+
+Int_t AliDCSClient::SendBuffer(const char* buffer, Int_t size) {
+
+ Int_t sentSize = 0;
+ Int_t tries = 0;
+
+ while (sentSize < size && tries < fRetries) {
+
+ Int_t sResult = fSocket->Select(TSocket::kWrite, fTimeout);
+
+ if (sResult == 0) {
+ AliDebug(1, Form("Timeout! tries <%d> ...", tries));
+ tries ++;
+ continue;
+
+ } else if (sResult < 0) {
+ AliDebug(1, Form("Communication error <%d>!",
+ fSocket->GetErrorCode()));
+ return AliDCSClient::fgkCommError;
+ }
+
+ sResult = fSocket->SendRaw(buffer + sentSize, size - sentSize,
+ kDontBlock);
+
+ if (sResult > 0) {
+ sentSize += sResult;
+ } else {
+ AliDebug(1, Form("Communication error <%d>!",
+ fSocket->GetErrorCode()));
+ return AliDCSClient::fgkCommError;
+ }
+ }
+
+ if (tries == fRetries) {
+ return AliDCSClient::fgkTimeout;
+ }
+
+ return sentSize;
+}
+
+Int_t AliDCSClient::ReceiveBuffer(char* buffer, Int_t size) {
+
+ Int_t receivedSize = 0;
+ Int_t tries = 0;
+
+ while (receivedSize < size && tries < fRetries) {
+
+ Int_t sResult = fSocket->Select(TSocket::kRead, fTimeout);
+
+ if (sResult == 0) {
+ AliDebug(1, Form("Timeout! tries <%d> ...", tries));
+ tries ++;
+ continue;
+
+ } else if (sResult < 0) {
+ AliDebug(1, Form("Communication error <%d>",
+ fSocket->GetErrorCode()));
+ return AliDCSClient::fgkCommError;
+ }
+
+ sResult = fSocket->RecvRaw(buffer + receivedSize,
+ size - receivedSize, kDontBlock);
+
+ if (sResult > 0) {
+ receivedSize += sResult;
+ } else {
+ AliDebug(1, Form("Communication error <%d>",
+ fSocket->GetErrorCode()));
+ return AliDCSClient::fgkCommError;
+ }
+ }
+
+ if (tries == fRetries) {
+ return AliDCSClient::fgkTimeout;
+ }
+
+ return receivedSize;
+}
+
+Int_t AliDCSClient::SendMessage(AliDCSMessage& message) {
+
+ message.StoreToBuffer();
+
+ AliDebug(2, "Sending message.\n");
+ message.Print();
+
+ return SendBuffer(message.GetMessage(), message.GetMessageSize());
+}
+
+Int_t AliDCSClient::ReceiveMessage(AliDCSMessage& message) {
+
+ char header[HEADER_SIZE];
+
+ Int_t sResult;
+
+ if ((sResult = ReceiveBuffer(header, HEADER_SIZE)) < 0) {
+ AliDebug(1, Form("Can't receive message header! Reason: %s",
+ GetErrorString(sResult)));
+ return sResult;
+ }
+
+ if (!message.SetRawHeader(header)) {
+ return AliDCSClient::fgkBadMessage;
+ }
+
+ if ((sResult = ReceiveBuffer(message.GetBody(),
+ message.GetBodySize())) < 0) {
+
+ AliDebug(1, Form("Can't receive message body! Reason: %s",
+ GetErrorString(sResult)));
+ return sResult;
+ }
+
+ message.LoadFromBuffer();
+
+ AliDebug(2, "Message received.");
+ message.Print();
+
+ return HEADER_SIZE + sResult;
+}
+
+Int_t AliDCSClient::GetValues(AliDCSMessage::RequestType reqType,
+ const char* reqString, UInt_t startTime, UInt_t endTime, TList& result)
+{
+ if (!IsConnected()) {
+ AliError("Not connected!");
+ return AliDCSClient::fgkBadState;
+ }
+
+ Int_t sResult;
+ AliDCSMessage requestMessage;
+ requestMessage.CreateRequestMessage(reqType, startTime, endTime,
+ reqString);
+
+ if ((sResult = SendMessage(requestMessage)) < 0) {
+ AliError(Form("Can't send request message! Reason: %s",
+ GetErrorString(sResult)));
+ Close();
+ return sResult;
+ }
+
+ sResult = ReceiveValueSet(result);
+
+ Close();
+
+ return sResult;
+}
+
+Int_t AliDCSClient::GetValues(AliDCSMessage::RequestType reqType,
+ UInt_t startTime, UInt_t endTime, TMap& result)
+{
+ if (!IsConnected()) {
+ AliError("Not connected!");
+ return AliDCSClient::fgkBadState;
+ }
+
+ AliDCSMessage multiRequestMessage;
+ multiRequestMessage.CreateMultiRequestMessage(reqType,
+ startTime, endTime);
+
+ TList requests;
+
+ TIter iter(&result);
+ TObjString* aRequest;
+
+ // copy request strings to temporary TList because
+ // TMap doesn't guarantee the order of elements!!!
+ while ((aRequest = (TObjString*) iter.Next())) {
+ requests.Add(aRequest);
+ if (!multiRequestMessage.AddRequestString(aRequest->String()))
+ {
+ return AliDCSClient::fgkInvalidParameter;
+ }
+ }
+
+ Int_t sResult;
+ if ((sResult = SendMessage(multiRequestMessage)) < 0) {
+ AliError(Form("Can't send request message! Reason: %s",
+ GetErrorString(sResult)));
+ Close();
+ return sResult;
+ }
+
+ result.SetOwner(0);
+ result.Clear();
+
+ TIter reqIter(&requests);
+ while ((aRequest = (TObjString*) reqIter.Next())) {
+ TList* resultSet = new TList();
+ resultSet->SetOwner(1);
+
+ if ((sResult = ReceiveValueSet(*resultSet)) < 0) {
+ AliError(Form("Can't get values for %s!" ,
+ aRequest->String().Data()));
+
+ delete resultSet;
+ break;
+ }
+
+ result.Add(aRequest, resultSet);
+ }
+
+ if (sResult < 0) {
+ result.DeleteValues();
+ result.Clear();
+
+ requests.Delete();
+ } else {
+ result.SetOwner(1);
+ }
+
+ Close();
+
+ return sResult;
+}
+
+Int_t AliDCSClient::ReceiveValueSet(TList& result) {
+
+ Int_t sResult;
+
+ AliDCSMessage responseMessage;
+ if ((sResult = ReceiveMessage(responseMessage)) < 0) {
+ AliError(Form("Can't receive response message! Reason: %s",
+ GetErrorString(sResult)));
+ return sResult;
+ }
+
+ UInt_t valueCount;
+
+ if (responseMessage.GetType() == AliDCSMessage::kCount) {
+ valueCount = responseMessage.GetCount();
+
+ } else if (responseMessage.GetType() == AliDCSMessage::kError) {
+ fServerErrorCode = responseMessage.GetErrorCode();
+ fServerError = responseMessage.GetErrorString();
+
+ return AliDCSClient::fgkServerError;
+
+ } else {
+ AliError("Bad message type received!");
+ return AliDCSClient::fgkBadMessage;
+ }
+
+ UInt_t receivedValues = 0;
+
+ AliSimpleValue::Type valueType = AliSimpleValue::kInvalid;
+
+ while (receivedValues < valueCount) {
+
+ AliDCSMessage message;
+
+ if ((sResult = ReceiveMessage(message)) < 0) {
+ AliError(Form("Can't receive message! Reason: %s",
+ GetErrorString(sResult)));
+ return sResult;
+ }
+
+ if (message.GetType() == AliDCSMessage::kResultSet) {
+
+ if (valueType == AliSimpleValue::kInvalid) {
+ valueType = message.GetSimpleValueType();
+ } else {
+ if (valueType != message.GetSimpleValueType()) {
+ AliError("Unexpected value type!");
+ return AliDCSClient::fgkBadMessage;
+ }
+ }
+
+ receivedValues += message.GetValues(result);
+
+ if (receivedValues > valueCount) {
+ AliError("Message contains more values than expected!");
+ return AliDCSClient::fgkBadMessage;
+ }
+
+ } else if (message.GetType() == AliDCSMessage::kError) {
+ fServerErrorCode =
+ responseMessage.GetErrorCode();
+ fServerError = responseMessage.GetErrorString();
+
+ return AliDCSClient::fgkServerError;
+ } else {
+ AliError("Bad message type received!");
+ return AliDCSClient::fgkBadMessage;
+ }
+ }
+
+ return receivedValues;
+}
+
+Int_t AliDCSClient::GetDPValues(const char* dpName, UInt_t startTime,
+ UInt_t endTime, TList& result)
+{
+ //
+ // Reads a values from the server which correspond to this
+ // DataPoint (dpName) in time interval (startTime - endTime).
+ // result: Collection of AliDCSValue which contains the read values.
+ //
+ // Returns:
+ // If >= 0 , the number of values read.
+ // if < 0, the error code which has occured during the read.
+ //
+
+ return GetValues(AliDCSMessage::kDPName,
+ dpName, startTime, endTime, result);
+}
+
+Int_t AliDCSClient::GetAliasValues(const char* alias, UInt_t startTime,
+ UInt_t endTime, TList& result)
+{
+ //
+ // Reads a values from the server which correspond to this
+ // alias (alias) in time interval (startTime - endTime).
+ // result: Collection of AliDCSValue which contains the read values.
+ //
+ // Returns:
+ // If >= 0 , the number of values read.
+ // if < 0, the error code which has occured during the read.
+ //
+
+ return GetValues(AliDCSMessage::kAlias,
+ alias, startTime, endTime, result);
+}
+
+Int_t AliDCSClient::GetDPValues(UInt_t startTime, UInt_t endTime,
+ TMap& result)
+{
+ //
+ // For every key of 'result' (which must be TObjString)
+ // reads a valueSet. The key represents particular DataPoint to be read.
+ // For all DataPoints time interval (startTime - endTime) is used.
+ // After the read, the correspoding value for every key is a
+ // TList - collection of AliDCSValue, or result is an empty map in
+ // case of error.
+ //
+ // Returns:
+ // If >= 0 , the number of values read.
+ // if < 0, the error code which has occured during the read.
+ //
+
+ return GetValues(AliDCSMessage::kDPName, startTime, endTime, result);
+}
+
+Int_t AliDCSClient::GetAliasValues(UInt_t startTime, UInt_t endTime,
+ TMap& result)
+{
+ //
+ // For every key of 'result' (which must be TObjString)
+ // reads a valueSet. The key represents particular Alias to be read.
+ // For all aliases time interval (startTime - endTime) is used.
+ // After the read, the correspoding value for every key is a
+ // TList - collection of AliDCSValue, or result is an empty map in
+ // case of error.
+ //
+ // Returns:
+ // If >= 0 , the number of values read.
+ // if < 0, the error code which has occured during the read.
+ //
+
+ return GetValues(AliDCSMessage::kAlias, startTime, endTime, result);
+}
+
+Bool_t AliDCSClient::IsConnected() {
+ //
+ // Returns kTRUE if there is a valid connection to the server.
+ //
+
+ if (fSocket) {
+ return fSocket->IsValid();
+ }
+
+ return kFALSE;
+}
+
+void AliDCSClient::Close() {
+ //
+ // Close the connection.
+ //
+
+ if (fSocket) {
+ fSocket->Close();
+ }
+}
+
+const char* AliDCSClient::GetErrorString(Int_t code) {
+ //
+ // Returns a short string describing the error code.
+ // code: the error code.
+ //
+
+
+ switch (code) {
+ case AliDCSClient::fgkBadState:
+ return AliDCSClient::fgkBadStateString;
+
+ case AliDCSClient::fgkInvalidParameter:
+ return AliDCSClient::fgkInvalidParameterString;
+
+ case AliDCSClient::fgkTimeout:
+ return AliDCSClient::fgkTimeoutString;
+
+ case AliDCSClient::fgkBadMessage:
+ return AliDCSClient::fgkBadMessageString;
+
+ case AliDCSClient::fgkCommError:
+ return AliDCSClient::fgkCommErrorString;
+
+ case AliDCSClient::fgkServerError:
+ return AliDCSClient::fgkServerErrorString;
+
+ default:
+ AliErrorGeneral("AliDCSClient::GetErrorString",
+ "Unknown error code!");
+ return "UnknownCode";
+ }
+}
+
--- /dev/null
+#ifndef ALI_DCS_CLIENT_H
+#define ALI_DCS_CLIENT_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class represents the AliDCSClient.
+// The client used for data retrieval from DCS server.
+//
+
+#include "AliDCSMessage.h"
+
+#include <TSocket.h>
+
+
+class TList;
+class TMap;
+
+class AliDCSClient: public TObject {
+public:
+
+ static const Int_t fgkBadState = -1;
+
+ static const Int_t fgkInvalidParameter = -2;
+
+ static const Int_t fgkTimeout = -3;
+
+ static const Int_t fgkBadMessage = -4;
+
+ static const Int_t fgkCommError = -5;
+
+ static const Int_t fgkServerError = -6;
+
+ static const char* fgkBadStateString;
+
+ static const char* fgkInvalidParameterString;
+
+ static const char* fgkTimeoutString;
+
+ static const char* fgkBadMessageString;
+
+ static const char* fgkCommErrorString;
+
+ static const char* fgkServerErrorString;
+
+
+ AliDCSClient(const char* host, Int_t port, UInt_t timeout = 5000,
+ Int_t retries = 5);
+ virtual ~AliDCSClient();
+
+
+ Int_t GetDPValues(const char* dpName, UInt_t startTime, UInt_t endTime,
+ TList& result);
+
+ Int_t GetAliasValues(const char* alias, UInt_t startTime,
+ UInt_t endTime, TList& result);
+
+ Int_t GetDPValues(UInt_t startTime, UInt_t endTime, TMap& result);
+
+ Int_t GetAliasValues(UInt_t startTime, UInt_t endTime, TMap& result);
+
+
+ AliDCSMessage::ErrorCode GetServerErrorCode()
+ { return fServerErrorCode;};
+
+ const TString& GetServerError() {return fServerError;};
+
+
+ Bool_t IsConnected();
+
+ void Close();
+
+
+ static const char* GetErrorString(Int_t code);
+
+private:
+
+ TSocket* fSocket;
+
+ UInt_t fTimeout;
+
+ Int_t fRetries;
+
+ AliDCSMessage::ErrorCode fServerErrorCode;
+
+ TString fServerError;
+
+
+ Int_t SendBuffer(const char* buffer, Int_t size);
+
+ Int_t ReceiveBuffer(char* buffer, Int_t size);
+
+ Int_t SendMessage(AliDCSMessage& message);
+
+ Int_t ReceiveMessage(AliDCSMessage& message);
+
+ Int_t GetValues(AliDCSMessage::RequestType requestType,
+ const char* requestString, UInt_t startTime, UInt_t endTime,
+ TList& result);
+
+ Int_t GetValues(AliDCSMessage::RequestType requestType,
+ UInt_t startTime, UInt_t endTime, TMap& result);
+
+ Int_t ReceiveValueSet(TList& result);
+
+
+ ClassDef(AliDCSClient, 0);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.2 2005/08/30 10:53:23 byordano
+some more descriptions added
+
+*/
+
+
+//
+// This class is a wrapper of AliDCSMessage.
+// These are the messages which form AliDCSProtocol.
+// Every message has header and body. The body size is written in the header.
+// There are five message types:
+// 1) Request - used by the client to form a single request to DCS server
+// 2) Count - returned by the server to inidicate the total number of
+// values which would be sent to the client.
+// 3) ResultSet - returned by the server and contains part of values set
+// which forms the server resposen.
+// 4) Error - returned by the server in case of error
+// 5) MultiRequest - used by the client to form multi request.
+// This is a request which serves many aliases/dp at the same time
+// For all aliases/dp the same time interval is used.
+// Short description of the schema:
+// The client sends a request (Request or MultiRequest) and the server
+// returns:
+// 1) Count - the total number of values that the client should
+// expect.
+// 2) ResultSet* - every ResultSet message contains a part
+// of valueSet (some values) which the client should expect
+// The client can wait for ResultMessage until it gets
+// all values (total number) which was returned by the
+// Count message at the beginning of the ResutlSet sereie.
+// In case of error:
+// 1) Error - contains the error code and error description
+//
+
+#include "AliDCSMessage.h"
+
+#include "AliLog.h"
+
+#include <Bytes.h>
+#include <TObjString.h>
+
+#include <ctype.h>
+#include <assert.h>
+
+ClassImp(AliDCSMessage)
+
+AliDCSMessage::AliDCSMessage():
+ fMessage(NULL), fMessageSize(0), fType(kInvalid)
+{
+
+}
+
+AliDCSMessage::AliDCSMessage(const char* message, UInt_t size):
+ fMessageSize(size), fType(kInvalid)
+{
+ fMessage = new char[size];
+
+ memcpy(fMessage, message, size);
+}
+
+AliDCSMessage::~AliDCSMessage() {
+ DestroyMessage();
+ DestroyBuffer();
+}
+
+void AliDCSMessage::CreateRequestMessage(RequestType type,
+ UInt_t startTime, UInt_t endTime, const char* request)
+{
+ DestroyMessage();
+
+ fType = AliDCSMessage::kRequest;
+ fRequestType = type;
+ fStartTime = startTime;
+ fEndTime = endTime;
+ fRequestString = request;
+}
+
+void AliDCSMessage::CreateMultiRequestMessage(RequestType type,
+ UInt_t startTime, UInt_t endTime)
+{
+ DestroyMessage();
+
+ fType = AliDCSMessage::kMultiRequest;
+ fRequestType = type;
+ fStartTime = startTime;
+ fEndTime = endTime;
+}
+
+void AliDCSMessage::CreateCountMessage(UInt_t count) {
+ DestroyMessage();
+
+ fType = AliDCSMessage::kCount;
+ fCount = count;
+}
+
+void AliDCSMessage::CreateResultSetMessage(AliSimpleValue::Type type) {
+ DestroyMessage();
+
+ fType = AliDCSMessage::kResultSet;
+ fSimpleValueType = type;
+}
+
+void AliDCSMessage::CreateErrorMessage(ErrorCode errorCode,
+ const char* errorString)
+{
+ DestroyMessage();
+
+ fType = AliDCSMessage::kError;
+ fErrorCode = errorCode;
+ fErrorString = errorString;
+}
+
+/*
+void AliDCSMessage::CreateNextMessage() {
+ DestroyMessage();
+
+ fType = AliDCSMessage::kNext;
+} */
+
+void AliDCSMessage::DestroyMessage() {
+ fType = kInvalid;
+ ClearValues();
+ ClearRequestStrings();
+}
+
+void AliDCSMessage::SetBool(char* buf, Bool_t val) {
+ tobuf(buf, val);
+}
+
+void AliDCSMessage::SetByte(char* buf, Char_t val) {
+ tobuf(buf, val);
+}
+
+void AliDCSMessage::SetUByte(char* buf, UChar_t val) {
+ tobuf(buf, val);
+}
+
+void AliDCSMessage::SetInt(char* buf, Int_t val) {
+ tobuf(buf, val);
+}
+
+void AliDCSMessage::SetUInt(char* buf, UInt_t val) {
+ tobuf(buf, val);
+}
+
+void AliDCSMessage::SetFloat(char* buf, Float_t val) {
+ tobuf(buf, val);
+}
+
+Bool_t AliDCSMessage::GetBool(const char* buf) {
+ Bool_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+Char_t AliDCSMessage::GetByte(const char* buf) {
+ Char_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+UChar_t AliDCSMessage::GetUByte(const char* buf) {
+ UChar_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+Int_t AliDCSMessage::GetInt(const char* buf) {
+ Int_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+UInt_t AliDCSMessage::GetUInt(const char* buf) {
+ UInt_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+Float_t AliDCSMessage::GetFloat(const char* buf) {
+ Float_t val;
+ char* aBuffer = (char*) buf;
+
+ frombuf(aBuffer, &val);
+
+ return val;
+}
+
+TString AliDCSMessage::GetString(const char* buf, Int_t maxLen) {
+
+ for (Int_t k = 0; k < maxLen; k ++) {
+ if (buf[k] == 0) {
+ return TString(buf);
+ }
+ }
+
+ return TString(buf, maxLen);
+}
+
+void AliDCSMessage::StoreHeader() {
+
+ SetUByte(fMessage + ID_OFFSET, 'A');
+ SetUByte(fMessage + ID_OFFSET + 1, 'D');
+
+ SetUByte(fMessage + VERSION_OFFSET, 1);
+
+ SetUByte(fMessage + TYPE_OFFSET, fType);
+
+ SetUInt(fMessage + BODY_SIZE_OFFSET, fMessageSize - HEADER_SIZE);
+}
+
+void AliDCSMessage::StoreRequestMessage() {
+
+ fMessageSize = REQUEST_STRING_OFFSET +
+ fRequestString.Length() + 1;
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+
+ SetUByte(fMessage + REQUEST_TYPE_OFFSET, fRequestType);
+ SetUInt(fMessage + START_TIME_OFFSET, fStartTime);
+ SetUInt(fMessage + END_TIME_OFFSET, fEndTime);
+ strcpy(fMessage + REQUEST_STRING_OFFSET, fRequestString.Data());
+}
+
+void AliDCSMessage::StoreCountMessage() {
+
+ fMessageSize = COUNT_OFFSET + sizeof(UInt_t);
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+
+ SetUInt(fMessage + COUNT_OFFSET, fCount);
+}
+
+void AliDCSMessage::StoreResultSetMessage() {
+
+ TIter iter(&fValues);
+ AliDCSValue* aValue;
+
+ UInt_t valueDataSize = 0;
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ if (AliSimpleValue::IsDynamic(fSimpleValueType)) {
+ valueDataSize += 1;
+ }
+
+ valueDataSize += aValue->GetSize();
+ }
+
+ fMessageSize = VALUES_OFFSET + valueDataSize;
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+
+ SetUByte(fMessage + SVT_OFFSET, fSimpleValueType);
+ SetUInt(fMessage + VALUE_COUNT_OFFSET, GetValueCount());
+
+ UInt_t cursor = VALUES_OFFSET;
+
+ iter.Reset();
+
+ if (fSimpleValueType == AliSimpleValue::kBool) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ SetBool(fMessage + cursor, aValue->
+ GetSimpleValue().GetBool());
+ cursor += 1;
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kByte) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ SetByte(fMessage + cursor, aValue->
+ GetSimpleValue().GetByte());
+ cursor += sizeof(Char_t);
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kInt) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ SetInt(fMessage + cursor, aValue->
+ GetSimpleValue().GetInt());
+ cursor += sizeof(Int_t);
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kUInt) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ SetUInt(fMessage + cursor, aValue->
+ GetSimpleValue().GetUInt());
+ cursor += sizeof(UInt_t);
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kFloat) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ SetFloat(fMessage + cursor, aValue->
+ GetSimpleValue().GetFloat());
+ cursor += sizeof(Float_t);
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+/* } else if (fSimpleValueType == AliSimpleValue::kDynBool) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ Int_t dynSize = aValue->GetSimpleValue().
+ GetDynamicSize();
+ SetUByte(fMessage + cursor, dynSize);
+ cursor += 1;
+ for (Int_t k = 0; k < dynSize; k ++) {
+ SetBool(fMessage + cursor, aValue->
+ GetSimpleValue().GetDynBool(k));
+ cursor += 1;
+ }
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kDynByte) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ Int_t dynSize = aValue->GetSimpleValue().
+ GetDynamicSize();
+ SetUByte(fMessage + cursor, dynSize);
+ cursor += 1;
+ for (Int_t k = 0; k < dynSize; k ++) {
+ SetByte(fMessage + cursor, aValue->
+ GetSimpleValue().GetDynByte(k));
+ cursor += sizeof(Char_t);
+ }
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kDynInt) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ Int_t dynSize = aValue->GetSimpleValue().
+ GetDynamicSize();
+ SetUByte(fMessage + cursor, dynSize);
+ cursor += 1;
+ for (Int_t k = 0; k < dynSize; k ++) {
+ SetInt(fMessage + cursor, aValue->
+ GetSimpleValue().GetDynInt(k));
+ cursor += sizeof(Int_t);
+ }
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kDynUInt) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ Int_t dynSize = aValue->GetSimpleValue().
+ GetDynamicSize();
+ SetUByte(fMessage + cursor, dynSize);
+ cursor += 1;
+ for (Int_t k = 0; k < dynSize; k ++) {
+ SetUInt(fMessage + cursor, aValue->
+ GetSimpleValue().GetDynUInt(k));
+ cursor += sizeof(UInt_t);
+ }
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kDynFloat) {
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ Int_t dynSize = aValue->GetSimpleValue().
+ GetDynamicSize();
+ SetUByte(fMessage + cursor, dynSize);
+ cursor += 1;
+ for (Int_t k = 0; k < dynSize; k ++) {
+ SetFloat(fMessage + cursor, aValue->
+ GetSimpleValue().GetDynFloat(k));
+ cursor += sizeof(Float_t);
+ }
+ SetUInt(fMessage + cursor, aValue->GetTimeStamp());
+ cursor += sizeof(UInt_t);
+ } */
+ } else {
+ AliError("Invalid or unknown SimpleValueType!");
+ return;
+ }
+
+}
+
+void AliDCSMessage::StoreErrorMessage() {
+
+ fMessageSize = ERROR_STRING_OFFSET + fErrorString.Length() + 1;
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+
+ SetUByte(fMessage + ERROR_CODE_OFFSET, fErrorCode);
+ strcpy(fMessage + ERROR_STRING_OFFSET, fErrorString.Data());
+}
+
+void AliDCSMessage::StoreMultiRequestMessage() {
+
+ UInt_t requestDataSize = 0;
+
+ TIter iter(&fRequestStrings);
+ TObjString* anObjString;
+
+ while ((anObjString = (TObjString*) iter.Next())) {
+ assert(anObjString->String().Length() <= 255);
+ requestDataSize += anObjString->String().Length() + 1;
+ }
+
+ fMessageSize = REQUEST_STRINGS_OFFSET + requestDataSize;
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+
+ SetUByte(fMessage + REQUEST_TYPE_OFFSET, fRequestType);
+ SetUInt(fMessage + START_TIME_OFFSET, fStartTime);
+ SetUInt(fMessage + END_TIME_OFFSET, fEndTime);
+
+ iter.Reset();
+
+ UInt_t cursor = REQUEST_STRINGS_OFFSET;
+
+ while ((anObjString = (TObjString*) iter.Next())) {
+ UChar_t strLength = anObjString->String().Length();
+ SetUByte(fMessage + cursor, strLength);
+ cursor += 1;
+ strncpy(fMessage + cursor, anObjString->String().Data(),
+ strLength);
+ cursor += strLength;
+ }
+}
+
+/*
+void AliDCSMessage::StoreNextMessage() {
+
+ fMessageSize = HEADER_SIZE;
+
+ fMessage = new char[fMessageSize];
+
+ StoreHeader();
+} */
+
+Bool_t AliDCSMessage::ValidateHeader(const char* buf) {
+
+ if (!(buf[ID_OFFSET] == 'A' && buf[ID_OFFSET + 1] == 'D')) {
+ AliError("Bad message ID!");
+ return kFALSE;
+ }
+
+ if (buf[VERSION_OFFSET] != 1) {
+ AliError("Bad message version!");
+ return kFALSE;
+ }
+
+ Type type = (Type) GetUByte(buf + TYPE_OFFSET);
+ switch (type) {
+ case kRequest:
+ case kCount:
+ case kResultSet:
+ case kError:
+ case kMultiRequest:
+ break;
+ default:
+ AliError("Unknown message type!");
+ return kFALSE;
+ }
+
+ UInt_t bodySize = GetInt(buf + BODY_SIZE_OFFSET);
+ if (bodySize > MAX_BODY_SIZE) {
+ AliError("Too big message body size!");
+ return kFALSE;
+ }
+
+ return kTRUE;
+}
+
+void AliDCSMessage::LoadRequestMessage() {
+
+ if (fMessageSize < REQUEST_STRING_OFFSET) {
+ AliError("Body size is too small for request message!");
+ return;
+ }
+
+ fRequestType = (RequestType) GetUByte(fMessage + REQUEST_TYPE_OFFSET);
+
+ fStartTime = GetUInt(fMessage + START_TIME_OFFSET);
+ fEndTime = GetUInt(fMessage + END_TIME_OFFSET);
+ fRequestString = GetString(fMessage + REQUEST_STRING_OFFSET,
+ fMessageSize - REQUEST_STRING_OFFSET);
+
+ switch (fRequestType) {
+ case kAlias:
+ case kDPName:
+ fType = kRequest;
+ break;
+ default:
+ AliError("Invalid request type!");
+ }
+}
+
+void AliDCSMessage::LoadCountMessage() {
+
+ if (fMessageSize < HEADER_SIZE + sizeof(UInt_t)) {
+ AliError("Body size is too small for count message!");
+ return;
+ }
+
+ fCount = GetUInt(fMessage + COUNT_OFFSET);
+
+ fType = kCount;
+}
+
+void AliDCSMessage::LoadResultSetMessage() {
+
+ if (fMessageSize < VALUES_OFFSET) {
+ AliError("Body size is too small for result set message!");
+ return;
+ }
+
+ fSimpleValueType = (AliSimpleValue::Type) GetUByte(
+ fMessage + SVT_OFFSET);
+ UInt_t count = GetUInt(fMessage + VALUE_COUNT_OFFSET);
+
+ UInt_t cursor = VALUES_OFFSET;
+
+ if (fSimpleValueType == AliSimpleValue::kBool) {
+ if (VALUES_OFFSET + count + count * sizeof(UInt_t) >
+ fMessageSize) {
+ AliError("Too many bool values for this buffer size!");
+ return;
+ }
+
+ for (UInt_t k = 0; k < count; k ++) {
+ Bool_t aBool = GetBool(fMessage + cursor);
+ cursor += 1;
+ UInt_t timeStamp = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ fValues.Add(new AliDCSValue(aBool, timeStamp));
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kByte) {
+ if (VALUES_OFFSET + count + count * sizeof(UInt_t) >
+ fMessageSize) {
+ AliError("Too many byte values for this buffer size!");
+ return;
+ }
+
+ for (UInt_t k = 0; k < count; k ++) {
+ Char_t aByte = GetByte(fMessage + cursor);
+ cursor += sizeof(Char_t);
+ UInt_t timeStamp = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ fValues.Add(new AliDCSValue(aByte, timeStamp));
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kInt) {
+ if (VALUES_OFFSET + count * sizeof(Int_t) +
+ count * sizeof(UInt_t) > fMessageSize) {
+ AliError("Too many int values for this buffer size!");
+ return;
+ }
+
+ for (UInt_t k = 0; k < count; k ++) {
+ Int_t aInt = GetInt(fMessage + cursor);
+ cursor += sizeof(Int_t);
+ UInt_t timeStamp = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ fValues.Add(new AliDCSValue(aInt, timeStamp));
+ }
+
+ } else if (fSimpleValueType == AliSimpleValue::kUInt) {
+ if (VALUES_OFFSET + count * sizeof(UInt_t) +
+ count * sizeof(UInt_t) > fMessageSize) {
+ AliError("Too many uint values for this buffer size!");
+ return;
+ }
+
+ for (UInt_t k = 0; k < count; k ++) {
+ UInt_t aUInt = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ UInt_t timeStamp = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ fValues.Add(new AliDCSValue(aUInt, timeStamp));
+ }
+ } else if (fSimpleValueType == AliSimpleValue::kFloat) {
+ if (VALUES_OFFSET + count * sizeof(Float_t) +
+ count * sizeof(UInt_t) > fMessageSize) {
+ AliError("Too many float values for this buffer size!");
+ return;
+ }
+
+ for (UInt_t k = 0; k < count; k ++) {
+ Float_t aFloat = GetFloat(fMessage + cursor);
+ cursor += sizeof(Float_t);
+ UInt_t timeStamp = GetUInt(fMessage + cursor);
+ cursor += sizeof(UInt_t);
+ fValues.Add(new AliDCSValue(aFloat, timeStamp));
+ }
+
+ } else {
+ AliError("Unknown or invalid simple value type!");
+ }
+
+ fType = kResultSet;
+}
+
+void AliDCSMessage::LoadErrorMessage() {
+
+ if (fMessageSize < ERROR_STRING_OFFSET) {
+ AliError("Body size is too small for error message!");
+ return;
+ }
+
+ fErrorCode = (ErrorCode) GetUByte(fMessage + ERROR_CODE_OFFSET);
+ fErrorString = GetString(fMessage + ERROR_STRING_OFFSET,
+ fMessageSize - ERROR_STRING_OFFSET);
+
+ switch (fErrorCode) {
+ case kUnknownAliasDPName:
+ case kInvalidTimeRange:
+ case kInvalidBufferSize:
+ case kInvalidRequest:
+ case kUnsupportedType:
+ case kUnknownError:
+ fType = kError;
+ break;
+ default:
+ AliError("Invalid error code!");
+ }
+}
+
+void AliDCSMessage::LoadMultiRequestMessage() {
+
+ if (fMessageSize - HEADER_SIZE < REQUEST_STRINGS_OFFSET) {
+ AliError("Body size is too small for multi request message!");
+ return;
+ }
+
+ fRequestType = (RequestType) GetUByte(fMessage + REQUEST_TYPE_OFFSET);
+
+ fStartTime = GetUInt(fMessage + START_TIME_OFFSET);
+ fEndTime = GetUInt(fMessage + END_TIME_OFFSET);
+
+ switch (fRequestType) {
+ case kAlias:
+ case kDPName:
+ fType = kRequest;
+ break;
+ default:
+ AliError("Invalid request type!");
+ return;
+ }
+
+ UInt_t cursor = REQUEST_STRINGS_OFFSET;
+
+ while ((cursor < fMessageSize)) {
+ UChar_t strSize = GetUByte(fMessage + cursor);
+ cursor += 1;
+
+ if (cursor + strSize > fMessageSize) {
+ AliError("Invalid multi request message!");
+ return;
+ }
+
+ TObjString* anObjString = new TObjString(
+ GetString(fMessage + cursor, strSize));
+ fRequestStrings.Add(anObjString);
+
+ cursor += strSize;
+ }
+
+ fType = kMultiRequest;
+}
+
+/*
+void AliDCSMessage::LoadNextMessage() {
+
+ fType = kNext;
+} */
+
+void AliDCSMessage::StoreToBuffer() {
+ //
+ // Creates an underlying message buffer which can be sent to the
+ // socket.
+ //
+
+ DestroyBuffer();
+
+ switch (fType) {
+ case kRequest:
+ StoreRequestMessage();
+ break;
+ case kCount:
+ StoreCountMessage();
+ break;
+ case kResultSet:
+ StoreResultSetMessage();
+ break;
+ case kError:
+ StoreErrorMessage();
+ break;
+ case kMultiRequest:
+ StoreMultiRequestMessage();
+ break;
+/* case kNext:
+ StoreNextMessage();
+ break; */
+ default:
+ AliError("Can't store to buffer invalid message!");
+ }
+}
+
+void AliDCSMessage::LoadFromBuffer() {
+ //
+ // Reads the underlying message buffer and if it's valid message
+ // creates the corresponding message.
+ // If not set the message type kInvalid.
+ // This buffer is read from the socket.
+ //
+
+ DestroyMessage();
+
+ if (!fMessage) {
+ AliError("Message buffer is empty! Can't load it.");
+ return;
+ }
+
+ if (fMessageSize < HEADER_SIZE) {
+ AliError("Invalid message buffer. Too small for the header!");
+ return;
+ }
+
+ if (!ValidateHeader(fMessage)) {
+ AliError("Invalid message header!");
+ return;
+ }
+
+ UInt_t bodySize = GetUInt(fMessage + BODY_SIZE_OFFSET);
+ if (bodySize > fMessageSize - HEADER_SIZE) {
+ AliError("Message size is to small for the message body!");
+ return;
+ }
+
+ fMessageSize = HEADER_SIZE + bodySize;
+
+ Type aType = (Type) GetUByte(fMessage + TYPE_OFFSET);
+
+ switch (aType) {
+ case kRequest:
+ LoadRequestMessage();
+ break;
+ case kCount:
+ LoadCountMessage();
+ break;
+ case kResultSet:
+ LoadResultSetMessage();
+ break;
+ case kError:
+ LoadErrorMessage();
+ break;
+ case kMultiRequest:
+ LoadMultiRequestMessage();
+ break;
+/* case kNext:
+ LoadNextMessage();
+ break; */
+ default:
+ AliError("Invalid message type!");
+ }
+}
+
+AliDCSMessage::RequestType AliDCSMessage::GetRequestType() const {
+ //
+ // Request and MultiRequest.
+ // Returns the request type: alias or dp (Data Point)
+ //
+
+ if (!(fType == kRequest || fType == kMultiRequest)) {
+ AliError("Invalid AliDCSMessage type!");
+ return kNoneType;
+ }
+
+ return fRequestType;
+}
+
+UInt_t AliDCSMessage::GetStartTime() const {
+ //
+ // Request and MultiRequest.
+ // Returns the request start time. (begining of the time interval).
+ //
+
+ if (!(fType == kRequest || fType == kMultiRequest)) {
+ AliError("Invalid AliDCSMessage type!");
+ return 0;
+ }
+
+ return fStartTime;
+}
+
+UInt_t AliDCSMessage::GetEndTime() const {
+ //
+ // Request and MultiRequest.
+ // Returns the request start time. (end of the time interval).
+ //
+
+
+ if (!(fType == kRequest || fType == kMultiRequest)) {
+ AliError("Invalid AliDCSMessage type!");
+ return 0;
+ }
+
+ return fEndTime;
+}
+
+TString AliDCSMessage::GetRequestString() const {
+ //
+ // Request.
+ // Returns the request string. (alias or dp)
+ //
+
+ if (fType != kRequest) {
+ AliError("Invalid AliDCSMessage type!");
+ return TString("");
+ }
+
+ return fRequestString;
+}
+
+Bool_t AliDCSMessage::AddRequestString(const char* request) {
+ //
+ // MultRequest.
+ // Add a request to the request set.
+ // Returns kFALSE in case of invalid request (too long request string).
+ // Otherwise returns kTRUE.
+ //
+
+
+ if (fType != kMultiRequest) {
+ AliError("Invalid AliDCSMessage type!");
+ return kFALSE;
+ }
+
+ if (strlen(request) > 255) {
+ AliError("Alias/dpName is too long! Max size 255.");
+ return kFALSE;
+ }
+
+ fRequestStrings.Add(new TObjString(request));
+ return kTRUE;
+}
+
+void AliDCSMessage::ClearRequestStrings() {
+ //
+ // MultRequest.
+ // Clears the request set.
+ //
+
+ fRequestStrings.Delete();
+}
+
+void AliDCSMessage::GetRequestStrings(TList& result) const {
+ //
+ // MultRequest.
+ // Returns all request strings in this message.
+ // result: container where the requests are returned. Collection of
+ // TObjString.
+ //
+
+
+ if (fType != kMultiRequest) {
+ AliError("Invalid AliDCSMessage type!");
+ return;
+ }
+
+ TIter iter(&fRequestStrings);
+ TObjString* anObjString;
+
+ while ((anObjString = (TObjString*) iter.Next())) {
+ result.Add(new TObjString(*anObjString));
+ }
+}
+
+UInt_t AliDCSMessage::GetCount() const {
+ //
+ // Count.
+ // Returns the total number of values.
+ //
+
+
+ if (fType != kCount) {
+ AliError("Invalid AliDCSMessage type!");
+ return 0;
+ }
+
+ return fCount;
+}
+
+AliSimpleValue::Type AliDCSMessage::GetSimpleValueType() const {
+ //
+ // ResultSet.
+ // Returns simple value type (see AliSimpleValue) for the values
+ // in this ResultSet.
+ //
+
+
+ if (fType != kResultSet) {
+ AliError("Invalid AliDCSMessage type!");
+ return AliSimpleValue::kInvalid;
+ }
+
+ return fSimpleValueType;
+}
+
+UInt_t AliDCSMessage::GetValueCount() const {
+ //
+ // ResultSet.
+ // Returns the count of values in this ResultSet.
+ //
+
+
+ if (fType != kResultSet) {
+ AliError("Invalid AliDCSMessage type!");
+ return 0;
+ }
+
+ return fValues.GetSize();
+}
+
+UInt_t AliDCSMessage::GetValues(TList& result) const {
+ //
+ // ResultSet.
+ // Returns the number of values got from the message.
+ // result: used to return the values. Collection of AliDCSValue.
+ //
+
+
+ if (fType != kResultSet) {
+ AliError("Invalid AliDCSMessage type!");
+ return 0;
+ }
+
+ TIter iter(&fValues);
+ AliDCSValue* aValue;
+
+ while ((aValue = (AliDCSValue*) iter.Next())) {
+ result.Add(new AliDCSValue(*aValue));
+ }
+
+ return fValues.GetSize();
+}
+
+Bool_t AliDCSMessage::AddValue(const AliDCSValue& value) {
+ //
+ // ResultSet.
+ // Adds value to the ResultSet value list.
+ // Returns kFALSE in case of error.
+ // Otherwise returns kTRUE;
+ //
+
+ if (fType != kResultSet) {
+ AliError("Invalid AliDCSMessage type!");
+ return kFALSE;
+ }
+
+ if (value.GetSimpleValue().GetType() != fSimpleValueType) {
+ AliError(Form("Can't add value with type %s to this message!",
+ AliSimpleValue::GetTypeString(
+ value.GetSimpleValue().GetType())));
+ return kFALSE;
+ }
+
+ fValues.Add(new AliDCSValue(value));
+
+ return kTRUE;
+}
+
+void AliDCSMessage::ClearValues() {
+ fValues.Delete();
+}
+
+AliDCSMessage::ErrorCode AliDCSMessage::GetErrorCode() const {
+ //
+ // Error.
+ // Returns the error code which has this error message.
+ //
+
+ if (fType != kError) {
+ AliError("Invalid AliDCSMessage type!");
+ return kNoneError;
+ }
+
+ return fErrorCode;
+}
+
+TString AliDCSMessage::GetErrorString() const {
+ //
+ // Error.
+ // Returns the error string (error description) which has this
+ // error message.
+ //
+
+ if (GetType() != kError) {
+ AliError("Invalid AliDCSMessage type!");
+ return TString("");
+ }
+
+ return fErrorString;
+}
+
+
+void AliDCSMessage::Print(Option_t* /*option*/) const {
+
+ if (AliLog::GetGlobalDebugLevel() < 2) {
+ return;
+ }
+
+ TString printString;
+ printString += "\n <<AliDCSMessage>>\n";
+
+ printString += " Size: ";
+ printString += fMessageSize;
+ printString += '\n';
+
+ printString += " Type: ";
+ switch (GetType()) {
+ case kRequest: {
+ printString += "Request\n";
+
+ printString += " RequestType: ";
+ if (GetRequestType() == kDPName) {
+ printString += "DPName";
+ } else {
+ printString += "Alias";
+ }
+ printString += '\n';
+
+ printString += " RequestString: ";
+ printString += GetRequestString();
+ printString += '\n';
+ printString += " StartTime: ";
+ printString += GetStartTime();
+ printString += '\n';
+ printString += " EndTime: ";
+ printString += GetEndTime();
+ printString += '\n';
+ break;
+ }
+
+ case kCount: {
+ printString += "Count\n";
+ printString += " Count: ";
+ printString += GetCount();
+ printString += '\n';
+ break;
+ }
+
+ case kResultSet: {
+ printString += "ResultSet\n";
+ printString += " SimpleValueType: ";
+ printString += AliSimpleValue::GetTypeString(
+ fSimpleValueType);
+ printString += '\n';
+ printString += " ValueCount: ";
+ printString += GetValueCount();
+ printString += '\n';
+ break;
+ }
+
+ case kError: {
+ printString += "Error\n";
+ printString += " ErrorCode: ";
+ switch (GetErrorCode()) {
+ case AliDCSMessage::kNoneError:
+ printString += "NoneError";
+ break;
+ case AliDCSMessage::kUnknownAliasDPName:
+ printString += "UnknownAliasDPName";
+ break;
+ case AliDCSMessage::kInvalidTimeRange:
+ printString += "InvalidTimeRange";
+ break;
+ case AliDCSMessage::kInvalidBufferSize:
+ printString += "InvalidBufferSize";
+ break;
+ case AliDCSMessage::kInvalidRequest:
+ printString += "InvalidRequest";
+ break;
+ case AliDCSMessage::kUnsupportedType:
+ printString += "UnsupportedType";
+ break;
+ case AliDCSMessage::kUnknownError:
+ printString += "UnknownError";
+ break;
+ default:
+ printString += "Invalid";
+ }
+
+ printString += '\n';
+ printString += " ErrorString: ";
+ printString += GetErrorString();
+ printString += '\n';
+ break;
+ }
+
+ case kMultiRequest: {
+ printString += "MultiRequest\n";
+
+ printString += " RequestType: ";
+ if (GetRequestType() == kDPName) {
+ printString += "DPName";
+ } else {
+ printString += "Alias";
+ }
+ printString += '\n';
+
+ printString += " RequestStrings: ";
+ TIter iter(&fRequestStrings);
+ TObjString* anObjString;
+ while ((anObjString = (TObjString*) iter.Next())) {
+ printString += anObjString->String();
+ printString += ' ';
+ }
+ printString += '\n';
+
+ printString += " StartTime: ";
+ printString += GetStartTime();
+ printString += '\n';
+ printString += " EndTime: ";
+ printString += GetEndTime();
+ printString += '\n';
+ break;
+ }
+
+/* case kNext: {
+ printString += "Next\n";
+ break;
+ } */
+
+ default:
+ printString += "Invalid\n";
+ }
+
+ if (AliLog::GetGlobalDebugLevel() >= 3 && fMessage) {
+ PrintBuffer(fMessage, fMessageSize, printString);
+ }
+
+ AliDebug(2, printString);
+}
+
+Bool_t AliDCSMessage::SetRawHeader(const char* header) {
+ //
+ // Checks if the header buffer represents a valid header message.
+ // If so it creates a message buffer with the appropriate body size
+ // and returns true.
+ // If not returns false.
+ // header: header buffer
+ //
+
+ if (!ValidateHeader(header)) {
+ AliError("Invalid message header!");
+ return kFALSE;
+ }
+
+ DestroyBuffer();
+
+ UInt_t bodySize = GetUInt(header + BODY_SIZE_OFFSET);
+ fMessageSize = HEADER_SIZE + bodySize;
+
+ fMessage = new char[fMessageSize];
+
+ memcpy(fMessage, header, HEADER_SIZE);
+
+ return kTRUE;
+}
+
+
+void AliDCSMessage::DestroyBuffer() {
+ //
+ // Destroy the underlying message buffer.
+ //
+
+ if (fMessage) {
+ delete[] fMessage;
+ fMessage = NULL;
+ }
+
+ fMessageSize = 0;
+}
+
+void AliDCSMessage::PrintBuffer(const char* buffer, UInt_t size,
+ TString& output)
+{
+
+ UInt_t index = 0;
+
+ while (index < size) {
+ if (!(index % 16)) {
+ output += Form("\n %.4x:", index);
+ }
+
+ if (!(index % 8)) {
+ output += ' ';
+ }
+
+ output += Form(" %.2x", (UChar_t) buffer[index]);
+
+ if (!((index + 1) % 16) || index + 1 == size) {
+ if (index + 1 == size) {
+ output.Append(' ',3 * (15 - index % 16));
+ if (index % 16 < 8) {
+ output.Append(' ');
+ }
+ }
+
+ output.Append(' ', 2);
+ for (Int_t k = index % 16; k >= 0; k --) {
+ Char_t aChar = buffer[index - k];
+ output += isgraph(aChar) ? aChar: '.';
+ }
+ }
+
+ index ++;
+ }
+
+ output += '\n';
+}
--- /dev/null
+#ifndef ALI_DCS_MESSAGE_H
+#define ALI_DCS_MESSAGE_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class is a wrapper of AliDCSMessage.
+// These are the messages which form AliDCSProtocol.
+//
+
+
+#include "AliDCSValue.h"
+
+#include <TString.h>
+#include <TList.h>
+
+#define HEADER_SIZE 8
+#define ID_OFFSET 0
+#define VERSION_OFFSET 2
+#define TYPE_OFFSET 3
+#define BODY_SIZE_OFFSET 4
+
+#define MAX_BODY_SIZE 40000
+
+#define REQUEST_TYPE_OFFSET HEADER_SIZE
+#define START_TIME_OFFSET (HEADER_SIZE + 1)
+#define END_TIME_OFFSET (HEADER_SIZE + 5)
+#define REQUEST_STRING_OFFSET (HEADER_SIZE + 9)
+
+#define REQUEST_STRINGS_OFFSET REQUEST_STRING_OFFSET
+
+#define COUNT_OFFSET HEADER_SIZE
+
+#define SVT_OFFSET HEADER_SIZE
+#define VALUE_COUNT_OFFSET (HEADER_SIZE + 1)
+#define VALUES_OFFSET (HEADER_SIZE + 5)
+
+#define ERROR_CODE_OFFSET HEADER_SIZE
+#define ERROR_STRING_OFFSET (HEADER_SIZE + 1)
+
+
+
+class AliDCSMessage: public TObject {
+public:
+ enum Type {
+ kInvalid = 0,
+ kRequest = 1,
+ kCount = 2,
+ kResultSet = 3,
+ kError = 4,
+ kMultiRequest = 5
+// kNext = 6
+ };
+
+ enum RequestType {
+ kNoneType = 0,
+ kAlias = 1,
+ kDPName = 2
+ };
+
+ enum ErrorCode {
+ kNoneError = 0,
+ kUnknownAliasDPName = 1,
+ kInvalidTimeRange = 2,
+ kInvalidBufferSize = 3,
+ kInvalidRequest = 4,
+ kUnsupportedType = 5,
+ kUnknownError = 255
+ };
+
+
+ AliDCSMessage();
+
+ AliDCSMessage(const char* buffer, UInt_t size);
+
+ ~AliDCSMessage();
+
+
+ void CreateRequestMessage(RequestType type,
+ UInt_t startTime, UInt_t endTime, const char* request);
+
+ void CreateMultiRequestMessage(RequestType type,
+ UInt_t startTime, UInt_t endTime);
+
+ void CreateCountMessage(UInt_t count);
+
+ void CreateResultSetMessage(AliSimpleValue::Type type);
+
+ void CreateErrorMessage(ErrorCode code, const char* errorString);
+
+ //void CreateNextMessage();
+
+ void DestroyMessage();
+
+
+ Bool_t SetRawHeader(const char* header);
+
+ void StoreToBuffer();
+
+ void LoadFromBuffer();
+
+ void DestroyBuffer();
+
+
+ Bool_t IsValid() const {return fType != kInvalid;};
+
+ UInt_t GetMessageSize() const {return fMessageSize;};
+
+ char* GetMessage() const {return fMessage;};
+
+ UInt_t GetBodySize() const {return fMessageSize - HEADER_SIZE;};
+
+ char* GetBody() const {return fMessage + HEADER_SIZE;};
+
+ Type GetType() const {return fType;};
+
+ // RequestType and MultiReuqestType Message getters
+ RequestType GetRequestType() const;
+
+ UInt_t GetStartTime() const;
+
+ UInt_t GetEndTime() const;
+
+ TString GetRequestString() const;
+
+ // MultiRequestType Message getters and setters
+ void GetRequestStrings(TList& result) const;
+
+ Bool_t AddRequestString(const char* request);
+
+ void ClearRequestStrings();
+
+ // CountType Message getters
+ UInt_t GetCount() const;
+
+ // ResultSetType Message getters ans setters
+ AliSimpleValue::Type GetSimpleValueType() const;
+
+ UInt_t GetValueCount() const;
+
+ UInt_t GetValues(TList& result) const;
+
+ Bool_t AddValue(const AliDCSValue& value);
+
+ void ClearValues();
+
+ // ErrorType Message getters
+ ErrorCode GetErrorCode() const;
+
+ TString GetErrorString() const;
+
+
+ virtual void Print(Option_t* option = NULL) const;
+
+ static void PrintBuffer(const char* buf, UInt_t size, TString& output);
+
+private:
+
+ char* fMessage;
+
+ UInt_t fMessageSize;
+
+
+ Type fType;
+
+ //Request message fields
+ RequestType fRequestType;
+
+ UInt_t fStartTime;
+
+ UInt_t fEndTime;
+
+ TString fRequestString;
+
+ //Count message fields
+ UInt_t fCount;
+
+ //ResultSet message fields
+ AliSimpleValue::Type fSimpleValueType;
+
+ TList fValues;
+
+ //Error message fields
+ ErrorCode fErrorCode;
+
+ TString fErrorString;
+
+ //MultiRequest message fields
+ TList fRequestStrings;
+
+
+ // Message setter helpers
+ void StoreHeader();
+
+ void StoreRequestMessage();
+
+ void StoreCountMessage();
+
+ void StoreResultSetMessage();
+
+ void StoreErrorMessage();
+
+ void StoreMultiRequestMessage();
+
+ //void StoreNextMessage();
+
+
+ Bool_t ValidateHeader(const char* buf);
+
+ void LoadRequestMessage();
+
+ void LoadCountMessage();
+
+ void LoadResultSetMessage();
+
+ void LoadErrorMessage();
+
+ void LoadMultiRequestMessage();
+
+ //void LoadNextMessage();
+
+ // Buffer helpers
+ static void SetBool(char* buf, Bool_t val);
+
+ static void SetByte(char* buf, Char_t val);
+
+ static void SetUByte(char* buf, UChar_t val);
+
+ static void SetInt(char* buf, Int_t val);
+
+ static void SetUInt(char* buf, UInt_t val);
+
+ static void SetFloat(char* buf, Float_t val);
+
+ static Bool_t GetBool(const char* buf);
+
+ static Char_t GetByte(const char* buf);
+
+ static UChar_t GetUByte(const char* buf);
+
+ static Int_t GetInt(const char* buf);
+
+ static UInt_t GetUInt(const char* buf);
+
+ static Float_t GetFloat(const char* buf);
+
+ static TString GetString(const char* buf, Int_t maxLen);
+
+
+ ClassDef(AliDCSMessage, 0);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.2 2005/08/30 10:53:23 byordano
+some more descriptions added
+
+*/
+
+//
+// This class represents the main value structure
+// which forms so called 'historical data' in any SCADA system.
+// When a value (which represent a parameter of some real world object)
+// is measured in the time, a value serie (called value set) is formed.
+// Each element of this value series has two fields:
+// fValue - primitive value which represents the real measured value
+// fTimestamp - timestamp when the measurement was made
+//
+
+#include "AliDCSValue.h"
+
+#include "TTimeStamp.h"
+
+ClassImp(AliDCSValue)
+
+AliDCSValue::AliDCSValue() {
+
+}
+
+AliDCSValue::AliDCSValue(const AliSimpleValue& value, UInt_t timeStamp):
+ fValue(value), fTimeStamp(timeStamp)
+{
+
+}
+
+
+TString AliDCSValue::ToString() const {
+
+ return fValue.ToString() + ", Timestmap: " +
+ TTimeStamp(fTimeStamp).AsString();
+}
+
+
--- /dev/null
+#ifndef ALI_DCS_VALUE_H
+#define ALI_DCS_VALUE_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class represents the main value structure
+// which forms so called 'historical data' in any SCADA system.
+//
+
+#include "AliSimpleValue.h"
+
+class AliDCSValue: public TObject {
+public:
+
+ AliDCSValue();
+ AliDCSValue(const AliSimpleValue& value, UInt_t timeStamp);
+
+ AliSimpleValue& GetSimpleValue() {return fValue;};
+ const AliSimpleValue& GetSimpleValue() const {return fValue;};
+ void SetSimpleValue(const AliSimpleValue& value) {fValue = value;};
+
+ UInt_t GetTimeStamp() const {return fTimeStamp;};
+ void SetTimeStamp(UInt_t timeStamp) {fTimeStamp = timeStamp;};
+
+ Int_t GetSize() const {return fValue.GetSize() + sizeof(UInt_t);};
+
+ TString ToString() const;
+
+private:
+
+ AliSimpleValue fValue;
+
+ UInt_t fTimeStamp;
+
+
+ ClassDef(AliDCSValue, 1);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.2 2005/09/13 08:41:15 byordano
+default startTime endTime added
+
+Revision 1.4 2005/08/30 09:13:02 byordano
+some docs added
+
+Revision 1.3 2005/08/29 21:15:47 byordano
+some docs added
+
+*/
+
+//
+// This class is the main manager for AliShuttle.
+// It organizes the data retrieval from DCS and call the
+// interface methods of AliCDBPreProcessor.
+// For every detector in AliShuttleConfgi (see AliShuttleConfig),
+// data for its set of aliases is retrieved. If there is registered
+// AliCDBPreProcessor for this detector than it will be used
+// accroding to the schema (see AliCDBPreProcessor).
+// If there isn't registered AliCDBPreProcessor than the retrieved
+// data is stored automatically to the undelying AliCDBStorage.
+// For detSpec is used the alias name.
+//
+
+#include "AliShuttle.h"
+
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliCDBId.h"
+#include "AliCDBPreProcessor.h"
+#include "AliShuttleConfig.h"
+#include "AliDCSClient.h"
+#include "AliLog.h"
+
+#include <TObjString.h>
+
+ClassImp(AliShuttle)
+
+AliShuttle::AliShuttle(const AliShuttleConfig* config,
+ const char* cdbStorageURI, UInt_t timeout, Int_t retries):
+ fConfig(config), fStorage(NULL), fTimeout(timeout), fRetries(retries),
+ fCurrentRun(-1), fCurrentStartTime(0), fCurrentEndTime(0)
+{
+ //
+ // config: AliShuttleConfig used
+ // cdbStorageURI: uri of the underlying AliCDBStorage
+ // timeout: timeout used for AliDCSClient connection
+ // retries: the number of retries in case of connection error.
+ //
+
+ fStorage = AliCDBManager::Instance()->GetStorage(cdbStorageURI);
+ if (!fStorage) {
+ AliError(Form("Can't get valid storage object for %s!",
+ cdbStorageURI));
+ }
+}
+
+AliShuttle::AliShuttle(const AliShuttleConfig* config,
+ const AliCDBParam* param, UInt_t timeout, Int_t retries):
+ fConfig(config), fStorage(NULL), fTimeout(timeout), fRetries(retries),
+ fCurrentRun(-1), fCurrentStartTime(0), fCurrentEndTime(0)
+{
+ //
+ // config: AliShuttleConfig used
+ // param: param of the underlying AliCDBStorage
+ // timeout: timeout used for AliDCSClient connection
+ // retries: the number of retries in case of connection error.
+ //
+
+ fStorage = AliCDBManager::Instance()->GetStorage(param);
+ if (!fStorage) {
+ AliError(Form("Can't get valid storage object for %s!",
+ param->GetURI().Data()));
+ }
+}
+
+AliShuttle::~AliShuttle() {
+ fPreProcessorMap.DeleteAll();
+}
+
+void AliShuttle::RegisterCDBPreProcessor(AliCDBPreProcessor* processor) {
+ //
+ // Registers new AliCDBPreProcessor.
+ // It uses GetName() for indentificator of the pre processor.
+ // The pre processor is registered it there isn't any other
+ // with the same identificator (GetName()).
+ //
+
+ if (fPreProcessorMap.GetValue(processor->GetName())) {
+ AliWarning(Form("AliCDBPreProcessor %s is already registered!",
+ processor->GetName()));
+ return;
+ }
+
+ fPreProcessorMap.Add(new TObjString(processor->GetName()), processor);
+ processor->SetShuttle(this);
+}
+
+Bool_t AliShuttle::Store(const char* detector, const char* specType,
+ TObject* object, AliCDBMetaData* metaData)
+{
+ if (!fStorage) {
+ AliError("Invalid storage object!");
+ return kFALSE;
+ }
+
+ AliCDBId id(AliCDBPath(detector, "DCS", specType),
+ GetCurrentRun(), GetCurrentRun());
+ return fStorage->Put(object, id, metaData);
+}
+
+void AliShuttle::Process(Int_t run, UInt_t startTime, UInt_t endTime) {
+ //
+ // Makes data retrieval for all detectors in the configuration.
+ // run: is the run number used
+ // startTime: is the run start time
+ // endTime: is the run end time
+ //
+
+ TIter iter(fConfig->GetDetectors());
+ TObjString* aDetector;
+ while ((aDetector = (TObjString*) iter.Next())) {
+ Process(run, startTime, endTime, aDetector->String());
+ }
+}
+
+void AliShuttle::Process(Int_t run, UInt_t startTime, UInt_t endTime,
+ const char* detector)
+{
+ //
+ // Makes data retrieval just for one specific detector.
+ // Threre should be a configuration for this detector.
+ // run: is the run number used
+ // startTime: is the run start time
+ // endTime: is the run end time
+ // detector: detector for which the retrieval will be made
+ //
+
+ AliInfo(Form("Retrieving values for %s, run %d", detector, run));
+
+ if (!fConfig->HasDetector(detector)) {
+ AliError(Form("There isn't any configuration for %s",
+ detector));
+ return;
+ }
+
+ fCurrentRun = run;
+ fCurrentStartTime = startTime;
+ fCurrentEndTime = endTime;
+
+ TString host(fConfig->GetHost(detector));
+ Int_t port = fConfig->GetPort(detector);
+
+ AliCDBPreProcessor* aPreProcessor =
+ (AliCDBPreProcessor*) fPreProcessorMap.GetValue(detector);
+
+ TIter iter(fConfig->GetAliases(detector));
+ TObjString* anAlias;
+
+ if (aPreProcessor) {
+ aPreProcessor->Initialize(run, startTime, endTime);
+
+ TList valueSet;
+ while ((anAlias = (TObjString*) iter.Next())) {
+ Bool_t result = GetValueSet(host, port,
+ anAlias->String(), valueSet);
+
+ aPreProcessor->Process(anAlias->String(), valueSet,
+ !result);
+
+ valueSet.Delete();
+ }
+
+ aPreProcessor->Finalize();
+
+ } else {
+ AliCDBMetaData metaData;
+ metaData.SetProperty("StartTime",
+ new AliSimpleValue(startTime));
+ metaData.SetProperty("EndTime",
+ new AliSimpleValue(endTime));
+ metaData.SetComment("Automatically stored by AliShuttle!");
+
+ TList valueSet;
+ while ((anAlias = (TObjString*) iter.Next())) {
+ if (GetValueSet(host, port, anAlias->String(),
+ valueSet)) {
+ if (!Store(detector, anAlias->String(),
+ &valueSet, &metaData)) {
+ AliError(Form("Can't store %s for %s!",
+ anAlias->String().Data(),
+ detector));
+ }
+ }
+
+ valueSet.Delete();
+ }
+ }
+
+ fCurrentRun = -1;
+ fCurrentStartTime = 0;
+ fCurrentEndTime = 0;
+}
+
+Bool_t AliShuttle::GetValueSet(const char* host, Int_t port, const char* alias,
+ TList& valueSet)
+{
+ AliDCSClient client(host, port, fTimeout, fRetries);
+ if (!client.IsConnected()) {
+ return kFALSE;
+ }
+
+ Int_t result = client.GetAliasValues(alias,
+ GetCurrentStartTime(), GetCurrentEndTime(), valueSet);
+
+ if (result < 0) {
+ AliError(Form("Can't get '%s'! Reason: %s",
+ alias, AliDCSClient::GetErrorString(result)));
+
+ if (result == AliDCSClient::fgkServerError) {
+ AliError(Form("Server error: %s",
+ client.GetServerError().Data()));
+ }
+
+ return kFALSE;
+ }
+
+ return kTRUE;
+}
--- /dev/null
+#ifndef ALI_SHUTTLE_H
+#define ALI_SHUTTLE_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+
+//
+// This class is the main manager for
+// AliShuttle. It organizes the data retrieval
+// from DCS and call the interface methods of
+// AliCDBPreProcessor.
+//
+
+#include <TObject.h>
+#include <TMap.h>
+
+class AliShuttleConfig;
+class AliCDBStorage;
+class AliCDBMetaData;
+class AliCDBParam;
+class AliCDBPreProcessor;
+
+class AliShuttle: public TObject {
+public:
+ AliShuttle(const AliShuttleConfig* config, const char* cdbStorageURI,
+ UInt_t timeout = 5000, Int_t retries = 5);
+ AliShuttle(const AliShuttleConfig* config, const AliCDBParam* param,
+ UInt_t timeout = 5000, Int_t retries = 5);
+ virtual ~AliShuttle();
+
+ void RegisterCDBPreProcessor(AliCDBPreProcessor* processor);
+
+ void Process(Int_t run, UInt_t startTime, UInt_t endTime);
+ void Process(Int_t run, UInt_t startTime, UInt_t endTime,
+ const char* detector);
+
+ Int_t GetCurrentRun() const {return fCurrentRun;};
+ UInt_t GetCurrentStartTime() const {return fCurrentStartTime;};
+ UInt_t GetCurrentEndTime() const {return fCurrentEndTime;};
+
+ Bool_t Store(const char* detector, const char* detSpec,
+ TObject* object, AliCDBMetaData* metaData);
+
+private:
+ const AliShuttleConfig* fConfig;
+ AliCDBStorage* fStorage;
+ UInt_t fTimeout;
+ Int_t fRetries;
+
+ TMap fPreProcessorMap;
+
+ Int_t fCurrentRun;
+ UInt_t fCurrentStartTime;
+ UInt_t fCurrentEndTime;
+
+ Bool_t GetValueSet(const char* host, Int_t port, const char* alias,
+ TList& result);
+
+ ClassDef(AliShuttle, 0);
+};
+
+#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.3 2005/08/30 09:13:02 byordano
+some docs added
+
+*/
+
+
+//
+// This class keeps the AliShuttle configuration.
+// It reads the configuration for LDAP server.
+// For every child entry in basedn which has schema type 'shuttleConfig'
+// it creates a detector configuration. This configuration includes:
+// DCS server host and port and the set of aliases for which data from
+// will be retrieved (used by AliShuttle).
+//
+
+
+#include "AliShuttleConfig.h"
+
+#include "AliLog.h"
+
+#include <TObjString.h>
+#include <TLDAPResult.h>
+#include <TLDAPEntry.h>
+#include <TLDAPAttribute.h>
+
+AliShuttleConfig::ConfigHolder::ConfigHolder(const TLDAPEntry* entry):
+ fIsValid(kFALSE)
+{
+ TLDAPAttribute* anAttribute;
+
+ anAttribute = entry->GetAttribute("dt");
+ if (!anAttribute) {
+ AliError("Invalid configuration! Can't get detector name.");
+ return;
+ }
+ fDetector = anAttribute->GetValue();
+ if (!fDetector.Length()) {
+ AliError("Detector name can't be an empty string!")
+ return;
+ }
+
+ anAttribute = entry->GetAttribute("ipHost");
+ if (!anAttribute) {
+ AliError("Invalid configuration! Can't get ipHost.");
+ return;
+ }
+ fHost = anAttribute->GetValue();
+ if (!fHost.Length()) {
+ AliError("Host can't be an empty string!")
+ return;
+ }
+
+ anAttribute = entry->GetAttribute("ipServicePort");
+ if (!anAttribute) {
+ AliError("Invalid configuration! Can't get ipServicePort.");
+ return;
+ }
+ TString portStr = anAttribute->GetValue();
+ if (!portStr.Length()) {
+ AliError("ipServicePort can't be an empty string!")
+ return;
+ }
+ fPort = portStr.Atoi();
+
+ anAttribute = entry->GetAttribute("alias");
+ if (!anAttribute) {
+ AliError("Invalid configuration! Can't get alias attribute.");
+ return;
+ }
+ const char* anAlias;
+ while ((anAlias = anAttribute->GetValue())) {
+ fAliases.Add(new TObjString(anAlias));
+ }
+
+ fIsValid = kTRUE;
+}
+
+AliShuttleConfig::ConfigHolder::~ConfigHolder() {
+ fAliases.Delete();
+}
+
+ClassImp(AliShuttleConfig)
+
+AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
+ const char* binddn, const char* password, const char* basedn):
+ fIsValid(kFALSE)
+{
+ //
+ // host: ldap server host
+ // port: ldap server port
+ // binddn: binddn used for ldap binding (simple bind is used!).
+ // password: password for binddn
+ // basedn: this is basedn whose childeren entries which have
+ // (objectClass=shuttleConfig) will be used as detector configurations.
+ //
+
+ TLDAPServer aServer(host, port, binddn, password);
+
+ if (!aServer.IsConnected()) {
+ AliError(Form("Can't connect to ldap server %s:%d",
+ host, port));
+ return;
+ }
+
+ TLDAPResult* aResult = aServer.Search(basedn, LDAP_SCOPE_ONELEVEL,
+ "(objectClass=shuttleConfig)");
+ if (!aResult) {
+ AliError(Form("Can't find configuration with base DN: %s",
+ basedn));
+ return;
+ }
+
+ TLDAPEntry* anEntry;
+ while ((anEntry = aResult->GetNext())) {
+ ConfigHolder* aHolder = new ConfigHolder(anEntry);
+ delete anEntry;
+
+ if (!aHolder->IsValid()) {
+ AliError("This entry is going to be skipped!");
+ delete aHolder;
+
+ continue;
+ }
+
+ TObjString* detStr = new TObjString(aHolder->GetDetector());
+ fDetectorMap.Add(detStr, aHolder);
+ fDetectorList.Add(detStr);
+ }
+
+ delete aResult;
+
+ fIsValid = kTRUE;
+}
+
+AliShuttleConfig::~AliShuttleConfig() {
+ fDetectorMap.DeleteAll();
+}
+
+const TList* AliShuttleConfig::GetDetectors() const {
+ //
+ // returns collection of TObjString which contains the name
+ // of every detector which is in the configuration.
+ //
+
+ return &fDetectorList;
+}
+
+Bool_t AliShuttleConfig::HasDetector(const char* detector) const {
+ //
+ // checks for paricular detector in the configuration.
+ //
+ return fDetectorMap.GetValue(detector) != NULL;
+}
+
+const char* AliShuttleConfig::GetHost(const char* detector) const {
+ //
+ // returns DCS server host used by particular detector
+ //
+
+ ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
+ if (!aHolder) {
+ AliError(Form("There isn't configuration for detector: %s",
+ detector));
+ return NULL;
+ }
+
+ return aHolder->GetHost();
+}
+
+Int_t AliShuttleConfig::GetPort(const char* detector) const {
+ //
+ // returns DCS server port used by particular detector
+ //
+
+
+ ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
+ if (!aHolder) {
+ AliError(Form("There isn't configuration for detector: %s",
+ detector));
+ return 0;
+ }
+
+ return aHolder->GetPort();
+}
+
+const TList* AliShuttleConfig::GetAliases(const char* detector) const {
+ //
+ // returns collection of TObjString which represents the set of aliases
+ // which used for data retrieval for particular detector
+ //
+
+ ConfigHolder* aHolder = (ConfigHolder*) fDetectorMap.GetValue(detector);
+ if (!aHolder) {
+ AliError(Form("There isn't configuration for detector: %s",
+ detector));
+ return NULL;
+ }
+
+ return aHolder->GetAliases();
+}
+
+void AliShuttleConfig::Print(Option_t* /*option*/) const {
+
+ TString result;
+ result += '\n';
+
+ TIter iter(fDetectorMap.GetTable());
+ TPair* aPair;
+ while ((aPair = (TPair*) iter.Next())) {
+ ConfigHolder* aHolder = (ConfigHolder*) aPair->Value();
+ result += '\n';
+ result += " Detector: ";
+ result += aHolder->GetDetector();
+ result += '\n';
+ result += " Host: ";
+ result += aHolder->GetHost();
+ result += '\n';
+ result += " Port: ";
+ result += aHolder->GetPort();
+ result += '\n';
+
+ result += " Aliases: ";
+ const TList* aliases = aHolder->GetAliases();
+ TIter it(aliases);
+ TObjString* anAlias;
+ while ((anAlias = (TObjString*) it.Next())) {
+ result += anAlias->String();
+ result += ' ';
+ }
+
+ result += '\n';
+ }
+
+ AliInfo(result);
+}
--- /dev/null
+#ifndef ALI_SHUTTLE_CONFIG_H
+#define ALI_SHUTTLE_CONFIG_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class keeps the AliShuttle configuration.
+// It reads the configuration for LDAP server.
+//
+
+#include <TObject.h>
+#include <TString.h>
+#include <TList.h>
+#include <TMap.h>
+#include <TLDAPServer.h>
+
+class AliShuttleConfig: public TObject {
+public:
+ AliShuttleConfig(const char* host, Int_t port = LDAP_PORT,
+ const char* binddn = 0, const char* password = 0,
+ const char* basedn = "dc=alice,dc=cern,dc=ch");
+ virtual ~AliShuttleConfig();
+
+ Bool_t IsValid() const {return fIsValid;};
+
+ const TList* GetDetectors() const;
+
+ Bool_t HasDetector(const char* detector) const;
+ const char* GetHost(const char* detector) const;
+ Int_t GetPort(const char* detector) const;
+ const TList* GetAliases(const char* detector) const;
+
+ virtual void Print(Option_t* option = NULL) const;
+
+private:
+
+ class ConfigHolder: public TObject {
+ TString fDetector;
+ TString fHost;
+ Int_t fPort;
+ TList fAliases;
+ Bool_t fIsValid;
+
+ public:
+ ConfigHolder(const TLDAPEntry* entry);
+ ~ConfigHolder();
+
+ const char* GetDetector() const {return fDetector.Data();};
+ const char* GetHost() const {return fHost.Data();};
+ Int_t GetPort() const {return fPort;};
+ const TList* GetAliases() const {return &fAliases;};
+
+ Bool_t IsValid() const {return fIsValid;};
+
+ ClassDef(ConfigHolder, 0);
+ };
+
+
+ Bool_t fIsValid;
+
+ TMap fDetectorMap;
+ TList fDetectorList;
+
+ ClassDef(AliShuttleConfig, 0);
+};
+
+#endif
+
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/*
+$Log$
+Revision 1.1.1.1 2005/09/12 22:11:40 byordano
+SHUTTLE package
+
+Revision 1.2 2005/08/30 10:53:23 byordano
+some more descriptions added
+
+*/
+
+//
+// This class is a simple wrapper of
+// all primitive types used in PVSS SCADA system.
+//
+
+
+#include "AliSimpleValue.h"
+
+#include "AliLog.h"
+#include <TClass.h>
+
+TObject* AliSimpleValue::BoolHolder::Clone(const char* /*name*/) const {
+ return new BoolHolder(fValue);
+}
+
+Bool_t AliSimpleValue::BoolHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (BoolHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ return fValue == ((const BoolHolder*) obj)->fValue;
+}
+
+TObject* AliSimpleValue::ByteHolder::Clone(const char* /*name*/) const {
+ return new ByteHolder(fValue);
+}
+
+Bool_t AliSimpleValue::ByteHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (ByteHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ return fValue == ((const ByteHolder*) obj)->fValue;
+}
+
+TObject* AliSimpleValue::IntHolder::Clone(const char* /*name*/) const {
+ return new IntHolder(fValue);
+}
+
+Bool_t AliSimpleValue::IntHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (IntHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ return fValue == ((const IntHolder*) obj)->fValue;
+}
+
+TObject* AliSimpleValue::UIntHolder::Clone(const char* /*name*/) const {
+ return new UIntHolder(fValue);
+}
+
+Bool_t AliSimpleValue::UIntHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (UIntHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ return fValue == ((const UIntHolder*) obj)->fValue;
+}
+
+TObject* AliSimpleValue::FloatHolder::Clone(const char* /*name*/) const {
+ return new FloatHolder(fValue);
+}
+
+Bool_t AliSimpleValue::FloatHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (FloatHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ return fValue == ((const FloatHolder*) obj)->fValue;
+}
+
+TObject* AliSimpleValue::DynBoolHolder::Clone(const char* /*name*/) const {
+ return new DynBoolHolder(fSize, fValues);
+}
+
+Bool_t AliSimpleValue::DynBoolHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (DynBoolHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ const DynBoolHolder* other = ((const DynBoolHolder*) obj);
+
+ if (fSize != other->fSize) {
+ return kFALSE;
+ }
+
+ return !memcmp(fValues, other->fValues, fSize * sizeof(Bool_t));
+}
+
+TObject* AliSimpleValue::DynByteHolder::Clone(const char* /*name*/) const {
+ return new DynByteHolder(fSize, fValues);
+}
+
+Bool_t AliSimpleValue::DynByteHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (DynByteHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ const DynByteHolder* other = ((const DynByteHolder*) obj);
+
+ if (fSize != other->fSize) {
+ return kFALSE;
+ }
+
+ return !memcmp(fValues, other->fValues, fSize * sizeof(Char_t));
+}
+
+TObject* AliSimpleValue::DynIntHolder::Clone(const char* /*name*/) const {
+ return new DynIntHolder(fSize, fValues);
+}
+
+Bool_t AliSimpleValue::DynIntHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (DynIntHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ const DynIntHolder* other = ((const DynIntHolder*) obj);
+
+ if (fSize != other->fSize) {
+ return kFALSE;
+ }
+
+ return !memcmp(fValues, other->fValues, fSize * sizeof(Int_t));
+}
+
+TObject* AliSimpleValue::DynUIntHolder::Clone(const char* /*name*/) const {
+ return new DynUIntHolder(fSize, fValues);
+}
+
+Bool_t AliSimpleValue::DynUIntHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (DynUIntHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ const DynUIntHolder* other = ((const DynUIntHolder*) obj);
+
+ if (fSize != other->fSize) {
+ return kFALSE;
+ }
+
+ return !memcmp(fValues, other->fValues, fSize * sizeof(UInt_t));
+}
+
+TObject* AliSimpleValue::DynFloatHolder::Clone(const char* /*name*/) const {
+ return new DynFloatHolder(fSize, fValues);
+}
+
+Bool_t AliSimpleValue::DynFloatHolder::IsEqual(const TObject* obj) const {
+
+ if (this == obj) {
+ return kTRUE;
+ }
+
+ if (DynFloatHolder::Class() != obj->IsA()) {
+ return kFALSE;
+ }
+
+ const DynFloatHolder* other = ((const DynFloatHolder*) obj);
+
+ if (fSize != other->fSize) {
+ return kFALSE;
+ }
+
+ return !memcmp(fValues, other->fValues, fSize * sizeof(Float_t));
+}
+
+ClassImp(AliSimpleValue)
+
+AliSimpleValue::AliSimpleValue():
+ fHolder(NULL), fType(kInvalid)
+{
+
+}
+
+AliSimpleValue::AliSimpleValue(const AliSimpleValue& other):
+ TObject(other), fHolder(NULL), fType(other.fType)
+{
+ if (other.fHolder) {
+ fHolder = other.fHolder->Clone();
+ }
+}
+
+AliSimpleValue::AliSimpleValue(AliSimpleValue::Type type, Int_t size):
+ fHolder(NULL), fType(type)
+{
+
+ switch (type) {
+ case kBool:
+ fHolder = new BoolHolder();
+ break;
+ case kByte:
+ fHolder = new ByteHolder();
+ break;
+ case kInt:
+ fHolder = new IntHolder();
+ break;
+ case kUInt:
+ fHolder = new UIntHolder();
+ break;
+ case kFloat:
+ fHolder = new FloatHolder();
+ break;
+ case kDynBool:
+ fHolder = new DynBoolHolder(size);
+ break;
+ case kDynByte:
+ fHolder = new DynByteHolder(size);
+ break;
+ case kDynInt:
+ fHolder = new DynIntHolder(size);
+ break;
+ case kDynUInt:
+ fHolder = new DynUIntHolder(size);
+ break;
+ case kDynFloat:
+ fHolder = new DynFloatHolder(size);
+ break;
+ default:
+ break;
+ }
+}
+
+AliSimpleValue::AliSimpleValue(Bool_t val) {
+
+ fType = kBool;
+ fHolder = new BoolHolder(val);
+}
+
+AliSimpleValue::AliSimpleValue(Char_t val) {
+
+ fType = kByte;
+ fHolder = new ByteHolder(val);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t val) {
+
+ fType = kInt;
+ fHolder = new IntHolder(val);
+}
+
+AliSimpleValue::AliSimpleValue(UInt_t val) {
+
+ fType = kUInt;
+ fHolder = new UIntHolder(val);
+}
+
+AliSimpleValue::AliSimpleValue(Float_t val) {
+
+ fType = kFloat;
+ fHolder = new FloatHolder(val);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t size, const Bool_t* buf) {
+
+ fType = kDynBool;
+ fHolder = new DynBoolHolder(size, buf);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t size, const Char_t* buf) {
+
+ fType = kDynByte;
+ fHolder = new DynByteHolder(size, buf);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t size, const Int_t* buf) {
+
+ fType = kDynInt;
+ fHolder = new DynIntHolder(size, buf);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t size, const UInt_t* buf) {
+
+ fType = kDynUInt;
+ fHolder = new DynUIntHolder(size, buf);
+}
+
+AliSimpleValue::AliSimpleValue(Int_t size, const Float_t* buf) {
+
+ fType = kDynFloat;
+ fHolder = new DynFloatHolder(size, buf);
+}
+
+AliSimpleValue::~AliSimpleValue() {
+
+ if (fHolder) {
+ delete fHolder;
+ }
+}
+
+AliSimpleValue& AliSimpleValue::operator=(const AliSimpleValue& other) {
+
+ if (fHolder) {
+ delete fHolder;
+ }
+
+ fType = other.fType;
+
+ if (other.fHolder) {
+ fHolder = other.fHolder->Clone();
+ } else {
+ fHolder = NULL;
+ }
+
+ return *this;
+}
+
+Bool_t AliSimpleValue::operator==(const AliSimpleValue& other) const {
+
+ if (fType != other.fType) {
+ return kFALSE;
+ }
+
+ if (!(fHolder && other.fHolder)) {
+ return kFALSE;
+ }
+
+ return fHolder->IsEqual(other.fHolder);
+}
+
+void AliSimpleValue::SetBool(Bool_t val) {
+
+ if (!TypeOk(kBool)) {
+ return;
+ }
+
+ ((BoolHolder*) fHolder)->fValue = val;
+}
+
+void AliSimpleValue::SetByte(Char_t val) {
+
+ if (!TypeOk(kByte)) {
+ return;
+ }
+
+ ((ByteHolder*) fHolder)->fValue = val;
+}
+
+void AliSimpleValue::SetInt(Int_t val) {
+
+ if (!TypeOk(kInt)) {
+ return;
+ }
+
+ ((IntHolder*) fHolder)->fValue = val;
+}
+
+void AliSimpleValue::SetUInt(UInt_t val) {
+
+ if (!TypeOk(kUInt)) {
+ return;
+ }
+
+ ((UIntHolder*) fHolder)->fValue = val;
+}
+
+void AliSimpleValue::SetFloat(Float_t val) {
+
+ if (!TypeOk(kFloat)) {
+ return;
+ }
+
+ ((FloatHolder*) fHolder)->fValue = val;
+}
+
+Bool_t AliSimpleValue::GetBool() const {
+
+ if (!TypeOk(kBool)) {
+ return kFALSE;
+ }
+
+ return ((BoolHolder*) fHolder)->fValue;
+}
+
+Char_t AliSimpleValue::GetByte() const {
+
+ if (!TypeOk(kByte)) {
+ return 0;
+ }
+
+ return ((ByteHolder*) fHolder)->fValue;
+}
+
+Int_t AliSimpleValue::GetInt() const {
+
+ if (!TypeOk(kInt)) {
+ return 0;
+ }
+ return ((IntHolder*) fHolder)->fValue;
+}
+
+UInt_t AliSimpleValue::GetUInt() const {
+
+ if (!TypeOk(kUInt)) {
+ return 0;
+ }
+
+ return ((UIntHolder*) fHolder)->fValue;
+}
+
+Float_t AliSimpleValue::GetFloat() const {
+
+ if (!TypeOk(kFloat)) {
+ return 0;
+ }
+
+ return ((FloatHolder*) fHolder)->fValue;
+}
+
+void AliSimpleValue::SetDynBool(Int_t n, Bool_t val) {
+
+ if (!TypeOk(kDynBool)) {
+ return;
+ }
+
+ if (!BoundsOk(n)) {
+ return;
+ }
+
+ ((DynBoolHolder*) fHolder)->fValues[n] = val;
+}
+
+void AliSimpleValue::SetDynByte(Int_t n, Char_t val) {
+
+ if (!TypeOk(kDynByte)) {
+ return;
+ }
+
+ if (!BoundsOk(n)) {
+ return;
+ }
+
+ ((DynByteHolder*) fHolder)->fValues[n] = val;
+}
+
+void AliSimpleValue::SetDynInt(Int_t n, Int_t val) {
+
+ if (!TypeOk(kDynInt)) {
+ return;
+ }
+
+ if (!BoundsOk(n)) {
+ return;
+ }
+
+ ((DynIntHolder*) fHolder)->fValues[n] = val;
+}
+
+void AliSimpleValue::SetDynUInt(Int_t n, UInt_t val) {
+
+ if (!TypeOk(kDynUInt)) {
+ return;
+ }
+
+ if (!BoundsOk(n)) {
+ return;
+ }
+
+ ((DynUIntHolder*) fHolder)->fValues[n] = val;
+}
+
+void AliSimpleValue::SetDynFloat(Int_t n, Float_t val) {
+
+ if (!TypeOk(kDynFloat)) {
+ return;
+ }
+
+ if (!BoundsOk(n)) {
+ return;
+ }
+
+ ((DynFloatHolder*) fHolder)->fValues[n] = val;
+}
+
+Bool_t AliSimpleValue::GetDynBool(Int_t n) const {
+
+ if (!TypeOk(kDynBool)) {
+ return kFALSE;
+ }
+
+ if (!BoundsOk(n)) {
+ return kFALSE;
+ }
+
+ return ((DynBoolHolder*) fHolder)->fValues[n];
+}
+
+Char_t AliSimpleValue::GetDynByte(Int_t n) const {
+
+ if (!TypeOk(kDynByte)) {
+ return 0;
+ }
+
+ if (!BoundsOk(n)) {
+ return 0;
+ }
+
+ return ((DynByteHolder*) fHolder)->fValues[n];
+}
+
+Int_t AliSimpleValue::GetDynInt(Int_t n) const {
+
+ if (!TypeOk(kDynInt)) {
+ return 0;
+ }
+
+ if (!BoundsOk(n)) {
+ return 0;
+ }
+
+ return ((DynIntHolder*) fHolder)->fValues[n];
+}
+
+UInt_t AliSimpleValue::GetDynUInt(Int_t n) const {
+
+ if (!TypeOk(kDynUInt)) {
+ return 0;
+ }
+
+ if (!BoundsOk(n)) {
+ return 0;
+ }
+
+ return ((DynUIntHolder*) fHolder)->fValues[n];
+}
+
+Float_t AliSimpleValue::GetDynFloat(Int_t n) const {
+
+ if (!TypeOk(kDynFloat)) {
+ return 0;
+ }
+
+ if (!BoundsOk(n)) {
+ return 0;
+ }
+
+ return ((DynFloatHolder*) fHolder)->fValues[n];
+}
+
+Bool_t AliSimpleValue::TypeOk(AliSimpleValue::Type type) const {
+
+ if (fType != type) {
+ AliError(Form("SimpleValue type is not %s!",
+ GetTypeString(type)));
+ return kFALSE;
+ }
+
+ return kTRUE;
+}
+
+Bool_t AliSimpleValue::BoundsOk(Int_t n) const {
+
+ switch (fType) {
+ case kDynBool:
+ case kDynByte:
+ case kDynInt:
+ case kDynUInt:
+ case kDynFloat: {
+ Int_t size = ((DynHolder*) fHolder)->fSize;
+ if (n < 0 || n >= size) {
+ AliError(Form("Index %d out of bounds!", n));
+ return kFALSE;
+ }
+ return kTRUE;
+ }
+ case kBool:
+ case kByte:
+ case kInt:
+ case kUInt:
+ case kFloat:
+ AliError(Form("SimpleValue type %s is not dynamic!",
+ GetTypeString(fType)));
+ return kFALSE;
+ default:
+ AliError("Invalid or unknown type!");
+ return kFALSE;
+ }
+}
+
+Int_t AliSimpleValue::GetDynamicSize() const {
+ //
+ // returns the size of dynamic type or 0 in case of
+ // none dynamic type.
+ //
+
+ if (!fHolder) {
+ return 0;
+ }
+
+ if (!fHolder->IsA()->InheritsFrom(DynHolder::Class())) {
+ return 0;
+ }
+
+ return ((DynHolder*) fHolder)->fSize;
+}
+
+TString AliSimpleValue::ToString() const {
+
+ TString result;
+
+ result += "Type: ";
+ result += GetTypeString(fType);
+
+ result += ", Value: ";
+ switch (fType) {
+ case kBool:
+ result += GetBool();
+ break;
+ case kByte:
+ result += (Int_t) GetByte();
+ break;
+ case kInt:
+ result += GetInt();
+ break;
+ case kUInt:
+ result += GetUInt();
+ break;
+ case kFloat:
+ result += GetFloat();
+ break;
+ case kDynBool: {
+ result += "[";
+ Int_t size = GetDynamicSize();
+ for (Int_t k = 0; k < size; k ++) {
+ result += GetDynBool(k);
+ if (k + 1 < size) {
+ result += ", ";
+ }
+ }
+ result += "]";
+ }
+ break;
+ case kDynByte: {
+ result += "[";
+ Int_t size = GetDynamicSize();
+ for (Int_t k = 0; k < size; k ++) {
+ result += GetDynByte(k);
+ if (k + 1 < size) {
+ result += ", ";
+ }
+ }
+ result += "]";
+ }
+ break;
+ case kDynInt: {
+ result += "[";
+ Int_t size = GetDynamicSize();
+ for (Int_t k = 0; k < size; k ++) {
+ result += GetDynInt(k);
+ if (k + 1 < size) {
+ result += ", ";
+ }
+ }
+ result += "]";
+ }
+ break;
+ case kDynUInt: {
+ result += "[";
+ Int_t size = GetDynamicSize();
+ for (Int_t k = 0; k < size; k ++) {
+ result += GetDynUInt(k);
+ if (k + 1 < size) {
+ result += ", ";
+ }
+ }
+ result += "]";
+ }
+ break;
+ case kDynFloat: {
+ result += "[";
+ Int_t size = GetDynamicSize();
+ for (Int_t k = 0; k < size; k ++) {
+ result += GetDynFloat(k);
+ if (k + 1 < size) {
+ result += ", ";
+ }
+ }
+ result += "]";
+ }
+ break;
+ default:
+ result += "Unknown";
+ }
+
+ return result;
+}
+
+Bool_t AliSimpleValue::IsDynamic(AliSimpleValue::Type type) {
+
+ switch (type) {
+ case kDynBool:
+ case kDynByte:
+ case kDynInt:
+ case kDynUInt:
+ case kDynFloat:
+ return kTRUE;
+ default:
+ return kFALSE;
+ }
+}
+
+Int_t AliSimpleValue::GetSize() const {
+ //
+ // return the number of bytes used by this value.
+ // In case of dynamic type it returns dynamic size multiplied
+ // by the size of corresponding primitive type.
+ //
+
+ return IsDynamic(fType) ?
+ GetDynamicSize() * AliSimpleValue::GetPrimitiveSize(fType):
+ AliSimpleValue::GetPrimitiveSize(fType);
+}
+
+Int_t AliSimpleValue::GetPrimitiveSize(AliSimpleValue::Type type) {
+ //
+ // returns the number of bytes used by particular primitive type
+ // or by the corresponding primitive type in case of dynamic type.
+ //
+
+
+ switch (type) {
+
+ case kBool:
+ case kDynBool: return sizeof(Bool_t);
+ case kByte:
+ case kDynByte: return sizeof(Char_t);
+ case kInt:
+ case kDynInt: return sizeof(Int_t);
+ case kUInt:
+ case kDynUInt: return sizeof(UInt_t);
+ case kFloat:
+ case kDynFloat: return sizeof(Float_t);
+ default:
+ return 0;
+ }
+}
+
+const char* AliSimpleValue::GetTypeString(AliSimpleValue::Type type) {
+
+ switch (type) {
+ case kBool: return "Bool";
+ case kByte: return "Byte";
+ case kInt: return "Int";
+ case kUInt: return "UInt";
+ case kFloat: return "Float";
+ case kDynBool: return "DynBool";
+ case kDynByte: return "DynByte";
+ case kDynInt: return "DynInt";
+ case kDynUInt: return "DynUInt";
+ case kDynFloat: return "DynFloat";
+ default:
+ return "Unknown";
+ }
+}
--- /dev/null
+#ifndef ALI_SIMPLE_VALUE_H
+#define ALI_SIMPLE_VALUE_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+//
+// This class is a simple wrapper of
+// all primitive types used in PVSS SCADA system.
+//
+
+#include <TObject.h>
+#include <TString.h>
+
+class AliSimpleValue: public TObject {
+public:
+ enum Type {
+ kInvalid = 0,
+ kBool = 1,
+ kByte = 2,
+ kInt = 3,
+ kUInt = 4,
+ kFloat = 5,
+ kDynBool = 11,
+ kDynByte = 12,
+ kDynInt = 13,
+ kDynUInt = 14,
+ kDynFloat = 15
+ };
+
+
+ AliSimpleValue();
+
+ AliSimpleValue(const AliSimpleValue& other);
+
+ AliSimpleValue(Type type, Int_t size = 0);
+
+ AliSimpleValue(Bool_t val);
+
+ AliSimpleValue(Char_t val);
+
+ AliSimpleValue(Int_t val);
+
+ AliSimpleValue(UInt_t val);
+
+ AliSimpleValue(Float_t val);
+
+ AliSimpleValue(Int_t size, const Bool_t* vals);
+
+ AliSimpleValue(Int_t size, const Char_t* vals);
+
+ AliSimpleValue(Int_t size, const Int_t* vals);
+
+ AliSimpleValue(Int_t size, const UInt_t* vals);
+
+ AliSimpleValue(Int_t size, const Float_t* vals);
+
+ ~AliSimpleValue();
+
+
+ AliSimpleValue& operator=(const AliSimpleValue& other);
+
+ Bool_t operator==(const AliSimpleValue& other) const;
+
+ void SetBool(Bool_t val);
+
+ void SetByte(Char_t val);
+
+ void SetInt(Int_t val);
+
+ void SetUInt(UInt_t val);
+
+ void SetFloat(Float_t val);
+
+
+ Bool_t GetBool() const;
+
+ Char_t GetByte() const;
+
+ Int_t GetInt() const;
+
+ UInt_t GetUInt() const;
+
+ Float_t GetFloat() const;
+
+
+ void SetDynBool(Int_t n, Bool_t val);
+
+ void SetDynByte(Int_t n, Char_t val);
+
+ void SetDynInt(Int_t n, Int_t val);
+
+ void SetDynUInt(Int_t n, UInt_t val);
+
+ void SetDynFloat(Int_t n, Float_t val);
+
+
+ Bool_t GetDynBool(Int_t n) const;
+
+ Char_t GetDynByte(Int_t n) const;
+
+ Int_t GetDynInt(Int_t n) const;
+
+ UInt_t GetDynUInt(Int_t n) const;
+
+ Float_t GetDynFloat(Int_t n) const;
+
+
+ Type GetType() const {return fType;};
+
+ Int_t GetSize() const;
+
+ Int_t GetDynamicSize() const;
+
+ TString ToString() const;
+
+
+ static Bool_t IsDynamic(Type type);
+
+ static Int_t GetPrimitiveSize(Type type);
+
+ static const char* GetTypeString(Type type);
+
+private:
+
+ class BoolHolder: public TObject {
+ public:
+ Bool_t fValue;
+
+ BoolHolder() {}
+
+ BoolHolder(Bool_t val):fValue(val) {}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(BoolHolder, 1);
+ };
+
+ class ByteHolder: public TObject {
+ public:
+ Char_t fValue;
+
+ ByteHolder() {};
+
+ ByteHolder(Char_t val):fValue(val) {}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(ByteHolder, 1);
+ };
+
+ class IntHolder: public TObject {
+ public:
+ Int_t fValue;
+
+ IntHolder() {}
+
+ IntHolder(Int_t val):fValue(val) {}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(IntHolder, 1);
+ };
+
+ class UIntHolder: public TObject {
+ public:
+ UInt_t fValue;
+
+ UIntHolder() {}
+
+ UIntHolder(UInt_t val):fValue(val) {}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(UIntHolder, 1);
+ };
+
+ class FloatHolder: public TObject {
+ public:
+ Float_t fValue;
+
+ FloatHolder() {}
+
+ FloatHolder(Float_t val):fValue(val) {}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(FloatHolder, 1);
+ };
+
+ class DynHolder: public TObject {
+ public:
+ Int_t fSize;
+
+ DynHolder(): fSize(0) {}
+ DynHolder(Int_t size): fSize(size){}
+
+ ClassDef(DynHolder, 0);
+ };
+
+ class DynBoolHolder: public DynHolder {
+ public:
+ Bool_t* fValues; //[fSize]
+
+ DynBoolHolder(): fValues(NULL) {}
+
+ DynBoolHolder(Int_t size, const Bool_t* buf = NULL):
+ DynHolder(size) {
+ fValues = new Bool_t[size];
+ if (buf) memcpy(fValues, buf, size * sizeof(Bool_t));
+ }
+
+ virtual ~DynBoolHolder() {if (fValues) delete[] fValues;}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(DynBoolHolder, 1);
+ };
+
+ class DynByteHolder: public DynHolder {
+ public:
+ Char_t* fValues; //[fSize]
+
+ DynByteHolder(): fValues(NULL) {}
+
+ DynByteHolder(Int_t size, const Char_t* buf = NULL):
+ DynHolder(size) {
+ fValues = new Char_t[size];
+ if (buf) memcpy(fValues, buf, size * sizeof(Char_t));
+ }
+
+ virtual ~DynByteHolder() {if (fValues) delete[] fValues;}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(DynByteHolder, 1);
+ };
+
+ class DynIntHolder: public DynHolder {
+ public:
+ Int_t* fValues; //[fSize]
+
+ DynIntHolder(): fValues(NULL) {}
+
+ DynIntHolder(Int_t size, const Int_t* buf = NULL):
+ DynHolder(size) {
+ fValues = new Int_t[size];
+ if (buf) memcpy(fValues, buf, size * sizeof(Int_t));
+ }
+
+ virtual ~DynIntHolder() {if (fValues) delete[] fValues;}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(DynIntHolder, 1);
+ };
+
+ class DynUIntHolder: public DynHolder {
+ public:
+ UInt_t* fValues; //[fSize]
+
+ DynUIntHolder(): fValues(NULL) {}
+
+ DynUIntHolder(Int_t size, const UInt_t* buf = NULL):
+ DynHolder(size) {
+ fValues = new UInt_t[size];
+ if (buf) memcpy(fValues, buf, size * sizeof(UInt_t));
+ }
+
+ virtual ~DynUIntHolder() {if (fValues) delete[] fValues;}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(DynUIntHolder, 1);
+ };
+
+ class DynFloatHolder: public DynHolder {
+ public:
+ Float_t* fValues; //[fSize]
+
+ DynFloatHolder(): fValues(NULL) {}
+
+ DynFloatHolder(Int_t size, const Float_t* buf = NULL):
+ DynHolder(size) {
+ fValues = new Float_t[size];
+ if (buf) memcpy(fValues, buf, size * sizeof(Float_t));
+ }
+
+ virtual ~DynFloatHolder() {if (fValues) delete[] fValues;}
+
+ virtual TObject* Clone(const char* name) const;
+
+ virtual Bool_t IsEqual(const TObject* object) const;
+
+ ClassDef(DynFloatHolder, 1);
+ };
+
+
+ TObject* fHolder;
+
+ Type fType;
+
+
+ Bool_t TypeOk(Type type) const;
+
+ Bool_t BoundsOk(Int_t n) const;
+
+
+ ClassDef(AliSimpleValue, 1);
+};
+
+#endif
--- /dev/null
+#ifdef __CINT__
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+/* $Id$ */
+
+#pragma link off all globals;
+#pragma link off all classes;
+#pragma link off all functions;
+
+#pragma link C++ global gAlice;
+#pragma link C++ global gMC;
+
+// AliDCSClient classes ...
+#pragma link C++ class AliSimpleValue;
+#pragma link C++ class AliSimpleValue::BoolHolder;
+#pragma link C++ class AliSimpleValue::ByteHolder;
+#pragma link C++ class AliSimpleValue::IntHolder;
+#pragma link C++ class AliSimpleValue::UIntHolder;
+#pragma link C++ class AliSimpleValue::FloatHolder;
+#pragma link C++ class AliSimpleValue::DynHolder;
+#pragma link C++ class AliSimpleValue::DynBoolHolder;
+#pragma link C++ class AliSimpleValue::DynByteHolder;
+#pragma link C++ class AliSimpleValue::DynIntHolder;
+#pragma link C++ class AliSimpleValue::DynUIntHolder;
+#pragma link C++ class AliSimpleValue::DynFloatHolder;
+#pragma link C++ class AliDCSValue;
+
+#pragma link C++ class AliDCSMessage;
+#pragma link C++ class AliDCSClient;
+
+// Shuttle classes ...
+#pragma link C++ class AliShuttleConfig;
+#pragma link C++ class AliShuttleConfig::ConfigHolder;
+#pragma link C++ class AliShuttle;
+#pragma link C++ class AliCDBPreProcessor;
+
+#endif
--- /dev/null
+
+.PHONY: all
+
+all: doc.ps
+
+doc.ps: doc.dvi
+ dvips -o doc.ps doc.dvi
+
+doc.dvi: doc.tex
+ latex doc.tex
+ latex doc.tex
+
+clean:
+ rm -f doc.aux
+ rm -f doc.dvi
+ rm -f doc.ps
+ rm -f doc.toc
+ rm -f doc.lot
+ rm -f doc.lof
+# rm -f doc.pdf
+ rm -f *.log
+
--- /dev/null
+\documentclass[a4paper]{report}
+
+\usepackage{graphicx}
+
+\begin{document}
+
+\title{\Huge Shuttle\\\normalsize Program for automatic data retrieval from DCS}
+
+\maketitle
+
+\tableofcontents
+
+\listoftables
+
+\listoffigures
+
+\sloppy
+
+\chapter{Shuttle - Program for automatic data retrieval from DCS}
+
+\section{Overview}
+ \label{sec:Shuttle:Overview}
+
+ In DCS data base is stored information for particular real world object (RWO)
+ (sensors, valves etc.) as temperature, voltage, state etc. PVSS II is a SCADA
+ (Supervisory Control and Data Acquisition) system used by DCS for control, monitoring
+ and data acquisition. The abstract representation of any RWO is organized in
+ DataPoints (DP). Every DP has particular type which can be a composite (tree-like) structure
+ or primitive type as boolean, byte, integer, float. DP data is updated with certain refresh
+ rate (usally less than 1Hz) forming a time series. As the data points which represent
+ particular RWO are changed in time, additional attribute called 'alias' is assigned to them.
+ Every alias corresponds to the same RWO all the time.
+
+ When the value of some DP is changed, the new value and the timestamp is stored into the
+ data base. These value/timestamp pairs form the value series for particular DP. As DCS
+ data is collected independently on the experimental runs, part of the value series
+ corresponds to time intervals which don't belong to any run.
+
+ Every sub-detector has a set of 'aliases' which represent some parameters (temperature,
+ pressure, voltage etc.) relevant to its calibration. The working schema of
+ \emph{Shuttle} program is: collecting the data from DCS using AliDCSClient interface,
+ running the appropriate sub-detector preprocessor (one per sub-detector, used for preliminary
+ processing of the collected data) and storing the output of the preprocessor into the
+ calibration data base.
+
+\section{General schema}
+
+ \begin{figure}
+ \begin{center}
+ \includegraphics[width=0.9\textwidth]{pics/ShuttleSchema}
+ \end{center}
+ \caption{\emph{Shuttle} program general schema.}
+ \label{shuttle:schema}
+ \end{figure}
+
+ On figure \ref{shuttle:schema} is presented the \emph{Shuttle} program general schema:
+ \footnote{
+ All names which follow the pattern Ali$<$name$>$ are classes part of
+ AliRoot framework.
+ }
+
+ \begin{description}
+ \item[AliShuttle] The \emph{Shuttle} program manager, holds one AliShuttleConfig and
+ one AliCDBStorage object instances. It is used to manage data retrieval from DCS
+ \mbox{(through AliDCSClient)} and preliminary data processing.
+
+ \item[AliShuttleConfig] Reads the configuration from LDAP server.
+
+ \item[AliCDBPreProcessor] The interface for every sub-detector preprocessor.
+
+ \item[AliCDBStorage] Interface to the calibration data base. Currently supports
+ GRID and Local storage.
+
+ \item[AliShuttleTrigger] Waits for notification from DAQ when particular
+ experimental run is finished and runs AliShuttle.
+
+ \item[AliDCSClient] Makes connection to AMANDA and communicates over AliDCSProtocol.
+
+ \item[AMANDA]\footnote {
+ AMANDA is an abbreviation of Ali MANager for Data Access.
+ }
+ Communication layer for data access to the historical data base
+ provided by DCS. Implements AliDCSProtocol. Communicates with PVSS DM through
+ the internal PVSS protocol.
+ \item[PVSS DM] It's a data manager, part of PVSS SCADA system used to organize the
+ interaction with the underlying data base (RDBMS, local files etc.).
+
+ \end{description}
+
+\section{AliShuttle and AliCDBPreProcessor}
+ \label{sec:shuttle:preprocessor}
+
+ AliShuttle is the \emph{Shuttle} program manager, holds one AliShuttleConfig and
+ one AliCDBStorage object instances. It is used to manage data retrieval from DCS
+ \mbox{(through AliDCSClient)} and preliminary data processing. Only those sub-detectors
+ for which there is a valid configuration are processed by AliShuttle.
+ Two methods are used for triggering data retrieval and preprocessing:
+ \begin{description}
+ \item \mbox{void Process(Int\_t run, UInt\_t startTime, UInt\_t endTime)}\\
+ Retrieves data for particular run which lasted in time interval
+ \mbox{startTime - endTime} for every sub-detector in the configuration.
+
+ \item \mbox{void Process(Int\_t run, UInt\_t startTime, UInt\_t endTime,
+ const char* detector)}\\
+ Retrieves data for particular run which lasted in time interval
+ \mbox{startTime - endTime} for the specified detector.
+ \end{description}
+
+ Every subdetector can register to AliShuttle a specific preprocessor which implements
+ \mbox{AliCDBPreProcessor} interface. The aim of this preprocessor is to process
+ (fit, average etc.) the data retrieved from DCS and create and store a specific for
+ the sub-detector needs objects (histograms, functions etc.) which can be used during the
+ calibration process.\\
+ \mbox{AliCDBPreProcessor} is a subclass of TNamed and GetName() method is used by
+ \mbox{AliShuttle} to identify the sub-detector preprocessor.
+
+ It has one method which provides storage to the underlying AliCDBStorage object.
+ \begin{description}
+ \item \mbox{Bool\_t Store(const char* specType, TObject* object,
+ AliCDBMetaData* metaData)}\\
+ Stores \emph{object} with \emph{metaData} and identifier \emph{specType}.\\
+ Returns kTRUE in case of success and kFALSE otherwise.
+ \end{description}
+
+ Following callback methods are used.
+ \begin{description}
+ \item \mbox{void Initialize(Int\_t run, UInt\_t startTime, UInt\_t endTime)}\\
+ This method is called at the beginning of data retrieval for the sub-detector.
+ Parameters \emph{run}, \mbox{\emph{startTime}} and \mbox{\emph{endTime}}
+ specify current experimental run number and the time interval it lasted.
+ \item \mbox{void Finalize()}\\
+ This method is called at the end of data retrieval for the sub-detector.
+ \item \mbox{void Process(const char* alias, TList\& valueSet, Bool\_t hasError)}\\
+ This method is called for every \emph{alias} in the relative to the sub-detector
+ set specified in the configuration.\\
+ \emph{alias} specifies the current alias being processed.\\
+ \emph{valueSet} is a collection of AliDCSValue (see. AliDCSClient) representing
+ the value series retrieved from DCS.\\
+ \emph{hasError} is an error flag indicating if some error (comunication error,
+ data base error etc.) occurred during the data retrieval.
+
+ \end{description}
+
+ If there is a valid configuration for some sub-detector but there isn't corresponding
+ registered preprocessor, AliShuttle stores \emph{valueSet} to the calibration data base
+ by default. In this case two properties in meta data (AliCDBMetaData), contain the value
+ series time interval ("StartTime" and "EndTime" properties contian StartTime and EndTime
+ respectively stored in AliSimpleValue object).
+
+\section{AliShuttleConfig}
+
+ AliShuttleConfig provides transparent API to the \emph{Shuttle} configuration. Currently,
+ only LDAP is used to keep the configuration. Configuration consists entries (one per
+ sub-detector) which comprise AMANDA server host and port and set of aliases that the specific
+ sub-detector is interested in.
+
+\subsection{Configuration schema in LDAP}
+
+ \begin{figure}
+ \begin{center}
+ \includegraphics[width=0.9\textwidth]{pics/ShuttleConfig}
+ \end{center}
+ \caption{\emph{Shuttle} configuration schema in LDAP.}
+ \label{shuttle:config}
+ \end{figure}
+
+ On figure \ref{shuttle:config} is presented the LDAP configuration schema.
+ Every leaf (TPC, ITS, PHOS etc.) represents the specific sub-detector configuration.
+ These entries have objectclass \emph{shuttleConfig} which imposes the attributes
+ \emph{ipHost}, \emph{ipServicePort} and \emph{alias} as compulsory. Only \emph{alias}
+ attribute is MULTI-VALUE attribute. All sub-detectors' entries belong to one base entry.
+ \footnote {
+ Default base entry distinguished name is 'dn: dc=alice,dc=cern,dc=ch'.
+ }
+
+ LDAP access model is used to provide write access to particular sub-detector entry for
+ the relevant supporting group and annonymous read access to the whole configuration.
+
+ Here is an example of sub-detector entry in ldif format which can be written to LDAP server:
+
+ \begin{quote}
+ \#ITS config\\
+ dn: dt=ITS,dc=alice,dc=cern,dc=ch\\
+ objectClass: shuttleConfig\\
+ dt: ITS\\
+ ipHost: 192.168.39.23\\
+ ipServicePort: 4242\\
+ alias: HighVol01\\
+ alias: HighVol02\\
+ \end{quote}
+
+\subsection{Class overview}
+ AliShuttleConfig reads the configuration from LDAP server on the object creation.\\
+ Following methods are used to access the configuration:
+ \begin{description}
+ \item \mbox{\emph{Bool\_t IsValid() const}}\\
+ Returns true if the configuration is properly read from LDAP server and false
+ in otherwise.
+
+ \item \mbox{\emph{const TList* GetDetectors() const}}\\
+ Returns collection of TObjString objects which represent detectors' name for
+ which there is a valid configuration entry.
+
+ \item \mbox{\emph{Bool\_t HasDetector(const char* detector) const}}\\
+ Returns true if there is a valid entry configuration for the specified detector.
+ \item \mbox{\emph{const char* GetHost(const char* detector) const}}\\
+ Returns AMANDA server host for the specified detector.
+
+ \item \mbox{\emph{const char* GetHost(const char* detector) const}}\\
+ Returns AMANDA server port number for the specified detector.
+
+ \item \mbox{\emph{const TList* GetAliases(const char* detector) const}}\\
+ Returns collection of TObjString which represents the aliases for the specified
+ detector.
+
+ \end{description}
+
+\chapter{AliDCSClient}
+
+\section{Overview}
+
+ AliDCSClient provides API for historical data access to DCS data base. It's completely
+ based on ROOT framework and there isn't any external libraries. It communicates
+ with AMANDA server using AliDCSProtocol. AliDCSProtocol is a simple protocol which comprises
+ set of messages (AliDCSMessage). Protocol messages are transfered over TCP/IP.
+
+ The main functionality of AliDCSClient is to provide value series (stored into DCS
+ data base) for paticular \emph{alias}/\emph{DataPoint}\footnote {
+ It was described in \ref{sec:Shuttle:Overview} that every real object is represented
+ by one \emph{DataPoint} at time. As this \emph{DataPoint} can be changed in some
+ moment, additional attribute called \emph{alias} is assigned to it. \emph{Alias}
+ provides constant identifier for the underlying real object. If \emph{DataPoint}
+ is changed its \emph{alias} attribute will be set the same so it will provide a
+ constant association \mbox{\emph{alias}-real object}.
+ } in given time interval.
+ This value series is represented by collection (TList) of AliDCSValue.
+
+\section{Basic types and AliDCSValue}
+
+ Every \emph{alias} which is used in the calibration has particular type.
+ On table \ref{client:types} are listed the whole set of types. There are five primitive
+ types and the corresponding dynamic types (arrays of primitive types with arbitrary number
+ of elements).
+
+ These types are wrapped by AliSimpleValue. Every instance of this class represents a value
+ which type is one of the described. AliSimpleValue is an ROOT class and it can be
+ serialized by the standard ROOT persistent object mechanism.
+
+ \emph{Alias} value series is a collection of value/timestamp pairs. Every such pair is
+ realized by AliDCSValue. AliDCSValue has two fields: AliDCSVlaue.value (AliSimpleValue)
+ and AliDCSValue.timestamp (UInt\_t). The following simple rule could be used to understand
+ the meaning of value series:
+
+ \emph{Every alias has value (AliDCSValue.value) from the moment this value
+ became valid (AliDCSValue.timestamp) to the moment next value becomes valid.}
+
+
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|l|c|}
+ \hline
+ Type & size in bytes\\
+ \hline
+ Boolean & 1\\
+ Byte & 1\\
+ Integer & 4\\
+ Unsigned Integer & 4\\
+ Float & 4\\
+ \hline
+ Dynamic Boolean & n * 1\\
+ Dynamic Byte & n * 1\\
+ Dynamic Integer & n * 4\\
+ Dynamic Unsigned Integer & n * 4\\
+ Dynamic Float & n * 4 \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \label{client:types}
+ \caption[Basic types]{
+ Basic \emph{alias} types. For dynamic types 'n' means the
+ number of the elements. Every dynamic type can have arbitrary
+ number of elements.
+ }
+ \end{table}
+
+\section {AliDCSProtocol}
+
+ AliDCSProtocol is a communication protocol which comprises set of messages (AliDCSMessage).
+ Every message is composed of two parts: \emph{header} and \emph{body}. Message \emph{header}
+ (table \ref{client:protocol:header}) has fixed size and describes message \emph{body} (size
+ and type).
+
+ There are four message types every one of each has different message \emph{body} structure.
+ Below is a detailed description of every message type:
+
+ \begin{description}
+ \item[Request] Message sent by the client to make a data request for
+ particular \emph{alias}/\emph{DataPoint} and given time interval (table
+ \ref{client:protocol:body:request}).
+
+ \item[Count] If precedent request was valid and data could be retrieved from data
+ base, AMANDA server sends this message to indicated the total number of values
+ corresponding to it (table \ref{client:protocol:body:count}).
+
+ \item[ResultSet] Every such message contains part of the requested data. Server sends
+ series of these messages until it returns the total amount indicated by precedent
+ Count message (table \ref{client:protocol:body:resultset}).
+
+ \item[Error] Server sends this message if some error occurred.
+ (table \ref{client:protocol:body:error}).
+
+ \end{description}
+
+ On figure \ref{client:protocol:flowchart} is shown the protocol flowchart.
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|c|l|}
+ \hline
+ Byte & Meaning\\
+ \hline
+ 0 - 1 & Message signature ('A' and 'D').\\
+ 3 & Message version (ver: 1).\\
+ 4 & Message type. Describes message \emph{body} type.\\
+ 5 - 8 & Message \emph{body} size (unsigned interger).\\
+ \hline
+ \end{tabular}
+ \caption[Message header structure]{Message \emph{header} structure.}
+ \label{client:protocol:header}
+ \end{center}
+ \end{table}
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|p{1cm}|p{9cm}|}
+ \hline
+ Byte & Meaning\\
+ \hline
+ 0 & Request identifier (1 = \emph{alias}, 2 = \emph{DataPoint}).\\
+ 1 - 4 & Request StartTime - Beginning of the requested interval
+ (unsigned integer).\\
+ 5 - 8 & Request EndTime - End of the requested interval
+ (unsigned integer).\\
+ 8 - end & Request string - Zero terminated string representing
+ requested \emph{alias}/\emph{DataPoint}.\\
+ \hline
+ \end{tabular}
+ \caption[Request message structure]{Request message \emph{body} structure.}
+ \label{client:protocol:body:request}
+ \end{center}
+ \end{table}
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|p{1cm}|p{9cm}|}
+ \hline
+ Byte & Meaning\\
+ \hline
+ 0 - 3 & Total number of values (unsigned integer).\\
+ \hline
+ \end{tabular}
+ \caption[Count message structure]{Count message \emph{body} structure.}
+ \label{client:protocol:body:count}
+ \end{center}
+ \end{table}
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|p{1cm}|p{9cm}|}
+ \hline
+ Byte & Meaning\\
+ \hline
+ 0 & Value type identifier (On of the basic types on table:
+ \ref{client:types}).
+ Specifies the type of values contained in the message.\\
+ 1 - 4 & Number of values contained in the message (unsigned integer).\\
+ 5 - end & Sequence of value/timestamp pairs. Size depends on value type.
+ Timestmap size is always 4 bytes (unsigned integer). \\
+ \hline
+ \end{tabular}
+ \caption[ResultSet message structure]{ResultSet message \emph{body} structure.}
+ \label{client:protocol:body:resultset}
+ \end{center}
+ \end{table}
+
+ \begin{table}
+ \begin{center}
+ \begin{tabular}{|p{1cm}|p{9cm}|}
+ \hline
+ Byte & Meaning\\
+ \hline
+ 0 & Server error code.\\
+ & (UnknownAlisDPName = 1\\
+ & InvalidTimeRange = 2\\
+ & InvalidBufferSize = 3\\
+ & InvalidRequest = 4\\
+ & UnsupportedType = 5\\
+ & UnknownError = 6)\\
+ 1 - end & Server error string - Zero terminated string describing the error.\\
+ \hline
+ \end{tabular}
+ \caption[Error message structure]{Error message \emph{body} structure.}
+ \label{client:protocol:body:error}
+ \end{center}
+ \end{table}
+
+ \begin{figure}
+ \begin{center}
+ \includegraphics[width=1.1\textwidth,height=0.5\textheight]{pics/Protocol}
+ \end{center}
+ \caption{AliDCSProtocol flowchart.}
+ \label{client:protocol:flowchart}
+ \end{figure}
+
+\section{AliDCSClient}
+
+ AliDCSClient provides the client API. The following methods compose the most relevant part of
+ the interface:
+
+ \begin{description}
+
+ \item \emph{AliDCSClient(const char* host, Int\_t port, UInt\_t timeout, Int\_t retries)} -
+ Class constructor. \\
+ \emph{host} - Amanda server host.\\
+ \emph{prot} - Amanda server port.\\
+ \emph{time} - Timeout (in milliseconds) which is used during the communication.
+ \emph{retries} - Number of tries after which the client considers connection for
+ invalid and returns the corresponding error.
+
+ \item \emph{Bool\_t IsConnected()} - Returns kTrue in case there is a valid connection with
+ AMANDA server.
+
+ \item \emph{void Close()} - Close established connection.
+
+ \item \emph{Int\_t GetDPValues(const char* dpName, UInt\_t startTime, UInt\_t endTime,
+ TList\& result)} - Makes synchronous request to AMANDA server for particular
+ \emph{DataPoint} and time interval.\\
+ \emph{dpName} - Requested \emph{DataPoint}.\\
+ \emph{startTime} - Beginning of time interval (in absolute time).\\
+ \emph{endTime} - End of time interval (in absolute time).\\
+ \emph{result} - In this collection (TList) is returned the result of request
+ (Collection of AliDCSValue).\\
+ In case of error returns negative (error code) value otherwise returns the number
+ of retrieved values.
+
+ \item \emph{Int\_t GetAliasValues(const char* alias, UInt\_t startTime, UInt\_t endTime,
+ TList\& result)} - Makes synchronous request to AMANDA server for particular
+ \emph{alias} and time interval.\\
+ \emph{alias} - Requested \emph{alias}.\\
+ \emph{startTime} - Beginning of time interval (in absolute time).\\
+ \emph{endTime} - End of time interval (in absolute time).\\
+ \emph{result} - In this collection (TList) is returned the result of request
+ (Collection of AliDCSValue).\\
+ In case of error returns negative (error code) value otherwise returns the number
+ of retrieved values.
+
+ \item \emph{AliDCSMessage::ErrorCode GetServerErrorCode()} - In case of Error message returned
+ by AMANDA server this method returns the corresponding server error code.
+ \item \emph{const TString\& GetServerError()} - In case of Error message returned
+ by AMANDA server this method returns the corresponding server error description.
+ \end{description}
+
+ The following list contains the error codes which could be returned by \mbox{\emph{GetDPValues}} and
+ \mbox{\emph{GetAliasValues}} methods in case of error occurred (negative value returned).
+ \begin{description}
+ \item[fgkBadState] - There was no valid connection to AMANDA server when the request was made.
+
+ \item[fgkTimeout] - Specified number of retries was made and for every one the timeout was
+ reached before AMANDA server sends a response message or accept the connection.
+
+ \item[fgkBadMessage] - Invalid message received.
+
+ \item[fgkCommError] - TPC/IP connection error occurred.
+
+ \item[fgkServerError] - AMANDA server sent Error message. The corresponding error information
+ can be retrieved by \mbox{\emph{GetServerErrorCode()}} and \mbox{\emph{GetServerError()}}.
+ \end{description}
+
+\end{document}
--- /dev/null
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /home/byordano/work/report/pics/Protocol
+%%Creator: Dia v0.94
+%%CreationDate: Tue Sep 6 17:59:47 2005
+%%For: byordano
+%%Orientation: Portrait
+%%Magnification: 1.0000
+%%BoundingBox: 0 0 1832 1172
+%%BeginSetup
+%%EndSetup
+%%EndComments
+%%BeginProlog
+[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E
+/F /G /H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W /X /Y
+/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
+/d /e /f /g /h /i /j /k /l /m
+/n /o /p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
+/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
+/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
+/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
+/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
+/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
+/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
+/cp {closepath} bind def
+/c {curveto} bind def
+/f {fill} bind def
+/a {arc} bind def
+/ef {eofill} bind def
+/ex {exch} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth pop} bind def
+/tr {translate} bind def
+
+/ellipsedict 8 dict def
+ellipsedict /mtrx matrix put
+/ellipse
+{ ellipsedict begin
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc
+ 0 0 1 startangle endangle arc
+ savematrix setmatrix
+ end
+} def
+
+/mergeprocs {
+dup length
+3 -1 roll
+dup
+length
+dup
+5 1 roll
+3 -1 roll
+add
+array cvx
+dup
+3 -1 roll
+0 exch
+putinterval
+dup
+4 2 roll
+putinterval
+} bind def
+/Times-Roman-latin1
+ /Times-Roman findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Times-Italic-latin1
+ /Times-Italic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Times-Bold-latin1
+ /Times-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Times-BoldItalic-latin1
+ /Times-BoldItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/AvantGarde-Book-latin1
+ /AvantGarde-Book findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/AvantGarde-BookOblique-latin1
+ /AvantGarde-BookOblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/AvantGarde-Demi-latin1
+ /AvantGarde-Demi findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/AvantGarde-DemiOblique-latin1
+ /AvantGarde-DemiOblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Bookman-Light-latin1
+ /Bookman-Light findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Bookman-LightItalic-latin1
+ /Bookman-LightItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Bookman-Demi-latin1
+ /Bookman-Demi findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Bookman-DemiItalic-latin1
+ /Bookman-DemiItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Courier-latin1
+ /Courier findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Courier-Oblique-latin1
+ /Courier-Oblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Courier-Bold-latin1
+ /Courier-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Courier-BoldOblique-latin1
+ /Courier-BoldOblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-latin1
+ /Helvetica findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Oblique-latin1
+ /Helvetica-Oblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Bold-latin1
+ /Helvetica-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-BoldOblique-latin1
+ /Helvetica-BoldOblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Narrow-latin1
+ /Helvetica-Narrow findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Narrow-Oblique-latin1
+ /Helvetica-Narrow-Oblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Narrow-Bold-latin1
+ /Helvetica-Narrow-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Helvetica-Narrow-BoldOblique-latin1
+ /Helvetica-Narrow-BoldOblique findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/NewCenturySchoolbook-Roman-latin1
+ /NewCenturySchoolbook-Roman findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/NewCenturySchoolbook-Italic-latin1
+ /NewCenturySchoolbook-Italic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/NewCenturySchoolbook-Bold-latin1
+ /NewCenturySchoolbook-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/NewCenturySchoolbook-BoldItalic-latin1
+ /NewCenturySchoolbook-BoldItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Palatino-Roman-latin1
+ /Palatino-Roman findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Palatino-Italic-latin1
+ /Palatino-Italic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Palatino-Bold-latin1
+ /Palatino-Bold findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Palatino-BoldItalic-latin1
+ /Palatino-BoldItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/Symbol-latin1
+ /Symbol findfont
+definefont pop
+/ZapfChancery-MediumItalic-latin1
+ /ZapfChancery-MediumItalic findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+/ZapfDingbats-latin1
+ /ZapfDingbats findfont
+ dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding isolatin1encoding def
+ currentdict end
+definefont pop
+28.346000 -28.346000 scale
+19.842591 -41.396936 translate
+%%EndProlog
+
+
+1.000000 1.000000 1.000000 srgb
+n 22.779412 0.114706 m 22.779412 2.014706 l 29.029412 2.014706 l 29.029412 0.114706 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 22.779412 0.114706 m 22.779412 2.014706 l 29.029412 2.014706 l 29.029412 0.114706 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(START) dup sw 2 div 25.904412 ex sub 1.314706 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 22.254412 3.864706 m 22.254412 5.764706 l 29.604412 5.764706 l 29.604412 3.864706 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 22.254412 3.864706 m 22.254412 5.764706 l 29.604412 5.764706 l 29.604412 3.864706 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(SEND REQUEST MSG) dup sw 2 div 25.929412 ex sub 5.064706 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 25.923477 11.128418 3.405935 3.286288 0 360 ellipse f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 25.923477 11.128418 3.405935 3.286288 0 360 ellipse cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(WAIT FOR ) dup sw 2 div 25.923477 ex sub 10.978418 m gs 1 -1 sc sh gr
+(RESPONSE MSG) dup sw 2 div 25.923477 ex sub 11.778418 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 25.904412 2.014706 m 25.922834 3.377947 l s
+[] 0 sd
+0 slj
+0 slc
+n 25.927901 3.752913 m 25.671168 3.256337 l 25.922834 3.377947 l 26.171122 3.249580 l ef
+n 25.927901 3.752913 m 25.671168 3.256337 l 25.922834 3.377947 l 26.171122 3.249580 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 25.929412 5.764706 m 25.924867 7.355328 l s
+[] 0 sd
+0 slj
+0 slc
+n 25.923796 7.730327 m 25.675226 7.229615 l 25.924867 7.355328 l 26.175224 7.231043 l ef
+n 25.923796 7.730327 m 25.675226 7.229615 l 25.924867 7.355328 l 26.175224 7.231043 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 25.923477 14.414706 m 25.920825 19.869089 l s
+[] 0 sd
+0 slj
+0 slc
+n 25.920643 20.244089 m 25.670886 19.743968 l 25.920825 19.869089 l 26.170886 19.744211 l ef
+n 25.920643 20.244089 m 25.670886 19.743968 l 25.920825 19.869089 l 26.170886 19.744211 l cp s
+1.000000 1.000000 1.000000 srgb
+n 12.523663 21.312892 3.350000 3.286288 0 360 ellipse f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 12.523663 21.312892 3.350000 3.286288 0 360 ellipse cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(WAIT FOR ) dup sw 2 div 12.523663 ex sub 21.162892 m gs 1 -1 sc sh gr
+(RESPONSE MSG) dup sw 2 div 12.523663 ex sub 21.962892 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 21.820588 20.355893 m 21.820588 22.255893 l 30.020588 22.255893 l 30.020588 20.355893 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 21.820588 20.355893 m 21.820588 22.255893 l 30.020588 22.255893 l 30.020588 20.355893 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(SET SERVER ERROR) dup sw 2 div 25.920588 ex sub 21.555893 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 15.873663 21.312892 m 18.847125 21.312892 l 18.847125 21.305893 l 21.333785 21.305893 l s
+[] 0 sd
+0 slj
+0 slc
+n 21.708785 21.305893 m 21.208785 21.555893 l 21.333785 21.305893 l 21.208785 21.055893 l ef
+n 21.708785 21.305893 m 21.208785 21.555893 l 21.333785 21.305893 l 21.208785 21.055893 l cp s
+1.000000 1.000000 1.000000 srgb
+n 35.270588 30.532363 m 35.270588 32.432363 l 44.720588 32.432363 l 44.720588 30.532363 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 35.270588 30.532363 m 35.270588 32.432363 l 44.720588 32.432363 l 44.720588 30.532363 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(SET ERROR CODE) dup sw 2 div 39.995588 ex sub 31.732363 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 35.836764 39.446936 m 35.836764 41.346936 l 44.105882 41.346936 l 44.105882 39.446936 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 35.836764 39.446936 m 35.836764 41.346936 l 44.105882 41.346936 l 44.105882 39.446936 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(END) dup sw 2 div 39.971323 ex sub 40.646936 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 9.173663 21.312892 m 2.321395 21.309218 l s
+[] 0 sd
+0 slj
+0 slc
+n 1.946395 21.309017 m 2.446529 21.059285 l 2.321395 21.309218 l 2.446261 21.559285 l ef
+n 1.946395 21.309017 m 2.446529 21.059285 l 2.321395 21.309218 l 2.446261 21.559285 l cp s
+1.000000 1.000000 1.000000 srgb
+n -13.217976 17.218289 m -7.697063 21.303020 l -13.217976 25.387750 l -18.738888 21.303020 l ef
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n -13.217976 17.218289 m -7.697063 21.303020 l -13.217976 25.387750 l -18.738888 21.303020 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(RECEIVED < COUNT) dup sw 2 div -13.217976 ex sub 21.553020 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n -14.764141 11.061519 m -19.792591 11.061519 l -19.792591 21.303020 l -19.225692 21.303020 l s
+[] 0 sd
+0 slj
+0 slc
+n -18.850692 21.303020 m -19.350692 21.553020 l -19.225692 21.303020 l -19.350692 21.053020 l ef
+n -18.850692 21.303020 m -19.350692 21.553020 l -19.225692 21.303020 l -19.350692 21.053020 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 29.329412 11.128418 m 39.995588 11.128418 l 39.995588 30.045560 l s
+[] 0 sd
+0 slj
+0 slc
+n 39.995588 30.420560 m 39.745588 29.920560 l 39.995588 30.045560 l 40.245588 29.920560 l ef
+n 39.995588 30.420560 m 39.745588 29.920560 l 39.995588 30.045560 l 40.245588 29.920560 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 39.995588 32.432363 m 39.973007 38.960135 l s
+[] 0 sd
+0 slj
+0 slc
+n 39.971710 39.335133 m 39.723441 38.834271 l 39.973007 38.960135 l 40.223438 38.836001 l ef
+n 39.971710 39.335133 m 39.723441 38.834271 l 39.973007 38.960135 l 40.223438 38.836001 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(Timeout or bad msg received.) 30.719117 10.690515 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(Timeout or bad msg received) 12.595588 26.167667 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(Error msg received) 26.130882 15.623550 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(Error msg received) 16.183824 20.728770 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n -14.764141 10.111519 m -14.764141 12.011519 l -8.999436 12.011519 l -8.999436 10.111519 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n -14.764141 10.111519 m -14.764141 12.011519 l -8.999436 12.011519 l -8.999436 10.111519 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(SET COUNT) dup sw 2 div -11.881789 ex sub 11.311519 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n -13.217976 17.218289 m -13.217976 13.976491 l 12.523663 13.976491 l 12.523663 17.539801 l s
+[] 0 sd
+0 slj
+0 slc
+n 12.523663 17.914801 m 12.273663 17.414801 l 12.523663 17.539801 l 12.773663 17.414801 l ef
+n 12.523663 17.914801 m 12.273663 17.414801 l 12.523663 17.539801 l 12.773663 17.414801 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 22.517541 11.128418 m -8.512633 11.062552 l s
+[] 0 sd
+0 slj
+0 slc
+n -8.887633 11.061756 m -8.387103 10.812818 l -8.512633 11.062552 l -8.388164 11.312817 l ef
+n -8.887633 11.061756 m -8.387103 10.812818 l -8.512633 11.062552 l -8.388164 11.312817 l cp s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 35.286764 40.396936 m -13.236225 40.396936 l -13.236225 35.586344 l -13.251562 35.586344 l s
+0 slj
+n 35.286764 40.646936 m 35.786764 40.396936 l 35.286764 40.146936 l ef
+/Helvetica-latin1 ff 0.560000 scf sf
+(ResutlSet msg received) 2.854240 20.920741 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(Count msg received) 16.417748 10.711765 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n -13.251562 27.223027 m -7.690486 31.404685 l -13.251562 35.586344 l -18.812639 31.404685 l ef
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n -13.251562 27.223027 m -7.690486 31.404685 l -13.251562 35.586344 l -18.812639 31.404685 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(RECEIVED > COUNT ) dup sw 2 div -13.251562 ex sub 31.654685 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(YES) -12.887873 16.795449 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0 slc
+n 34.720588 31.482363 m 12.523663 31.482363 l 12.523663 24.599180 l s
+0 slj
+n 34.720588 31.732363 m 35.220588 31.482363 l 34.720588 31.232363 l ef
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n -13.217976 25.387750 m -13.241499 26.673119 l s
+0 slj
+n -13.491457 26.668545 m -13.250648 27.173035 l -12.991541 26.677694 l ef
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n -7.690486 31.404685 m 12.066279 31.417296 l s
+0 slj
+n 12.066119 31.667296 m 12.566279 31.417615 l 12.066438 31.167296 l ef
+/Helvetica-latin1 ff 0.560000 scf sf
+(YES) -7.330972 31.017780 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(NO) -12.741176 35.991158 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 30.020588 21.305893 m 39.548268 21.298648 l s
+0 slj
+n 39.548458 21.548647 m 40.048268 21.298267 l 39.548078 21.048648 l ef
+1.000000 1.000000 1.000000 srgb
+n -6.315409 20.358957 m -6.315409 22.258957 l 1.834591 22.258957 l 1.834591 20.358957 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n -6.315409 20.358957 m -6.315409 22.258957 l 1.834591 22.258957 l 1.834591 20.358957 l cp s
+/Helvetica-latin1 ff 0.560000 scf sf
+(RECEIVED += msg.Count) dup sw 2 div -2.240409 ex sub 21.558957 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n -6.315409 21.308957 m -7.147068 21.305383 l s
+0 slj
+n -7.145994 21.055386 m -7.647064 21.303235 l -7.148143 21.555381 l ef
+/Helvetica-latin1 ff 0.560000 scf sf
+(NO) -12.529012 25.878003 m gs 1 -1 sc sh gr
+/Helvetica-latin1 ff 0.560000 scf sf
+(Bad msg received) -1.496479 30.969941 m gs 1 -1 sc sh gr
+showpage
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 575 755
+%%Pages: 0
+%%Creator: Sun Microsystems, Inc.
+%%Title: none
+%%CreationDate: none
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+%%BeginResource: SDRes
+/b4_inc_state save def
+/dict_count countdictstack def
+/op_count count 1 sub def
+userdict begin
+0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[] 0 setdash newpath
+/languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint} if} if
+/bdef {bind def} bind def
+/c {setrgbcolor} bdef
+/l {neg lineto} bdef
+/rl {neg rlineto} bdef
+/lc {setlinecap} bdef
+/lj {setlinejoin} bdef
+/lw {setlinewidth} bdef
+/ml {setmiterlimit} bdef
+/ld {setdash} bdef
+/m {neg moveto} bdef
+/ct {6 2 roll neg 6 2 roll neg 6 2 roll neg curveto} bdef
+/r {rotate} bdef
+/t {neg translate} bdef
+/s {scale} bdef
+/sw {show} bdef
+/gs {gsave} bdef
+/gr {grestore} bdef
+/f {findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def
+currentdict end /NFont exch definefont pop /NFont findfont} bdef
+/p {closepath} bdef
+/sf {scalefont setfont} bdef
+/ef {eofill}bdef
+/pc {closepath stroke}bdef
+/ps {stroke}bdef
+/pum {matrix currentmatrix}bdef
+/pom {setmatrix}bdef
+/bs {/aString exch def /nXOfs exch def /nWidth exch def currentpoint nXOfs 0 rmoveto pum nWidth aString stringwidth pop div 1 scale aString show pom moveto} bdef
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%EndPageSetup
+pum
+0.02833 0.02834 s
+0 -26640 t
+/tm matrix currentmatrix def
+gs
+tm setmatrix
+-635 -635 t
+1 1 s
+635 635 m 20924 635 l 20924 27274 l 635 27274 l 635 635 l eoclip newpath
+0.003 0.722 1.000 c 3675 12165 m 3325 12165 3040 11880 3040 11530 ct 3040 11180 3325 10895 3675 10895 ct
+4025 10895 4310 11180 4310 11530 ct 4310 11880 4025 12165 3675 12165 ct 3675 12165 l
+p ef
+0 lw 1 lj 0.003 0.003 0.003 c 3675 12165 m 3325 12165 3040 11880 3040 11530 ct
+3040 11180 3325 10895 3675 10895 ct 4025 10895 4310 11180 4310 11530 ct 4310 11880 4025 12165 3675 12165 ct
+3675 12165 l pc
+0.003 0.722 1.000 c 9860 12065 m 9510 12065 9225 11780 9225 11430 ct 9225 11080 9510 10795 9860 10795 ct
+10210 10795 10495 11080 10495 11430 ct 10495 11780 10210 12065 9860 12065 ct
+9860 12065 l p ef
+0.003 0.003 0.003 c 9860 12065 m 9510 12065 9225 11780 9225 11430 ct 9225 11080 9510 10795 9860 10795 ct
+10210 10795 10495 11080 10495 11430 ct 10495 11780 10210 12065 9860 12065 ct
+9860 12065 l pc
+0.003 0.722 1.000 c 15740 12165 m 15390 12165 15105 11880 15105 11530 ct 15105 11180 15390 10895 15740 10895 ct
+16090 10895 16375 11180 16375 11530 ct 16375 11880 16090 12165 15740 12165 ct
+15740 12165 l p ef
+0.003 0.003 0.003 c 15740 12165 m 15390 12165 15105 11880 15105 11530 ct 15105 11180 15390 10895 15740 10895 ct
+16090 10895 16375 11180 16375 11530 ct 16375 11880 16090 12165 15740 12165 ct
+15740 12165 l pc
+9855 8420 m 9505 8420 9220 8135 9220 7785 ct 9220 7435 9505 7150 9855 7150 ct
+10205 7150 10490 7435 10490 7785 ct 10490 8135 10205 8420 9855 8420 ct 9855 8420 l
+pc
+10455 5150 m 10105 5150 9820 4865 9820 4515 ct 9820 4165 10105 3880 10455 3880 ct
+10805 3880 11090 4165 11090 4515 ct 11090 4865 10805 5150 10455 5150 ct 10455 5150 l
+pc
+10455 5150 m 9855 7150 l ps
+9855 8420 m 3675 10895 l ps
+9855 8420 m 9860 10795 l ps
+9855 8420 m 15740 10895 l ps
+gs
+pum
+4577 11581 t
+194 5 m 276 -23 l 276 -32 l 266 -32 265 -32 263 -32 ct 243 -32 239 -38 239 -64 ct
+239 -384 l 236 -385 l 209 -375 189 -369 153 -360 ct 153 -351 l 157 -351 161 -351 165 -351 ct
+186 -351 191 -346 191 -323 ct 191 -235 l 170 -253 155 -259 132 -259 ct 67 -259 15 -195 15 -115 ct
+15 -43 57 5 119 5 ct 151 5 172 -5 191 -32 ct 191 3 l p
+191 -57 m 191 -53 187 -46 182 -40 ct 172 -29 157 -23 141 -23 ct 94 -23 63 -68 63 -138 ct
+63 -201 91 -243 134 -243 ct 164 -243 191 -217 191 -187 ct p ef
+427 -253 m 370 -253 l 370 -319 l 370 -324 370 -326 366 -326 ct 362 -321 359 -316 355 -310 ct
+334 -279 309 -252 300 -250 ct 294 -246 291 -242 291 -239 ct 291 -238 291 -236 293 -235 ct
+323 -235 l 323 -65 l 323 -18 340 5 373 5 ct 401 5 422 -7 441 -37 ct 434 -43 l
+422 -29 412 -23 400 -23 ct 379 -23 370 -38 370 -74 ct 370 -235 l 427 -235 l
+p ef
+741 -217 m 456 -217 l 456 -180 l 741 -180 l p
+741 -104 m 456 -104 l 456 -67 l 741 -67 l p ef
+901 -349 m 901 -67 l 901 -19 895 -13 848 -10 ct 848 0 l 1012 0 l 1012 -10 l
+966 -12 958 -20 958 -61 ct 958 -349 l 989 -349 l 1053 -349 1065 -339 1078 -277 ct
+1092 -277 l 1089 -373 l 770 -373 l 767 -277 l 781 -277 l 794 -338 807 -349 870 -349 ct
+p ef
+1214 -164 m 1229 -163 1239 -162 1253 -162 ct 1297 -162 1328 -168 1352 -181 ct
+1386 -199 1406 -234 1406 -271 ct 1406 -294 1398 -316 1383 -332 ct 1361 -357 1311 -373 1258 -373 ct
+1110 -373 l 1110 -362 l 1151 -358 1157 -352 1157 -311 ct 1157 -67 l 1157 -20 1152 -14 1110 -10 ct
+1110 0 l 1267 0 l 1267 -10 l 1223 -12 1214 -20 1214 -61 ct p
+1214 -333 m 1214 -348 1218 -352 1234 -352 ct 1310 -352 1345 -325 1345 -267 ct
+1345 -213 1311 -184 1247 -184 ct 1235 -184 1227 -185 1214 -186 ct p ef
+1763 -253 m 1758 -381 l 1746 -381 l 1743 -369 1734 -362 1723 -362 ct 1718 -362 1709 -364 1701 -367 ct
+1673 -376 1645 -381 1618 -381 ct 1572 -381 1525 -363 1490 -332 ct 1451 -297 1429 -245 1429 -183 ct
+1429 -130 1446 -82 1475 -50 ct 1509 -13 1561 7 1617 7 ct 1680 7 1736 -18 1771 -63 ct
+1760 -73 l 1719 -33 1681 -16 1635 -16 ct 1599 -16 1567 -28 1543 -49 ct 1512 -77 1495 -128 1495 -190 ct
+1495 -292 1547 -358 1629 -358 ct 1661 -358 1690 -346 1713 -324 ct 1731 -306 1739 -290 1750 -253 ct
+p ef
+pom
+gr
+gs
+pum
+10795 11528 t
+194 5 m 276 -23 l 276 -32 l 266 -32 265 -32 263 -32 ct 243 -32 239 -38 239 -64 ct
+239 -384 l 236 -385 l 209 -375 189 -369 153 -360 ct 153 -351 l 157 -351 161 -351 165 -351 ct
+186 -351 191 -346 191 -323 ct 191 -235 l 170 -253 155 -259 132 -259 ct 67 -259 15 -195 15 -115 ct
+15 -43 57 5 119 5 ct 151 5 172 -5 191 -32 ct 191 3 l p
+191 -57 m 191 -53 187 -46 182 -40 ct 172 -29 157 -23 141 -23 ct 94 -23 63 -68 63 -138 ct
+63 -201 91 -243 134 -243 ct 164 -243 191 -217 191 -187 ct p ef
+427 -253 m 370 -253 l 370 -319 l 370 -324 370 -326 366 -326 ct 362 -321 359 -316 355 -310 ct
+334 -279 309 -252 300 -250 ct 294 -246 291 -242 291 -239 ct 291 -238 291 -236 293 -235 ct
+323 -235 l 323 -65 l 323 -18 340 5 373 5 ct 401 5 422 -7 441 -37 ct 434 -43 l
+422 -29 412 -23 400 -23 ct 379 -23 370 -38 370 -74 ct 370 -235 l 427 -235 l
+p ef
+741 -217 m 456 -217 l 456 -180 l 741 -180 l p
+741 -104 m 456 -104 l 456 -67 l 741 -67 l p ef
+822 -61 m 822 -19 815 -12 768 -10 ct 768 0 l 935 0 l 935 -10 l 889 -12 880 -20 880 -61 ct
+880 -311 l 880 -353 888 -360 935 -362 ct 935 -373 l 768 -373 l 768 -362 l
+816 -359 822 -353 822 -311 ct p ef
+1087 -349 m 1087 -67 l 1087 -19 1081 -13 1034 -10 ct 1034 0 l 1198 0 l
+1198 -10 l 1152 -12 1144 -20 1144 -61 ct 1144 -349 l 1175 -349 l 1239 -349 1251 -339 1264 -277 ct
+1278 -277 l 1275 -373 l 956 -373 l 953 -277 l 967 -277 l 980 -338 993 -349 1056 -349 ct
+p ef
+1539 -381 m 1527 -381 l 1525 -368 1518 -362 1509 -362 ct 1503 -362 1493 -364 1484 -368 ct
+1463 -376 1442 -381 1424 -381 ct 1400 -381 1375 -371 1356 -355 ct 1337 -337 1327 -314 1327 -284 ct
+1327 -239 1351 -208 1415 -174 ct 1455 -153 1484 -130 1499 -108 ct 1504 -101 1506 -89 1506 -76 ct
+1506 -38 1478 -12 1437 -12 ct 1387 -12 1351 -43 1323 -112 ct 1310 -112 l 1327 7 l
+1340 7 l 1340 -3 1347 -11 1355 -11 ct 1362 -11 1371 -9 1382 -5 ct 1403 3 1426 7 1448 7 ct
+1513 7 1563 -36 1563 -94 ct 1563 -141 1532 -177 1458 -217 ct 1399 -250 1375 -275 1375 -305 ct
+1375 -336 1399 -358 1434 -358 ct 1459 -358 1483 -347 1503 -327 ct 1520 -309 1528 -294 1537 -261 ct
+1551 -261 l p ef
+pom
+gr
+gs
+pum
+16722 11607 t
+194 5 m 276 -23 l 276 -32 l 266 -32 265 -32 263 -32 ct 243 -32 239 -38 239 -64 ct
+239 -384 l 236 -385 l 209 -375 189 -369 153 -360 ct 153 -351 l 157 -351 161 -351 165 -351 ct
+186 -351 191 -346 191 -323 ct 191 -235 l 170 -253 155 -259 132 -259 ct 67 -259 15 -195 15 -115 ct
+15 -43 57 5 119 5 ct 151 5 172 -5 191 -32 ct 191 3 l p
+191 -57 m 191 -53 187 -46 182 -40 ct 172 -29 157 -23 141 -23 ct 94 -23 63 -68 63 -138 ct
+63 -201 91 -243 134 -243 ct 164 -243 191 -217 191 -187 ct p ef
+427 -253 m 370 -253 l 370 -319 l 370 -324 370 -326 366 -326 ct 362 -321 359 -316 355 -310 ct
+334 -279 309 -252 300 -250 ct 294 -246 291 -242 291 -239 ct 291 -238 291 -236 293 -235 ct
+323 -235 l 323 -65 l 323 -18 340 5 373 5 ct 401 5 422 -7 441 -37 ct 434 -43 l
+422 -29 412 -23 400 -23 ct 379 -23 370 -38 370 -74 ct 370 -235 l 427 -235 l
+p ef
+741 -217 m 456 -217 l 456 -180 l 741 -180 l p
+741 -104 m 456 -104 l 456 -67 l 741 -67 l p ef
+871 -164 m 886 -163 896 -162 910 -162 ct 954 -162 985 -168 1009 -181 ct 1043 -199 1063 -234 1063 -271 ct
+1063 -294 1055 -316 1040 -332 ct 1018 -357 968 -373 915 -373 ct 767 -373 l 767 -362 l
+808 -358 814 -352 814 -311 ct 814 -67 l 814 -20 809 -14 767 -10 ct 767 0 l
+924 0 l 924 -10 l 880 -12 871 -20 871 -61 ct p
+871 -333 m 871 -348 875 -352 891 -352 ct 967 -352 1002 -325 1002 -267 ct 1002 -213 968 -184 904 -184 ct
+892 -184 884 -185 871 -186 ct p ef
+1188 -202 m 1188 -311 l 1188 -352 1195 -358 1238 -362 ct 1238 -373 l 1081 -373 l
+1081 -362 l 1125 -358 1131 -352 1131 -311 ct 1131 -67 l 1131 -20 1125 -13 1081 -10 ct
+1081 0 l 1238 0 l 1238 -10 l 1196 -14 1188 -21 1188 -61 ct 1188 -177 l
+1359 -177 l 1359 -67 l 1359 -20 1354 -13 1310 -10 ct 1310 0 l 1466 0 l
+1466 -10 l 1424 -14 1417 -21 1417 -61 ct 1417 -311 l 1417 -352 1423 -358 1466 -362 ct
+1466 -373 l 1310 -373 l 1310 -362 l 1353 -358 1359 -352 1359 -311 ct 1359 -202 l
+p ef
+1680 -381 m 1572 -381 1496 -300 1496 -186 ct 1496 -133 1514 -82 1544 -49 ct
+1577 -14 1627 7 1677 7 ct 1788 7 1865 -71 1865 -184 ct 1865 -240 1848 -288 1817 -322 ct
+1782 -360 l 1734 -381 l p
+1680 -360 m 1706 -360 1732 -350 1752 -332 ct 1783 -305 1800 -252 1800 -184 ct
+1800 -151 1793 -112 1782 -83 ct 1777 -69 1767 -55 1754 -42 ct 1734 -22 1709 -12 1679 -12 ct
+1653 -12 1628 -22 1608 -40 ct 1579 -65 1560 -122 1560 -185 ct 1560 -243 1576 -297 1599 -324 ct
+1621 -348 l 1649 -360 l p ef
+2136 -381 m 2124 -381 l 2122 -368 2115 -362 2106 -362 ct 2100 -362 2090 -364 2081 -368 ct
+2060 -376 2039 -381 2021 -381 ct 1997 -381 1972 -371 1953 -355 ct 1934 -337 1924 -314 1924 -284 ct
+1924 -239 1948 -208 2012 -174 ct 2052 -153 2081 -130 2096 -108 ct 2101 -101 2103 -89 2103 -76 ct
+2103 -38 2075 -12 2034 -12 ct 1984 -12 1948 -43 1920 -112 ct 1907 -112 l 1924 7 l
+1937 7 l 1937 -3 1944 -11 1952 -11 ct 1959 -11 1968 -9 1979 -5 ct 2000 3 2023 7 2045 7 ct
+2110 7 2160 -36 2160 -94 ct 2160 -141 2129 -177 2055 -217 ct 1996 -250 1972 -275 1972 -305 ct
+1972 -336 1996 -358 2031 -358 ct 2056 -358 2080 -347 2100 -327 ct 2117 -309 2125 -294 2134 -261 ct
+2148 -261 l p ef
+pom
+gr
+gs
+pum
+10901 8009 t
+194 5 m 276 -23 l 276 -32 l 266 -32 265 -32 263 -32 ct 243 -32 239 -38 239 -64 ct
+239 -384 l 236 -385 l 209 -375 189 -369 153 -360 ct 153 -351 l 157 -351 161 -351 165 -351 ct
+186 -351 191 -346 191 -323 ct 191 -235 l 170 -253 155 -259 132 -259 ct 67 -259 15 -195 15 -115 ct
+15 -43 57 5 119 5 ct 151 5 172 -5 191 -32 ct 191 3 l p
+191 -57 m 191 -53 187 -46 182 -40 ct 172 -29 157 -23 141 -23 ct 94 -23 63 -68 63 -138 ct
+63 -201 91 -243 134 -243 ct 164 -243 191 -217 191 -187 ct p ef
+508 -87 m 481 -48 461 -34 428 -34 ct 377 -34 341 -80 341 -144 ct 341 -203 372 -243 418 -243 ct
+438 -243 445 -236 451 -216 ct 454 -203 l 459 -187 469 -177 481 -177 ct 496 -177 508 -188 508 -201 ct
+508 -232 468 -259 421 -259 ct 393 -259 365 -248 342 -227 ct 313 -203 298 -164 298 -120 ct
+298 -46 342 5 405 5 ct 430 5 453 -3 473 -20 ct 488 -34 499 -49 516 -82 ct p ef
+834 -217 m 549 -217 l 549 -180 l 834 -180 l p
+834 -104 m 549 -104 l 549 -67 l 834 -67 l p ef
+1100 -37 m 1090 -29 1083 -26 1075 -26 ct 1062 -26 1058 -34 1058 -59 ct 1058 -169 l
+1058 -198 1055 -214 1047 -228 ct 1034 -248 1010 -259 977 -259 ct 924 -259 882 -231 882 -196 ct
+882 -183 893 -172 906 -172 ct 920 -172 932 -183 932 -195 ct 932 -197 931 -200 931 -204 ct
+929 -209 929 -214 929 -218 ct 929 -233 947 -245 970 -245 ct 997 -245 1012 -229 1012 -199 ct
+1012 -164 l 926 -129 916 -125 892 -103 ct 879 -92 871 -73 871 -54 ct 871 -19 896 5 931 5 ct
+955 5 979 -6 1013 -35 ct 1016 -6 1026 5 1049 5 ct 1068 5 1080 -1 1100 -22 ct p
+1012 -69 m 1012 -51 1010 -46 998 -40 ct 984 -32 968 -27 957 -27 ct 937 -27 921 -46 921 -70 ct
+921 -72 l 921 -106 944 -126 1012 -151 ct p ef
+1111 -351 m 1115 -351 l 1121 -351 1128 -352 1132 -352 ct 1150 -352 1156 -344 1156 -318 ct
+1156 -49 l 1156 -18 1148 -11 1112 -8 ct 1112 0 l 1245 0 l 1245 -8 l 1210 -10 1203 -16 1203 -47 ct
+1203 -384 l 1201 -385 l 1172 -375 1150 -369 1111 -360 ct p ef
+1355 -259 m 1268 -228 l 1268 -219 l 1272 -220 l 1279 -221 1286 -222 1291 -222 ct
+1305 -222 1310 -213 1310 -188 ct 1310 -57 l 1310 -16 1304 -10 1266 -8 ct 1266 0 l
+1399 0 l 1399 -8 l 1362 -11 1357 -16 1357 -57 ct 1357 -257 l p
+1329 -385 m 1313 -385 1300 -372 1300 -356 ct 1300 -340 1313 -327 1329 -327 ct
+1345 -327 1358 -340 1358 -356 ct 1358 -372 l 1345 -385 l p ef
+1638 -87 m 1611 -48 1591 -34 1558 -34 ct 1507 -34 1471 -80 1471 -144 ct 1471 -203 1502 -243 1548 -243 ct
+1568 -243 1575 -236 1581 -216 ct 1584 -203 l 1589 -187 1599 -177 1611 -177 ct
+1626 -177 1638 -188 1638 -201 ct 1638 -232 1598 -259 1551 -259 ct 1523 -259 1495 -248 1472 -227 ct
+1443 -203 1428 -164 1428 -120 ct 1428 -46 1472 5 1535 5 ct 1560 5 1583 -3 1603 -20 ct
+1618 -34 1629 -49 1646 -82 ct p ef
+1894 -92 m 1867 -49 1842 -33 1806 -33 ct 1774 -33 1750 -49 1733 -81 ct 1723 -103 1719 -121 1718 -156 ct
+1892 -156 l 1887 -192 1882 -209 1868 -227 ct 1851 -247 1825 -259 1795 -259 ct
+1767 -259 1741 -249 1719 -230 ct 1693 -206 1678 -166 1678 -120 ct 1678 -42 1718 5 1783 5 ct
+1837 5 1879 -27 1903 -88 ct p
+1719 -174 m 1726 -218 1745 -239 1779 -239 ct 1814 -239 1827 -223 1834 -174 ct
+p ef
+pom
+gr
+gs
+pum
+11298 4569 t
+194 5 m 276 -23 l 276 -32 l 266 -32 265 -32 263 -32 ct 243 -32 239 -38 239 -64 ct
+239 -384 l 236 -385 l 209 -375 189 -369 153 -360 ct 153 -351 l 157 -351 161 -351 165 -351 ct
+186 -351 191 -346 191 -323 ct 191 -235 l 170 -253 155 -259 132 -259 ct 67 -259 15 -195 15 -115 ct
+15 -43 57 5 119 5 ct 151 5 172 -5 191 -32 ct 191 3 l p
+191 -57 m 191 -53 187 -46 182 -40 ct 172 -29 157 -23 141 -23 ct 94 -23 63 -68 63 -138 ct
+63 -201 91 -243 134 -243 ct 164 -243 191 -217 191 -187 ct p ef
+508 -87 m 481 -48 461 -34 428 -34 ct 377 -34 341 -80 341 -144 ct 341 -203 372 -243 418 -243 ct
+438 -243 445 -236 451 -216 ct 454 -203 l 459 -187 469 -177 481 -177 ct 496 -177 508 -188 508 -201 ct
+508 -232 468 -259 421 -259 ct 393 -259 365 -248 342 -227 ct 313 -203 298 -164 298 -120 ct
+298 -46 342 5 405 5 ct 430 5 453 -3 473 -20 ct 488 -34 499 -49 516 -82 ct p ef
+834 -217 m 549 -217 l 549 -180 l 834 -180 l p
+834 -104 m 549 -104 l 549 -67 l 834 -67 l p ef
+1075 -87 m 1048 -48 1028 -34 995 -34 ct 944 -34 908 -80 908 -144 ct 908 -203 939 -243 985 -243 ct
+1005 -243 1012 -236 1018 -216 ct 1021 -203 l 1026 -187 1036 -177 1048 -177 ct
+1063 -177 1075 -188 1075 -201 ct 1075 -232 1035 -259 988 -259 ct 960 -259 932 -248 909 -227 ct
+880 -203 865 -164 865 -120 ct 865 -46 909 5 972 5 ct 997 5 1020 -3 1040 -20 ct
+1055 -34 1066 -49 1083 -82 ct p ef
+1331 -92 m 1304 -49 1279 -33 1243 -33 ct 1211 -33 1187 -49 1170 -81 ct 1160 -103 1156 -121 1155 -156 ct
+1329 -156 l 1324 -192 1319 -209 1305 -227 ct 1288 -247 1262 -259 1232 -259 ct
+1204 -259 1178 -249 1156 -230 ct 1130 -206 1115 -166 1115 -120 ct 1115 -42 1155 5 1220 5 ct
+1274 5 1316 -27 1340 -88 ct p
+1156 -174 m 1163 -218 1182 -239 1216 -239 ct 1251 -239 1264 -223 1271 -174 ct
+p ef
+1353 -219 m 1361 -221 1366 -222 1373 -222 ct 1387 -222 1392 -213 1392 -188 ct
+1392 -47 l 1392 -19 1388 -15 1352 -8 ct 1352 0 l 1488 0 l 1488 -8 l 1449 -10 1440 -18 1440 -50 ct
+1440 -177 l 1440 -195 1464 -223 1479 -223 ct 1483 -223 1488 -221 1494 -215 ct
+1503 -207 1509 -204 1516 -204 ct 1530 -204 1538 -213 1538 -229 ct 1538 -248 1527 -259 1507 -259 ct
+1484 -259 1467 -246 1440 -206 ct 1440 -258 l 1437 -259 l 1407 -247 1387 -239 1353 -228 ct
+p ef
+1546 -224 m 1549 -226 1555 -226 1561 -226 ct 1577 -226 1582 -218 1582 -190 ct
+1582 -50 l 1582 -18 1575 -10 1547 -8 ct 1547 0 l 1666 0 l 1666 -8 l 1637 -10 1629 -17 1629 -37 ct
+1629 -196 l 1656 -221 1668 -228 1687 -228 ct 1715 -228 1728 -210 1728 -173 ct
+1728 -55 l 1728 -20 1721 -10 1693 -8 ct 1693 0 l 1810 0 l 1810 -8 l 1782 -11 1776 -18 1776 -45 ct
+1776 -174 l 1776 -227 1751 -259 1709 -259 ct 1683 -259 1666 -249 1627 -213 ct
+1627 -258 l 1623 -259 l 1596 -249 1577 -243 1546 -234 ct p ef
+1866 79 m 1904 60 1929 26 1929 -7 ct 1929 -35 1910 -57 1884 -57 ct 1865 -57 1851 -44 1851 -25 ct
+1851 -7 1864 3 1884 3 ct 1888 3 1892 2 1895 2 ct 1899 1 1899 1 1900 1 ct 1904 1 1907 4 1907 9 ct
+1907 27 1892 47 1861 68 ct p ef
+2154 5 m 2236 -23 l 2236 -32 l 2226 -32 2225 -32 2223 -32 ct 2203 -32 2199 -38 2199 -64 ct
+2199 -384 l 2196 -385 l 2169 -375 2149 -369 2113 -360 ct 2113 -351 l 2117 -351 2121 -351 2125 -351 ct
+2146 -351 2151 -346 2151 -323 ct 2151 -235 l 2130 -253 2115 -259 2092 -259 ct
+2027 -259 1975 -195 1975 -115 ct 1975 -43 2017 5 2079 5 ct 2111 5 2132 -5 2151 -32 ct
+2151 3 l p
+2151 -57 m 2151 -53 2147 -46 2142 -40 ct 2132 -29 2117 -23 2101 -23 ct 2054 -23 2023 -68 2023 -138 ct
+2023 -201 2051 -243 2094 -243 ct 2124 -243 2151 -217 2151 -187 ct p ef
+2468 -87 m 2441 -48 2421 -34 2388 -34 ct 2337 -34 2301 -80 2301 -144 ct 2301 -203 2332 -243 2378 -243 ct
+2398 -243 2405 -236 2411 -216 ct 2414 -203 l 2419 -187 2429 -177 2441 -177 ct
+2456 -177 2468 -188 2468 -201 ct 2468 -232 2428 -259 2381 -259 ct 2353 -259 2325 -248 2302 -227 ct
+2273 -203 2258 -164 2258 -120 ct 2258 -46 2302 5 2365 5 ct 2390 5 2413 -3 2433 -20 ct
+2448 -34 2459 -49 2476 -82 ct p ef
+2794 -217 m 2509 -217 l 2509 -180 l 2794 -180 l p
+2794 -104 m 2509 -104 l 2509 -67 l 2794 -67 l p ef
+3035 -87 m 3008 -48 2988 -34 2955 -34 ct 2904 -34 2868 -80 2868 -144 ct 2868 -203 2899 -243 2945 -243 ct
+2965 -243 2972 -236 2978 -216 ct 2981 -203 l 2986 -187 2996 -177 3008 -177 ct
+3023 -177 3035 -188 3035 -201 ct 3035 -232 2995 -259 2948 -259 ct 2920 -259 2892 -248 2869 -227 ct
+2840 -203 2825 -164 2825 -120 ct 2825 -46 2869 5 2932 5 ct 2957 5 2980 -3 3000 -20 ct
+3015 -34 3026 -49 3043 -82 ct p ef
+3149 -193 m 3173 -219 3190 -228 3212 -228 ct 3240 -228 3254 -208 3254 -169 ct
+3254 -57 l 3254 -19 3248 -11 3216 -8 ct 3216 0 l 3335 0 l 3335 -8 l 3305 -14 3301 -18 3301 -57 ct
+3301 -169 l 3301 -228 3278 -259 3232 -259 ct 3199 -259 3175 -245 3149 -212 ct
+3149 -383 l 3146 -385 l 3127 -378 3113 -373 3081 -364 ct 3066 -360 l 3066 -351 l
+3068 -351 3070 -351 3073 -351 ct 3097 -351 3102 -347 3102 -323 ct 3102 -57 l
+3102 -18 3098 -12 3066 -8 ct 3066 0 l 3187 0 l 3187 -8 l 3155 -11 3149 -18 3149 -57 ct
+p ef
+pom
+gr
+0.753 0.753 0.753 c 7085 21825 m 3275 21825 l 3275 14840 l 10895 14840 l
+10895 21825 l 7085 21825 l p ef
+51 lw 1.000 0.003 0.003 c 7085 21825 m 3275 21825 l 3275 14840 l 10895 14840 l
+10895 21825 l 7085 21825 l pc
+0.003 0.003 0.003 c 4045 12400 m 4197 12849 l 4436 12668 l 4045 12400 l
+p ef
+1 lw 0 lj 5715 14605 m 4262 12686 l ps
+gs
+pum
+3916 15787 t
+141 -259 m 67 -259 16 -205 16 -127 ct 16 -51 68 5 139 5 ct 210 5 265 -54 265 -131 ct
+265 -205 l 213 -259 l p
+133 -243 m 181 -243 214 -189 214 -112 ct 214 -48 188 -10 146 -10 ct 124 -10 103 -23 91 -46 ct
+76 -75 67 -115 67 -155 ct 67 -208 l 93 -243 l p ef
+370 -384 m 367 -385 l 343 -376 328 -372 302 -364 ct 285 -360 l 285 -351 l
+289 -351 291 -351 295 -351 ct 317 -351 322 -346 322 -323 ct 322 -30 l 322 -12 370 5 415 5 ct
+490 5 547 -56 547 -137 ct 547 -206 505 -259 448 -259 ct 414 -259 381 -239 370 -211 ct
+p
+370 -181 m 370 -203 396 -223 426 -223 ct 470 -223 498 -179 498 -111 ct 498 -48 471 -12 425 -12 ct
+395 -12 370 -25 370 -39 ct p ef
+675 -257 m 673 -259 l 639 -246 618 -239 585 -228 ct 585 -219 l 587 -220 l
+596 -221 604 -222 610 -222 ct 623 -222 628 -212 628 -188 ct 628 25 l 628 68 626 82 620 93 ct
+617 99 609 103 601 103 ct 592 103 587 99 577 87 ct 567 75 560 69 551 69 ct 538 69 528 79 528 91 ct
+528 109 551 122 580 122 ct 642 122 675 80 675 0 ct p
+647 -385 m 631 -385 618 -372 618 -356 ct 618 -340 631 -327 647 -327 ct 663 -327 676 -340 676 -356 ct
+676 -372 l 663 -385 l p ef
+954 -92 m 927 -49 902 -33 866 -33 ct 834 -33 810 -49 793 -81 ct 783 -103 779 -121 778 -156 ct
+952 -156 l 947 -192 942 -209 928 -227 ct 911 -247 885 -259 855 -259 ct 827 -259 801 -249 779 -230 ct
+753 -206 738 -166 738 -120 ct 738 -42 778 5 843 5 ct 897 5 939 -27 963 -88 ct p
+779 -174 m 786 -218 805 -239 839 -239 ct 874 -239 887 -223 894 -174 ct p ef
+1198 -87 m 1171 -48 1151 -34 1118 -34 ct 1067 -34 1031 -80 1031 -144 ct 1031 -203 1062 -243 1108 -243 ct
+1128 -243 1135 -236 1141 -216 ct 1144 -203 l 1149 -187 1159 -177 1171 -177 ct
+1186 -177 1198 -188 1198 -201 ct 1198 -232 1158 -259 1111 -259 ct 1083 -259 1055 -248 1032 -227 ct
+1003 -203 988 -164 988 -120 ct 988 -46 1032 5 1095 5 ct 1120 5 1143 -3 1163 -20 ct
+1178 -34 1189 -49 1206 -82 ct p ef
+1366 -253 m 1309 -253 l 1309 -319 l 1309 -324 1309 -326 1305 -326 ct 1301 -321 1298 -316 1294 -310 ct
+1273 -279 1248 -252 1239 -250 ct 1233 -246 1230 -242 1230 -239 ct 1230 -238 1230 -236 1232 -235 ct
+1262 -235 l 1262 -65 l 1262 -18 1279 5 1312 5 ct 1340 5 1361 -7 1380 -37 ct
+1373 -43 l 1361 -29 1351 -23 1339 -23 ct 1318 -23 1309 -38 1309 -74 ct 1309 -235 l
+1366 -235 l p ef
+1729 -253 m 1724 -381 l 1712 -381 l 1709 -369 1700 -362 1689 -362 ct 1684 -362 1675 -364 1667 -367 ct
+1639 -376 1611 -381 1584 -381 ct 1538 -381 1491 -363 1456 -332 ct 1417 -297 1395 -245 1395 -183 ct
+1395 -130 1412 -82 1441 -50 ct 1475 -13 1527 7 1583 7 ct 1646 7 1702 -18 1737 -63 ct
+1726 -73 l 1685 -33 1647 -16 1601 -16 ct 1565 -16 1533 -28 1509 -49 ct 1478 -77 1461 -128 1461 -190 ct
+1461 -292 1513 -358 1595 -358 ct 1627 -358 1656 -346 1679 -324 ct 1697 -306 1705 -290 1716 -253 ct
+p ef
+1767 -351 m 1771 -351 l 1777 -351 1784 -352 1788 -352 ct 1806 -352 1812 -344 1812 -318 ct
+1812 -49 l 1812 -18 1804 -11 1768 -8 ct 1768 0 l 1901 0 l 1901 -8 l 1866 -10 1859 -16 1859 -47 ct
+1859 -384 l 1857 -385 l 1828 -375 1806 -369 1767 -360 ct p ef
+2162 -37 m 2152 -29 2145 -26 2137 -26 ct 2124 -26 2120 -34 2120 -59 ct 2120 -169 l
+2120 -198 2117 -214 2109 -228 ct 2096 -248 2072 -259 2039 -259 ct 1986 -259 1944 -231 1944 -196 ct
+1944 -183 1955 -172 1968 -172 ct 1982 -172 1994 -183 1994 -195 ct 1994 -197 1993 -200 1993 -204 ct
+1991 -209 1991 -214 1991 -218 ct 1991 -233 2009 -245 2032 -245 ct 2059 -245 2074 -229 2074 -199 ct
+2074 -164 l 1988 -129 1978 -125 1954 -103 ct 1941 -92 1933 -73 1933 -54 ct
+1933 -19 1958 5 1993 5 ct 2017 5 2041 -6 2075 -35 ct 2078 -6 2088 5 2111 5 ct 2130 5 2142 -1 2162 -22 ct
+p
+2074 -69 m 2074 -51 2072 -46 2060 -40 ct 2046 -32 2030 -27 2019 -27 ct 1999 -27 1983 -46 1983 -70 ct
+1983 -72 l 1983 -106 2006 -126 2074 -151 ct p ef
+2340 -177 m 2338 -253 l 2332 -253 l 2331 -252 l 2326 -248 2325 -248 2323 -248 ct
+2319 -248 2314 -249 2307 -252 ct 2295 -256 2283 -258 2268 -258 ct 2223 -258 2191 -230 2191 -189 ct
+2191 -157 2209 -135 2257 -108 ct 2290 -89 l 2310 -78 2319 -64 2319 -47 ct 2319 -22 2301 -6 2272 -6 ct
+2253 -6 2236 -14 2225 -26 ct 2213 -40 2208 -53 2201 -85 ct 2192 -85 l 2192 2 l
+2199 2 l 2203 -3 2205 -4 2212 -4 ct 2217 -4 2225 -3 2238 0 ct 2254 3 2269 5 2279 5 ct
+2323 5 2359 -27 2359 -66 ct 2359 -94 2345 -113 2311 -133 ct 2250 -169 l 2235 -178 2226 -192 2226 -208 ct
+2226 -230 2244 -246 2270 -246 ct 2302 -246 2319 -227 2332 -177 ct p ef
+2560 -177 m 2558 -253 l 2552 -253 l 2551 -252 l 2546 -248 2545 -248 2543 -248 ct
+2539 -248 2534 -249 2527 -252 ct 2515 -256 2503 -258 2488 -258 ct 2443 -258 2411 -230 2411 -189 ct
+2411 -157 2429 -135 2477 -108 ct 2510 -89 l 2530 -78 2539 -64 2539 -47 ct 2539 -22 2521 -6 2492 -6 ct
+2473 -6 2456 -14 2445 -26 ct 2433 -40 2428 -53 2421 -85 ct 2412 -85 l 2412 2 l
+2419 2 l 2423 -3 2425 -4 2432 -4 ct 2437 -4 2445 -3 2458 0 ct 2474 3 2489 5 2499 5 ct
+2543 5 2579 -27 2579 -66 ct 2579 -94 2565 -113 2531 -133 ct 2470 -169 l 2455 -178 2446 -192 2446 -208 ct
+2446 -230 2464 -246 2490 -246 ct 2522 -246 2539 -227 2552 -177 ct p ef
+2680 -258 m 2663 -258 2649 -244 2649 -226 ct 2649 -210 2663 -196 2680 -196 ct
+2697 -196 2712 -210 2712 -226 ct 2712 -244 l 2697 -258 l p
+2680 -56 m 2663 -56 2649 -41 2649 -24 ct 2649 -7 2663 6 2680 6 ct 2697 6 2712 -7 2712 -24 ct
+2712 -41 l 2697 -56 l p ef
+3077 -177 m 3075 -253 l 3069 -253 l 3068 -252 l 3063 -248 3062 -248 3060 -248 ct
+3056 -248 3051 -249 3044 -252 ct 3032 -256 3020 -258 3005 -258 ct 2960 -258 2928 -230 2928 -189 ct
+2928 -157 2946 -135 2994 -108 ct 3027 -89 l 3047 -78 3056 -64 3056 -47 ct 3056 -22 3038 -6 3009 -6 ct
+2990 -6 2973 -14 2962 -26 ct 2950 -40 2945 -53 2938 -85 ct 2929 -85 l 2929 2 l
+2936 2 l 2940 -3 2942 -4 2949 -4 ct 2954 -4 2962 -3 2975 0 ct 2991 3 3006 5 3016 5 ct
+3060 5 3096 -27 3096 -66 ct 3096 -94 3082 -113 3048 -133 ct 2987 -169 l 2972 -178 2963 -192 2963 -208 ct
+2963 -230 2981 -246 3007 -246 ct 3039 -246 3056 -227 3069 -177 ct p ef
+3208 -193 m 3232 -219 3249 -228 3271 -228 ct 3299 -228 3313 -208 3313 -169 ct
+3313 -57 l 3313 -19 3307 -11 3275 -8 ct 3275 0 l 3394 0 l 3394 -8 l 3364 -14 3360 -18 3360 -57 ct
+3360 -169 l 3360 -228 3337 -259 3291 -259 ct 3258 -259 3234 -245 3208 -212 ct
+3208 -383 l 3205 -385 l 3186 -378 3172 -373 3140 -364 ct 3125 -360 l 3125 -351 l
+3127 -351 3129 -351 3132 -351 ct 3156 -351 3161 -347 3161 -323 ct 3161 -57 l
+3161 -18 3157 -12 3125 -8 ct 3125 0 l 3246 0 l 3246 -8 l 3214 -11 3208 -18 3208 -57 ct
+p ef
+3674 -28 m 3671 -28 l 3645 -28 3639 -34 3639 -60 ct 3639 -253 l 3550 -253 l
+3550 -244 l 3585 -242 3591 -236 3591 -208 ct 3591 -76 l 3591 -60 3588 -52 3581 -46 ct
+3565 -33 3548 -27 3531 -27 ct 3509 -27 3491 -46 3491 -69 ct 3491 -253 l 3409 -253 l
+3409 -245 l 3436 -244 3444 -235 3444 -209 ct 3444 -67 l 3444 -23 3471 5 3512 5 ct
+3533 5 3555 -3 3570 -18 ct 3594 -42 l 3594 3 l 3596 5 l 3625 -6 3645 -12 3674 -20 ct
+p ef
+3830 -253 m 3773 -253 l 3773 -319 l 3773 -324 3773 -326 3769 -326 ct 3765 -321 3762 -316 3758 -310 ct
+3737 -279 3712 -252 3703 -250 ct 3697 -246 3694 -242 3694 -239 ct 3694 -238 3694 -236 3696 -235 ct
+3726 -235 l 3726 -65 l 3726 -18 3743 5 3776 5 ct 3804 5 3825 -7 3844 -37 ct
+3837 -43 l 3825 -29 3815 -23 3803 -23 ct 3782 -23 3773 -38 3773 -74 ct 3773 -235 l
+3830 -235 l p ef
+3987 -253 m 3930 -253 l 3930 -319 l 3930 -324 3930 -326 3926 -326 ct 3922 -321 3919 -316 3915 -310 ct
+3894 -279 3869 -252 3860 -250 ct 3854 -246 3851 -242 3851 -239 ct 3851 -238 3851 -236 3853 -235 ct
+3883 -235 l 3883 -65 l 3883 -18 3900 5 3933 5 ct 3961 5 3982 -7 4001 -37 ct
+3994 -43 l 3982 -29 3972 -23 3960 -23 ct 3939 -23 3930 -38 3930 -74 ct 3930 -235 l
+3987 -235 l p ef
+4011 -351 m 4015 -351 l 4021 -351 4028 -352 4032 -352 ct 4050 -352 4056 -344 4056 -318 ct
+4056 -49 l 4056 -18 4048 -11 4012 -8 ct 4012 0 l 4145 0 l 4145 -8 l 4110 -10 4103 -16 4103 -47 ct
+4103 -384 l 4101 -385 l 4072 -375 4050 -369 4011 -360 ct p ef
+4387 -92 m 4360 -49 4335 -33 4299 -33 ct 4267 -33 4243 -49 4226 -81 ct 4216 -103 4212 -121 4211 -156 ct
+4385 -156 l 4380 -192 4375 -209 4361 -227 ct 4344 -247 4318 -259 4288 -259 ct
+4260 -259 4234 -249 4212 -230 ct 4186 -206 4171 -166 4171 -120 ct 4171 -42 4211 5 4276 5 ct
+4330 5 4372 -27 4396 -88 ct p
+4212 -174 m 4219 -218 4238 -239 4272 -239 ct 4307 -239 4320 -223 4327 -174 ct
+p ef
+4756 -253 m 4751 -381 l 4739 -381 l 4736 -369 4727 -362 4716 -362 ct 4711 -362 4702 -364 4694 -367 ct
+4666 -376 4638 -381 4611 -381 ct 4565 -381 4518 -363 4483 -332 ct 4444 -297 4422 -245 4422 -183 ct
+4422 -130 4439 -82 4468 -50 ct 4502 -13 4554 7 4610 7 ct 4673 7 4729 -18 4764 -63 ct
+4753 -73 l 4712 -33 4674 -16 4628 -16 ct 4592 -16 4560 -28 4536 -49 ct 4505 -77 4488 -128 4488 -190 ct
+4488 -292 4540 -358 4622 -358 ct 4654 -358 4683 -346 4706 -324 ct 4724 -306 4732 -290 4743 -253 ct
+p ef
+4925 -259 m 4851 -259 4800 -205 4800 -127 ct 4800 -51 4852 5 4923 5 ct 4994 5 5049 -54 5049 -131 ct
+5049 -205 l 4997 -259 l p
+4917 -243 m 4965 -243 4998 -189 4998 -112 ct 4998 -48 4972 -10 4930 -10 ct
+4908 -10 4887 -23 4875 -46 ct 4860 -75 4851 -115 4851 -155 ct 4851 -208 l 4877 -243 l
+p ef
+5076 -224 m 5079 -226 5085 -226 5091 -226 ct 5107 -226 5112 -218 5112 -190 ct
+5112 -50 l 5112 -18 5105 -10 5077 -8 ct 5077 0 l 5196 0 l 5196 -8 l 5167 -10 5159 -17 5159 -37 ct
+5159 -196 l 5186 -221 5198 -228 5217 -228 ct 5245 -228 5258 -210 5258 -173 ct
+5258 -55 l 5258 -20 5251 -10 5223 -8 ct 5223 0 l 5340 0 l 5340 -8 l 5312 -11 5306 -18 5306 -45 ct
+5306 -174 l 5306 -227 5281 -259 5239 -259 ct 5213 -259 5196 -249 5157 -213 ct
+5157 -258 l 5153 -259 l 5126 -249 5107 -243 5076 -234 ct p ef
+5525 -253 m 5455 -253 l 5455 -319 l 5455 -351 5466 -369 5488 -369 ct 5499 -369 5507 -363 5517 -347 ct
+5526 -332 5533 -327 5543 -327 ct 5556 -327 5567 -337 5567 -350 ct 5567 -370 5542 -385 5508 -385 ct
+5473 -385 5443 -369 5428 -344 ct 5414 -319 5409 -298 5409 -253 ct 5362 -253 l
+5362 -235 l 5409 -235 l 5409 -58 l 5409 -17 5402 -10 5362 -8 ct 5362 0 l
+5508 0 l 5508 -8 l 5462 -10 5456 -16 5456 -58 ct 5456 -235 l 5525 -235 l
+p ef
+5635 -259 m 5548 -228 l 5548 -219 l 5552 -220 l 5559 -221 5566 -222 5571 -222 ct
+5585 -222 5590 -213 5590 -188 ct 5590 -57 l 5590 -16 5584 -10 5546 -8 ct 5546 0 l
+5679 0 l 5679 -8 l 5642 -11 5637 -16 5637 -57 ct 5637 -257 l p
+5609 -385 m 5593 -385 5580 -372 5580 -356 ct 5580 -340 5593 -327 5609 -327 ct
+5625 -327 5638 -340 5638 -356 ct 5638 -372 l 5625 -385 l p ef
+5959 -218 m 5959 -240 l 5915 -240 l 5904 -240 5895 -242 5884 -246 ct 5872 -250 l
+5857 -256 5841 -259 5827 -259 ct 5774 -259 5732 -218 5732 -167 ct 5732 -131 5748 -110 5785 -91 ct
+5774 -81 5764 -72 5761 -69 ct 5742 -53 5735 -41 5735 -30 ct 5735 -18 5741 -11 5765 0 ct
+5725 28 5709 47 5709 68 ct 5709 98 5753 122 5807 122 ct 5849 122 5893 108 5922 84 ct
+5944 67 5954 49 5954 27 ct 5954 -7 5927 -31 5885 -32 ct 5813 -36 l 5783 -37 5769 -42 5769 -51 ct
+5769 -62 5787 -82 5802 -86 ct 5807 -86 5811 -85 5813 -85 ct 5824 -84 5831 -84 5835 -84 ct
+5855 -84 5878 -92 5895 -107 ct 5914 -123 5922 -143 5922 -171 ct 5922 -187 5920 -200 5912 -218 ct
+p
+5776 1 m 5795 5 5840 8 5868 8 ct 5919 8 5938 15 5938 36 ct 5938 68 5895 90 5831 90 ct
+5781 90 5749 74 5749 49 ct 5749 36 l 5753 29 l p
+5779 -190 m 5779 -223 5795 -243 5821 -243 ct 5838 -243 5853 -234 5862 -217 ct
+5872 -197 5879 -171 5879 -149 ct 5879 -117 5863 -98 5837 -98 ct 5803 -98 5779 -134 5779 -188 ct
+p ef
+pom
+pum
+3916 16469 t
+98 -259 m 11 -228 l 11 -219 l 15 -220 l 22 -221 29 -222 34 -222 ct 48 -222 53 -213 53 -188 ct
+53 -57 l 53 -16 47 -10 9 -8 ct 9 0 l 142 0 l 142 -8 l 105 -11 100 -16 100 -57 ct
+100 -257 l p
+72 -385 m 56 -385 43 -372 43 -356 ct 43 -340 56 -327 72 -327 ct 88 -327 101 -340 101 -356 ct
+101 -372 l 88 -385 l p ef
+162 -221 m 167 -222 171 -222 176 -222 ct 195 -222 199 -216 199 -190 ct 199 73 l
+199 103 193 109 159 112 ct 159 122 l 296 122 l 296 112 l 254 111 246 105 246 69 ct
+246 -18 l 266 0 279 5 303 5 ct 370 5 422 -57 422 -139 ct 422 -209 382 -259 327 -259 ct
+296 -259 271 -245 246 -214 ct 246 -258 l 243 -259 l 212 -247 193 -240 162 -230 ct
+p
+246 -188 m 246 -205 278 -225 304 -225 ct 345 -225 373 -182 373 -117 ct 373 -54 345 -12 305 -12 ct
+278 -12 246 -32 246 -49 ct p ef
+557 -202 m 557 -311 l 557 -352 564 -358 607 -362 ct 607 -373 l 450 -373 l
+450 -362 l 494 -358 500 -352 500 -311 ct 500 -67 l 500 -20 494 -13 450 -10 ct
+450 0 l 607 0 l 607 -10 l 565 -14 557 -21 557 -61 ct 557 -177 l 728 -177 l
+728 -67 l 728 -20 723 -13 679 -10 ct 679 0 l 835 0 l 835 -10 l 793 -14 786 -21 786 -61 ct
+786 -311 l 786 -352 792 -358 835 -362 ct 835 -373 l 679 -373 l 679 -362 l
+722 -358 728 -352 728 -311 ct 728 -202 l p ef
+988 -259 m 914 -259 863 -205 863 -127 ct 863 -51 915 5 986 5 ct 1057 5 1112 -54 1112 -131 ct
+1112 -205 l 1060 -259 l p
+980 -243 m 1028 -243 1061 -189 1061 -112 ct 1061 -48 1035 -10 993 -10 ct 971 -10 950 -23 938 -46 ct
+923 -75 914 -115 914 -155 ct 914 -208 l 940 -243 l p ef
+1307 -177 m 1305 -253 l 1299 -253 l 1298 -252 l 1293 -248 1292 -248 1290 -248 ct
+1286 -248 1281 -249 1274 -252 ct 1262 -256 1250 -258 1235 -258 ct 1190 -258 1158 -230 1158 -189 ct
+1158 -157 1176 -135 1224 -108 ct 1257 -89 l 1277 -78 1286 -64 1286 -47 ct 1286 -22 1268 -6 1239 -6 ct
+1220 -6 1203 -14 1192 -26 ct 1180 -40 1175 -53 1168 -85 ct 1159 -85 l 1159 2 l
+1166 2 l 1170 -3 1172 -4 1179 -4 ct 1184 -4 1192 -3 1205 0 ct 1221 3 1236 5 1246 5 ct
+1290 5 1326 -27 1326 -66 ct 1326 -94 1312 -113 1278 -133 ct 1217 -169 l 1202 -178 1193 -192 1193 -208 ct
+1193 -230 1211 -246 1237 -246 ct 1269 -246 1286 -227 1299 -177 ct p ef
+1493 -253 m 1436 -253 l 1436 -319 l 1436 -324 1436 -326 1432 -326 ct 1428 -321 1425 -316 1421 -310 ct
+1400 -279 1375 -252 1366 -250 ct 1360 -246 1357 -242 1357 -239 ct 1357 -238 1357 -236 1359 -235 ct
+1389 -235 l 1389 -65 l 1389 -18 1406 5 1439 5 ct 1467 5 1488 -7 1507 -37 ct
+1500 -43 l 1488 -29 1478 -23 1466 -23 ct 1445 -23 1436 -38 1436 -74 ct 1436 -235 l
+1493 -235 l p ef
+1583 -258 m 1566 -258 1552 -244 1552 -226 ct 1552 -210 1566 -196 1583 -196 ct
+1600 -196 1615 -210 1615 -226 ct 1615 -244 l 1600 -258 l p
+1583 -56 m 1566 -56 1552 -41 1552 -24 ct 1552 -7 1566 6 1583 6 ct 1600 6 1615 -7 1615 -24 ct
+1615 -41 l 1600 -56 l p ef
+1967 -381 m 1865 -329 l 1865 -322 l 1872 -324 1878 -327 1880 -328 ct 1890 -332 1900 -334 1906 -334 ct
+1918 -334 1923 -325 1923 -307 ct 1923 -52 l 1923 -33 1918 -20 1909 -15 ct 1901 -10 1893 -9 1869 -8 ct
+1869 0 l 2025 0 l 2025 -8 l 1980 -9 1971 -14 1971 -41 ct 1971 -380 l p ef
+2120 12 m 2183 5 2214 -5 2252 -33 ct 2311 -76 2345 -146 2345 -222 ct 2345 -315 2293 -381 2221 -381 ct
+2154 -381 2103 -324 2103 -248 ct 2103 -179 2144 -133 2205 -133 ct 2236 -133 2260 -142 2290 -165 ct
+2266 -73 2204 -13 2118 1 ct p
+2291 -200 m 2291 -188 2288 -183 2282 -178 ct 2266 -165 2246 -157 2225 -157 ct
+2182 -157 2155 -200 2155 -267 ct 2155 -299 2164 -333 2176 -347 ct 2186 -359 2200 -365 2216 -365 ct
+2265 -365 2291 -316 2291 -222 ct p ef
+2638 -77 m 2631 -80 l 2610 -47 2603 -42 2577 -42 ct 2443 -42 l 2537 -142 l
+2588 -194 2610 -237 2610 -281 ct 2610 -337 2564 -381 2505 -381 ct 2474 -381 2445 -368 2424 -346 ct
+2406 -327 2398 -309 2388 -269 ct 2400 -266 l 2422 -321 2443 -339 2482 -339 ct
+2529 -339 2561 -307 2561 -260 ct 2561 -216 2535 -163 2488 -113 ct 2387 -6 l
+2387 0 l 2607 0 l p ef
+2724 -56 m 2707 -56 2693 -41 2693 -24 ct 2693 -7 2707 6 2723 6 ct 2741 6 2756 -7 2756 -24 ct
+2756 -41 l 2741 -56 l p ef
+2958 -381 m 2856 -329 l 2856 -322 l 2863 -324 2869 -327 2871 -328 ct 2881 -332 2891 -334 2897 -334 ct
+2909 -334 2914 -325 2914 -307 ct 2914 -52 l 2914 -33 2909 -20 2900 -15 ct 2892 -10 2884 -9 2860 -8 ct
+2860 0 l 3016 0 l 3016 -8 l 2971 -9 2962 -14 2962 -41 ct 2962 -380 l p ef
+3329 -385 m 3265 -380 3232 -369 3191 -340 ct 3130 -297 3097 -232 3097 -157 ct
+3097 -108 3112 -58 3136 -30 ct 3158 -5 3188 7 3223 7 ct 3293 7 3341 -45 3341 -123 ct
+3341 -195 3300 -241 3235 -241 ct 3211 -241 3199 -237 3163 -216 ct 3178 -301 3242 -362 3330 -376 ct
+p
+3214 -215 m 3262 -215 3291 -174 3291 -104 ct 3291 -42 3269 -7 3229 -7 ct 3180 -7 3149 -60 3149 -148 ct
+3149 -177 3154 -192 3165 -201 ct 3177 -210 l 3194 -215 l p ef
+3524 -209 m 3580 -239 3600 -262 3600 -301 ct 3600 -347 3559 -381 3503 -381 ct
+3441 -381 3395 -343 3395 -292 ct 3395 -255 3406 -239 3465 -187 ct 3404 -141 3392 -123 3392 -85 ct
+3392 -30 3437 7 3500 7 ct 3568 7 3611 -29 3611 -87 ct 3611 -130 l 3592 -158 l
+p
+3514 -151 m 3555 -121 3569 -101 3569 -69 ct 3569 -33 3543 -7 3507 -7 ct 3464 -7 3435 -40 3435 -89 ct
+3435 -125 3447 -149 3480 -175 ct p
+3508 -219 m 3458 -252 3437 -278 3437 -309 ct 3437 -342 3463 -365 3498 -365 ct
+3536 -365 3561 -340 3561 -301 ct 3561 -269 3545 -244 3513 -222 ct 3510 -221 l
+3510 -221 l p ef
+3715 -56 m 3698 -56 3684 -41 3684 -24 ct 3684 -7 3698 6 3714 6 ct 3732 6 3747 -7 3747 -24 ct
+3747 -41 l 3732 -56 l p ef
+3871 -186 m 3904 -186 3917 -184 3931 -179 ct 3966 -167 3988 -135 3988 -96 ct
+3988 -49 3955 -12 3914 -12 ct 3898 -12 3887 -16 3866 -29 ct 3849 -40 3840 -43 3830 -43 ct
+3817 -43 3809 -36 3809 -24 ct 3809 -4 3833 7 3872 7 ct 3916 7 3960 -6 3987 -29 ct
+4013 -53 4028 -85 4028 -123 ct 4028 -152 4019 -178 4003 -196 ct 3991 -208 3981 -215 3956 -226 ct
+3995 -252 4009 -273 4009 -304 ct 4009 -349 3973 -381 3921 -381 ct 3893 -381 3868 -371 3848 -353 ct
+3831 -338 3822 -323 3810 -289 ct 3818 -287 l 3841 -328 3867 -347 3902 -347 ct
+3939 -347 3964 -322 3964 -287 ct 3964 -266 3956 -246 3942 -232 ct 3925 -215 3909 -206 3871 -193 ct
+p ef
+4101 12 m 4164 5 4195 -5 4233 -33 ct 4292 -76 4326 -146 4326 -222 ct 4326 -315 4274 -381 4202 -381 ct
+4135 -381 4084 -324 4084 -248 ct 4084 -179 4125 -133 4186 -133 ct 4217 -133 4241 -142 4271 -165 ct
+4247 -73 4185 -13 4099 1 ct p
+4272 -200 m 4272 -188 4269 -183 4263 -178 ct 4247 -165 4227 -157 4206 -157 ct
+4163 -157 4136 -200 4136 -267 ct 4136 -299 4145 -333 4157 -347 ct 4167 -359 4181 -365 4197 -365 ct
+4246 -365 4272 -316 4272 -222 ct p ef
+4422 -56 m 4405 -56 4391 -41 4391 -24 ct 4391 -7 4405 6 4421 6 ct 4439 6 4454 -7 4454 -24 ct
+4454 -41 l 4439 -56 l p ef
+4759 -77 m 4752 -80 l 4731 -47 4724 -42 4698 -42 ct 4564 -42 l 4658 -142 l
+4709 -194 4731 -237 4731 -281 ct 4731 -337 4685 -381 4626 -381 ct 4595 -381 4566 -368 4545 -346 ct
+4527 -327 4519 -309 4509 -269 ct 4521 -266 l 4543 -321 4564 -339 4603 -339 ct
+4650 -339 4682 -307 4682 -260 ct 4682 -216 4656 -163 4609 -113 ct 4508 -6 l
+4508 0 l 4728 0 l p ef
+4939 -381 m 4837 -329 l 4837 -322 l 4844 -324 4850 -327 4852 -328 ct 4862 -332 4872 -334 4878 -334 ct
+4890 -334 4895 -325 4895 -307 ct 4895 -52 l 4895 -33 4890 -20 4881 -15 ct 4873 -10 4865 -9 4841 -8 ct
+4841 0 l 4997 0 l 4997 -8 l 4952 -9 4943 -14 4943 -41 ct 4943 -380 l p ef
+pom
+pum
+3916 17151 t
+98 -259 m 11 -228 l 11 -219 l 15 -220 l 22 -221 29 -222 34 -222 ct 48 -222 53 -213 53 -188 ct
+53 -57 l 53 -16 47 -10 9 -8 ct 9 0 l 142 0 l 142 -8 l 105 -11 100 -16 100 -57 ct
+100 -257 l p
+72 -385 m 56 -385 43 -372 43 -356 ct 43 -340 56 -327 72 -327 ct 88 -327 101 -340 101 -356 ct
+101 -372 l 88 -385 l p ef
+162 -221 m 167 -222 171 -222 176 -222 ct 195 -222 199 -216 199 -190 ct 199 73 l
+199 103 193 109 159 112 ct 159 122 l 296 122 l 296 112 l 254 111 246 105 246 69 ct
+246 -18 l 266 0 279 5 303 5 ct 370 5 422 -57 422 -139 ct 422 -209 382 -259 327 -259 ct
+296 -259 271 -245 246 -214 ct 246 -258 l 243 -259 l 212 -247 193 -240 162 -230 ct
+p
+246 -188 m 246 -205 278 -225 304 -225 ct 345 -225 373 -182 373 -117 ct 373 -54 345 -12 305 -12 ct
+278 -12 246 -32 246 -49 ct p ef
+553 -164 m 568 -163 578 -162 592 -162 ct 636 -162 667 -168 691 -181 ct 725 -199 745 -234 745 -271 ct
+745 -294 737 -316 722 -332 ct 700 -357 650 -373 597 -373 ct 449 -373 l 449 -362 l
+490 -358 496 -352 496 -311 ct 496 -67 l 496 -20 491 -14 449 -10 ct 449 0 l
+606 0 l 606 -10 l 562 -12 553 -20 553 -61 ct p
+553 -333 m 553 -348 557 -352 573 -352 ct 649 -352 684 -325 684 -267 ct 684 -213 650 -184 586 -184 ct
+574 -184 566 -185 553 -186 ct p ef
+895 -259 m 821 -259 770 -205 770 -127 ct 770 -51 822 5 893 5 ct 964 5 1019 -54 1019 -131 ct
+1019 -205 l 967 -259 l p
+887 -243 m 935 -243 968 -189 968 -112 ct 968 -48 942 -10 900 -10 ct 878 -10 857 -23 845 -46 ct
+830 -75 821 -115 821 -155 ct 821 -208 l 847 -243 l p ef
+1040 -219 m 1048 -221 1053 -222 1060 -222 ct 1074 -222 1079 -213 1079 -188 ct
+1079 -47 l 1079 -19 1075 -15 1039 -8 ct 1039 0 l 1175 0 l 1175 -8 l 1136 -10 1127 -18 1127 -50 ct
+1127 -177 l 1127 -195 1151 -223 1166 -223 ct 1170 -223 1175 -221 1181 -215 ct
+1190 -207 1196 -204 1203 -204 ct 1217 -204 1225 -213 1225 -229 ct 1225 -248 1214 -259 1194 -259 ct
+1171 -259 1154 -246 1127 -206 ct 1127 -258 l 1124 -259 l 1094 -247 1074 -239 1040 -228 ct
+p ef
+1366 -253 m 1309 -253 l 1309 -319 l 1309 -324 1309 -326 1305 -326 ct 1301 -321 1298 -316 1294 -310 ct
+1273 -279 1248 -252 1239 -250 ct 1233 -246 1230 -242 1230 -239 ct 1230 -238 1230 -236 1232 -235 ct
+1262 -235 l 1262 -65 l 1262 -18 1279 5 1312 5 ct 1340 5 1361 -7 1380 -37 ct
+1373 -43 l 1361 -29 1351 -23 1339 -23 ct 1318 -23 1309 -38 1309 -74 ct 1309 -235 l
+1366 -235 l p ef
+1456 -258 m 1439 -258 1425 -244 1425 -226 ct 1425 -210 1439 -196 1456 -196 ct
+1473 -196 1488 -210 1488 -226 ct 1488 -244 l 1473 -258 l p
+1456 -56 m 1439 -56 1425 -41 1425 -24 ct 1425 -7 1439 6 1456 6 ct 1473 6 1488 -7 1488 -24 ct
+1488 -41 l 1473 -56 l p ef
+1942 -130 m 1884 -130 l 1884 -381 l 1859 -381 l 1682 -130 l 1682 -94 l
+1841 -94 l 1841 0 l 1884 0 l 1884 -94 l 1942 -94 l p
+1840 -130 m 1705 -130 l 1840 -323 l p ef
+2227 -77 m 2220 -80 l 2199 -47 2192 -42 2166 -42 ct 2032 -42 l 2126 -142 l
+2177 -194 2199 -237 2199 -281 ct 2199 -337 2153 -381 2094 -381 ct 2063 -381 2034 -368 2013 -346 ct
+1995 -327 1987 -309 1977 -269 ct 1989 -266 l 2011 -321 2032 -339 2071 -339 ct
+2118 -339 2150 -307 2150 -260 ct 2150 -216 2124 -163 2077 -113 ct 1976 -6 l
+1976 0 l 2196 0 l p ef
+2510 -130 m 2452 -130 l 2452 -381 l 2427 -381 l 2250 -130 l 2250 -94 l
+2409 -94 l 2409 0 l 2452 0 l 2452 -94 l 2510 -94 l p
+2408 -130 m 2273 -130 l 2408 -323 l p ef
+2794 -77 m 2787 -80 l 2766 -47 2759 -42 2733 -42 ct 2599 -42 l 2693 -142 l
+2744 -194 2766 -237 2766 -281 ct 2766 -337 2720 -381 2661 -381 ct 2630 -381 2601 -368 2580 -346 ct
+2562 -327 2554 -309 2544 -269 ct 2556 -266 l 2578 -321 2599 -339 2638 -339 ct
+2685 -339 2717 -307 2717 -260 ct 2717 -216 2691 -163 2644 -113 ct 2543 -6 l
+2543 0 l 2763 0 l p ef
+pom
+pum
+3916 17833 t
+249 -37 m 239 -29 232 -26 224 -26 ct 211 -26 207 -34 207 -59 ct 207 -169 l
+207 -198 204 -214 196 -228 ct 183 -248 159 -259 126 -259 ct 73 -259 31 -231 31 -196 ct
+31 -183 42 -172 55 -172 ct 69 -172 81 -183 81 -195 ct 81 -197 80 -200 80 -204 ct
+78 -209 78 -214 78 -218 ct 78 -233 96 -245 119 -245 ct 146 -245 161 -229 161 -199 ct
+161 -164 l 75 -129 65 -125 41 -103 ct 28 -92 20 -73 20 -54 ct 20 -19 45 5 80 5 ct
+104 5 128 -6 162 -35 ct 165 -6 175 5 198 5 ct 217 5 229 -1 249 -22 ct p
+161 -69 m 161 -51 159 -46 147 -40 ct 133 -32 117 -27 106 -27 ct 86 -27 70 -46 70 -70 ct
+70 -72 l 70 -106 93 -126 161 -151 ct p ef
+260 -351 m 264 -351 l 270 -351 277 -352 281 -352 ct 299 -352 305 -344 305 -318 ct
+305 -49 l 305 -18 297 -11 261 -8 ct 261 0 l 394 0 l 394 -8 l 359 -10 352 -16 352 -47 ct
+352 -384 l 350 -385 l 321 -375 299 -369 260 -360 ct p ef
+504 -259 m 417 -228 l 417 -219 l 421 -220 l 428 -221 435 -222 440 -222 ct
+454 -222 459 -213 459 -188 ct 459 -57 l 459 -16 453 -10 415 -8 ct 415 0 l 548 0 l
+548 -8 l 511 -11 506 -16 506 -57 ct 506 -257 l p
+478 -385 m 462 -385 449 -372 449 -356 ct 449 -340 462 -327 478 -327 ct 494 -327 507 -340 507 -356 ct
+507 -372 l 494 -385 l p ef
+812 -37 m 802 -29 795 -26 787 -26 ct 774 -26 770 -34 770 -59 ct 770 -169 l
+770 -198 767 -214 759 -228 ct 746 -248 722 -259 689 -259 ct 636 -259 594 -231 594 -196 ct
+594 -183 605 -172 618 -172 ct 632 -172 644 -183 644 -195 ct 644 -197 643 -200 643 -204 ct
+641 -209 641 -214 641 -218 ct 641 -233 659 -245 682 -245 ct 709 -245 724 -229 724 -199 ct
+724 -164 l 638 -129 628 -125 604 -103 ct 591 -92 583 -73 583 -54 ct 583 -19 608 5 643 5 ct
+667 5 691 -6 725 -35 ct 728 -6 738 5 761 5 ct 780 5 792 -1 812 -22 ct p
+724 -69 m 724 -51 722 -46 710 -40 ct 696 -32 680 -27 669 -27 ct 649 -27 633 -46 633 -70 ct
+633 -72 l 633 -106 656 -126 724 -151 ct p ef
+990 -177 m 988 -253 l 982 -253 l 981 -252 l 976 -248 975 -248 973 -248 ct
+969 -248 964 -249 957 -252 ct 945 -256 933 -258 918 -258 ct 873 -258 841 -230 841 -189 ct
+841 -157 859 -135 907 -108 ct 940 -89 l 960 -78 969 -64 969 -47 ct 969 -22 951 -6 922 -6 ct
+903 -6 886 -14 875 -26 ct 863 -40 858 -53 851 -85 ct 842 -85 l 842 2 l 849 2 l
+853 -3 855 -4 862 -4 ct 867 -4 875 -3 888 0 ct 904 3 919 5 929 5 ct 973 5 1009 -27 1009 -66 ct
+1009 -94 995 -113 961 -133 ct 900 -169 l 885 -178 876 -192 876 -208 ct 876 -230 894 -246 920 -246 ct
+952 -246 969 -227 982 -177 ct p ef
+1109 -258 m 1092 -258 1078 -244 1078 -226 ct 1078 -210 1092 -196 1109 -196 ct
+1126 -196 1141 -210 1141 -226 ct 1141 -244 l 1126 -258 l p
+1109 -56 m 1092 -56 1078 -41 1078 -24 ct 1078 -7 1092 6 1109 6 ct 1126 6 1141 -7 1141 -24 ct
+1141 -41 l 1126 -56 l p ef
+1446 -202 m 1446 -311 l 1446 -352 1453 -358 1496 -362 ct 1496 -373 l 1339 -373 l
+1339 -362 l 1383 -358 1389 -352 1389 -311 ct 1389 -67 l 1389 -20 1383 -13 1339 -10 ct
+1339 0 l 1496 0 l 1496 -10 l 1454 -14 1446 -21 1446 -61 ct 1446 -177 l
+1617 -177 l 1617 -67 l 1617 -20 1612 -13 1568 -10 ct 1568 0 l 1724 0 l
+1724 -10 l 1682 -14 1675 -21 1675 -61 ct 1675 -311 l 1675 -352 1681 -358 1724 -362 ct
+1724 -373 l 1568 -373 l 1568 -362 l 1611 -358 1617 -352 1617 -311 ct 1617 -202 l
+p ef
+1834 -259 m 1747 -228 l 1747 -219 l 1751 -220 l 1758 -221 1765 -222 1770 -222 ct
+1784 -222 1789 -213 1789 -188 ct 1789 -57 l 1789 -16 1783 -10 1745 -8 ct 1745 0 l
+1878 0 l 1878 -8 l 1841 -11 1836 -16 1836 -57 ct 1836 -257 l p
+1808 -385 m 1792 -385 1779 -372 1779 -356 ct 1779 -340 1792 -327 1808 -327 ct
+1824 -327 1837 -340 1837 -356 ct 1837 -372 l 1824 -385 l p ef
+2157 -218 m 2157 -240 l 2113 -240 l 2102 -240 2093 -242 2082 -246 ct 2070 -250 l
+2055 -256 2039 -259 2025 -259 ct 1972 -259 1930 -218 1930 -167 ct 1930 -131 1946 -110 1983 -91 ct
+1972 -81 1962 -72 1959 -69 ct 1940 -53 1933 -41 1933 -30 ct 1933 -18 1939 -11 1963 0 ct
+1923 28 1907 47 1907 68 ct 1907 98 1951 122 2005 122 ct 2047 122 2091 108 2120 84 ct
+2142 67 2152 49 2152 27 ct 2152 -7 2125 -31 2083 -32 ct 2011 -36 l 1981 -37 1967 -42 1967 -51 ct
+1967 -62 1985 -82 2000 -86 ct 2005 -86 2009 -85 2011 -85 ct 2022 -84 2029 -84 2033 -84 ct
+2053 -84 2076 -92 2093 -107 ct 2112 -123 2120 -143 2120 -171 ct 2120 -187 2118 -200 2110 -218 ct
+p
+1974 1 m 1993 5 2038 8 2066 8 ct 2117 8 2136 15 2136 36 ct 2136 68 2093 90 2029 90 ct
+1979 90 1947 74 1947 49 ct 1947 36 l 1951 29 l p
+1977 -190 m 1977 -223 1993 -243 2019 -243 ct 2036 -243 2051 -234 2060 -217 ct
+2070 -197 2077 -171 2077 -149 ct 2077 -117 2061 -98 2035 -98 ct 2001 -98 1977 -134 1977 -188 ct
+p ef
+2264 -193 m 2288 -219 2305 -228 2327 -228 ct 2355 -228 2369 -208 2369 -169 ct
+2369 -57 l 2369 -19 2363 -11 2331 -8 ct 2331 0 l 2450 0 l 2450 -8 l 2420 -14 2416 -18 2416 -57 ct
+2416 -169 l 2416 -228 2393 -259 2347 -259 ct 2314 -259 2290 -245 2264 -212 ct
+2264 -383 l 2261 -385 l 2242 -378 2228 -373 2196 -364 ct 2181 -360 l 2181 -351 l
+2183 -351 2185 -351 2188 -351 ct 2212 -351 2217 -347 2217 -323 ct 2217 -57 l
+2217 -18 2213 -12 2181 -8 ct 2181 0 l 2302 0 l 2302 -8 l 2270 -11 2264 -18 2264 -57 ct
+p ef
+2853 -373 m 2737 -373 l 2737 -362 l 2768 -360 2778 -354 2778 -338 ct 2778 -329 2774 -314 2767 -297 ct
+2685 -90 l 2599 -281 l 2581 -322 2576 -335 2576 -344 ct 2576 -354 2584 -360 2602 -361 ct
+2604 -361 2611 -362 2619 -362 ct 2619 -373 l 2469 -373 l 2469 -362 l 2496 -361 2504 -353 2528 -303 ct
+2667 6 l 2676 6 l 2801 -310 l 2819 -354 2826 -360 2853 -362 ct p ef
+3007 -259 m 2933 -259 2882 -205 2882 -127 ct 2882 -51 2934 5 3005 5 ct 3076 5 3131 -54 3131 -131 ct
+3131 -205 l 3079 -259 l p
+2999 -243 m 3047 -243 3080 -189 3080 -112 ct 3080 -48 3054 -10 3012 -10 ct
+2990 -10 2969 -23 2957 -46 ct 2942 -75 2933 -115 2933 -155 ct 2933 -208 l 2959 -243 l
+p ef
+3160 -351 m 3164 -351 l 3170 -351 3177 -352 3181 -352 ct 3199 -352 3205 -344 3205 -318 ct
+3205 -49 l 3205 -18 3197 -11 3161 -8 ct 3161 0 l 3294 0 l 3294 -8 l 3259 -10 3252 -16 3252 -47 ct
+3252 -384 l 3250 -385 l 3221 -375 3199 -369 3160 -360 ct p ef
+3449 -381 m 3418 -381 3394 -371 3373 -351 ct 3340 -320 3319 -255 3319 -189 ct
+3319 -128 3338 -62 3364 -30 ct 3385 -5 3414 7 3447 7 ct 3475 7 3500 -1 3520 -21 ct
+3553 -52 3574 -117 3574 -186 ct 3574 -301 l 3523 -381 l p
+3447 -366 m 3494 -366 3520 -302 3520 -184 ct 3520 -67 3495 -6 3447 -6 ct 3398 -6 3373 -67 3373 -184 ct
+3373 -304 l 3399 -366 l p ef
+3754 -381 m 3652 -329 l 3652 -322 l 3659 -324 3665 -327 3667 -328 ct 3677 -332 3687 -334 3693 -334 ct
+3705 -334 3710 -325 3710 -307 ct 3710 -52 l 3710 -33 3705 -20 3696 -15 ct 3688 -10 3680 -9 3656 -8 ct
+3656 0 l 3812 0 l 3812 -8 l 3767 -9 3758 -14 3758 -41 ct 3758 -380 l p ef
+pom
+pum
+3916 18515 t
+70 -56 m 53 -56 39 -41 39 -24 ct 39 -7 53 6 69 6 ct 87 6 102 -7 102 -24 ct 102 -41 l
+87 -56 l p ef
+210 -56 m 193 -56 179 -41 179 -24 ct 179 -7 193 6 209 6 ct 227 6 242 -7 242 -24 ct
+242 -41 l 227 -56 l p ef
+349 -56 m 332 -56 318 -41 318 -24 ct 318 -7 332 6 348 6 ct 366 6 381 -7 381 -24 ct
+381 -41 l 366 -56 l p ef
+489 -56 m 472 -56 458 -41 458 -24 ct 458 -7 472 6 488 6 ct 506 6 521 -7 521 -24 ct
+521 -41 l 506 -56 l p ef
+629 -56 m 612 -56 598 -41 598 -24 ct 598 -7 612 6 628 6 ct 646 6 661 -7 661 -24 ct
+661 -41 l 646 -56 l p ef
+769 -56 m 752 -56 738 -41 738 -24 ct 738 -7 752 6 768 6 ct 786 6 801 -7 801 -24 ct
+801 -41 l 786 -56 l p ef
+908 -56 m 891 -56 877 -41 877 -24 ct 877 -7 891 6 907 6 ct 925 6 940 -7 940 -24 ct
+940 -41 l 925 -56 l p ef
+1048 -56 m 1031 -56 1017 -41 1017 -24 ct 1017 -7 1031 6 1047 6 ct 1065 6 1080 -7 1080 -24 ct
+1080 -41 l 1065 -56 l p ef
+1188 -56 m 1171 -56 1157 -41 1157 -24 ct 1157 -7 1171 6 1187 6 ct 1205 6 1220 -7 1220 -24 ct
+1220 -41 l 1205 -56 l p ef
+1327 -56 m 1310 -56 1296 -41 1296 -24 ct 1296 -7 1310 6 1326 6 ct 1344 6 1359 -7 1359 -24 ct
+1359 -41 l 1344 -56 l p ef
+1467 -56 m 1450 -56 1436 -41 1436 -24 ct 1436 -7 1450 6 1466 6 ct 1484 6 1499 -7 1499 -24 ct
+1499 -41 l 1484 -56 l p ef
+1607 -56 m 1590 -56 1576 -41 1576 -24 ct 1576 -7 1590 6 1606 6 ct 1624 6 1639 -7 1639 -24 ct
+1639 -41 l 1624 -56 l p ef
+1746 -56 m 1729 -56 1715 -41 1715 -24 ct 1715 -7 1729 6 1745 6 ct 1763 6 1778 -7 1778 -24 ct
+1778 -41 l 1763 -56 l p ef
+1886 -56 m 1869 -56 1855 -41 1855 -24 ct 1855 -7 1869 6 1885 6 ct 1903 6 1918 -7 1918 -24 ct
+1918 -41 l 1903 -56 l p ef
+2026 -56 m 2009 -56 1995 -41 1995 -24 ct 1995 -7 2009 6 2025 6 ct 2043 6 2058 -7 2058 -24 ct
+2058 -41 l 2043 -56 l p ef
+2166 -56 m 2149 -56 2135 -41 2135 -24 ct 2135 -7 2149 6 2165 6 ct 2183 6 2198 -7 2198 -24 ct
+2198 -41 l 2183 -56 l p ef
+2305 -56 m 2288 -56 2274 -41 2274 -24 ct 2274 -7 2288 6 2304 6 ct 2322 6 2337 -7 2337 -24 ct
+2337 -41 l 2322 -56 l p ef
+2445 -56 m 2428 -56 2414 -41 2414 -24 ct 2414 -7 2428 6 2444 6 ct 2462 6 2477 -7 2477 -24 ct
+2477 -41 l 2462 -56 l p ef
+2585 -56 m 2568 -56 2554 -41 2554 -24 ct 2554 -7 2568 6 2584 6 ct 2602 6 2617 -7 2617 -24 ct
+2617 -41 l 2602 -56 l p ef
+2724 -56 m 2707 -56 2693 -41 2693 -24 ct 2693 -7 2707 6 2723 6 ct 2741 6 2756 -7 2756 -24 ct
+2756 -41 l 2741 -56 l p ef
+2864 -56 m 2847 -56 2833 -41 2833 -24 ct 2833 -7 2847 6 2863 6 ct 2881 6 2896 -7 2896 -24 ct
+2896 -41 l 2881 -56 l p ef
+3004 -56 m 2987 -56 2973 -41 2973 -24 ct 2973 -7 2987 6 3003 6 ct 3021 6 3036 -7 3036 -24 ct
+3036 -41 l 3021 -56 l p ef
+3143 -56 m 3126 -56 3112 -41 3112 -24 ct 3112 -7 3126 6 3142 6 ct 3160 6 3175 -7 3175 -24 ct
+3175 -41 l 3160 -56 l p ef
+3283 -56 m 3266 -56 3252 -41 3252 -24 ct 3252 -7 3266 6 3282 6 ct 3300 6 3315 -7 3315 -24 ct
+3315 -41 l 3300 -56 l p ef
+3423 -56 m 3406 -56 3392 -41 3392 -24 ct 3392 -7 3406 6 3422 6 ct 3440 6 3455 -7 3455 -24 ct
+3455 -41 l 3440 -56 l p ef
+3563 -56 m 3546 -56 3532 -41 3532 -24 ct 3532 -7 3546 6 3562 6 ct 3580 6 3595 -7 3595 -24 ct
+3595 -41 l 3580 -56 l p ef
+3702 -56 m 3685 -56 3671 -41 3671 -24 ct 3671 -7 3685 6 3701 6 ct 3719 6 3734 -7 3734 -24 ct
+3734 -41 l 3719 -56 l p ef
+pom
+pum
+3916 19197 t
+249 -37 m 239 -29 232 -26 224 -26 ct 211 -26 207 -34 207 -59 ct 207 -169 l
+207 -198 204 -214 196 -228 ct 183 -248 159 -259 126 -259 ct 73 -259 31 -231 31 -196 ct
+31 -183 42 -172 55 -172 ct 69 -172 81 -183 81 -195 ct 81 -197 80 -200 80 -204 ct
+78 -209 78 -214 78 -218 ct 78 -233 96 -245 119 -245 ct 146 -245 161 -229 161 -199 ct
+161 -164 l 75 -129 65 -125 41 -103 ct 28 -92 20 -73 20 -54 ct 20 -19 45 5 80 5 ct
+104 5 128 -6 162 -35 ct 165 -6 175 5 198 5 ct 217 5 229 -1 249 -22 ct p
+161 -69 m 161 -51 159 -46 147 -40 ct 133 -32 117 -27 106 -27 ct 86 -27 70 -46 70 -70 ct
+70 -72 l 70 -106 93 -126 161 -151 ct p ef
+260 -351 m 264 -351 l 270 -351 277 -352 281 -352 ct 299 -352 305 -344 305 -318 ct
+305 -49 l 305 -18 297 -11 261 -8 ct 261 0 l 394 0 l 394 -8 l 359 -10 352 -16 352 -47 ct
+352 -384 l 350 -385 l 321 -375 299 -369 260 -360 ct p ef
+504 -259 m 417 -228 l 417 -219 l 421 -220 l 428 -221 435 -222 440 -222 ct
+454 -222 459 -213 459 -188 ct 459 -57 l 459 -16 453 -10 415 -8 ct 415 0 l 548 0 l
+548 -8 l 511 -11 506 -16 506 -57 ct 506 -257 l p
+478 -385 m 462 -385 449 -372 449 -356 ct 449 -340 462 -327 478 -327 ct 494 -327 507 -340 507 -356 ct
+507 -372 l 494 -385 l p ef
+812 -37 m 802 -29 795 -26 787 -26 ct 774 -26 770 -34 770 -59 ct 770 -169 l
+770 -198 767 -214 759 -228 ct 746 -248 722 -259 689 -259 ct 636 -259 594 -231 594 -196 ct
+594 -183 605 -172 618 -172 ct 632 -172 644 -183 644 -195 ct 644 -197 643 -200 643 -204 ct
+641 -209 641 -214 641 -218 ct 641 -233 659 -245 682 -245 ct 709 -245 724 -229 724 -199 ct
+724 -164 l 638 -129 628 -125 604 -103 ct 591 -92 583 -73 583 -54 ct 583 -19 608 5 643 5 ct
+667 5 691 -6 725 -35 ct 728 -6 738 5 761 5 ct 780 5 792 -1 812 -22 ct p
+724 -69 m 724 -51 722 -46 710 -40 ct 696 -32 680 -27 669 -27 ct 649 -27 633 -46 633 -70 ct
+633 -72 l 633 -106 656 -126 724 -151 ct p ef
+990 -177 m 988 -253 l 982 -253 l 981 -252 l 976 -248 975 -248 973 -248 ct
+969 -248 964 -249 957 -252 ct 945 -256 933 -258 918 -258 ct 873 -258 841 -230 841 -189 ct
+841 -157 859 -135 907 -108 ct 940 -89 l 960 -78 969 -64 969 -47 ct 969 -22 951 -6 922 -6 ct
+903 -6 886 -14 875 -26 ct 863 -40 858 -53 851 -85 ct 842 -85 l 842 2 l 849 2 l
+853 -3 855 -4 862 -4 ct 867 -4 875 -3 888 0 ct 904 3 919 5 929 5 ct 973 5 1009 -27 1009 -66 ct
+1009 -94 995 -113 961 -133 ct 900 -169 l 885 -178 876 -192 876 -208 ct 876 -230 894 -246 920 -246 ct
+952 -246 969 -227 982 -177 ct p ef
+1109 -258 m 1092 -258 1078 -244 1078 -226 ct 1078 -210 1092 -196 1109 -196 ct
+1126 -196 1141 -210 1141 -226 ct 1141 -244 l 1126 -258 l p
+1109 -56 m 1092 -56 1078 -41 1078 -24 ct 1078 -7 1092 6 1109 6 ct 1126 6 1141 -7 1141 -24 ct
+1141 -41 l 1126 -56 l p ef
+1446 -202 m 1446 -311 l 1446 -352 1453 -358 1496 -362 ct 1496 -373 l 1339 -373 l
+1339 -362 l 1383 -358 1389 -352 1389 -311 ct 1389 -67 l 1389 -20 1383 -13 1339 -10 ct
+1339 0 l 1496 0 l 1496 -10 l 1454 -14 1446 -21 1446 -61 ct 1446 -177 l
+1617 -177 l 1617 -67 l 1617 -20 1612 -13 1568 -10 ct 1568 0 l 1724 0 l
+1724 -10 l 1682 -14 1675 -21 1675 -61 ct 1675 -311 l 1675 -352 1681 -358 1724 -362 ct
+1724 -373 l 1568 -373 l 1568 -362 l 1611 -358 1617 -352 1617 -311 ct 1617 -202 l
+p ef
+1834 -259 m 1747 -228 l 1747 -219 l 1751 -220 l 1758 -221 1765 -222 1770 -222 ct
+1784 -222 1789 -213 1789 -188 ct 1789 -57 l 1789 -16 1783 -10 1745 -8 ct 1745 0 l
+1878 0 l 1878 -8 l 1841 -11 1836 -16 1836 -57 ct 1836 -257 l p
+1808 -385 m 1792 -385 1779 -372 1779 -356 ct 1779 -340 1792 -327 1808 -327 ct
+1824 -327 1837 -340 1837 -356 ct 1837 -372 l 1824 -385 l p ef
+2157 -218 m 2157 -240 l 2113 -240 l 2102 -240 2093 -242 2082 -246 ct 2070 -250 l
+2055 -256 2039 -259 2025 -259 ct 1972 -259 1930 -218 1930 -167 ct 1930 -131 1946 -110 1983 -91 ct
+1972 -81 1962 -72 1959 -69 ct 1940 -53 1933 -41 1933 -30 ct 1933 -18 1939 -11 1963 0 ct
+1923 28 1907 47 1907 68 ct 1907 98 1951 122 2005 122 ct 2047 122 2091 108 2120 84 ct
+2142 67 2152 49 2152 27 ct 2152 -7 2125 -31 2083 -32 ct 2011 -36 l 1981 -37 1967 -42 1967 -51 ct
+1967 -62 1985 -82 2000 -86 ct 2005 -86 2009 -85 2011 -85 ct 2022 -84 2029 -84 2033 -84 ct
+2053 -84 2076 -92 2093 -107 ct 2112 -123 2120 -143 2120 -171 ct 2120 -187 2118 -200 2110 -218 ct
+p
+1974 1 m 1993 5 2038 8 2066 8 ct 2117 8 2136 15 2136 36 ct 2136 68 2093 90 2029 90 ct
+1979 90 1947 74 1947 49 ct 1947 36 l 1951 29 l p
+1977 -190 m 1977 -223 1993 -243 2019 -243 ct 2036 -243 2051 -234 2060 -217 ct
+2070 -197 2077 -171 2077 -149 ct 2077 -117 2061 -98 2035 -98 ct 2001 -98 1977 -134 1977 -188 ct
+p ef
+2264 -193 m 2288 -219 2305 -228 2327 -228 ct 2355 -228 2369 -208 2369 -169 ct
+2369 -57 l 2369 -19 2363 -11 2331 -8 ct 2331 0 l 2450 0 l 2450 -8 l 2420 -14 2416 -18 2416 -57 ct
+2416 -169 l 2416 -228 2393 -259 2347 -259 ct 2314 -259 2290 -245 2264 -212 ct
+2264 -383 l 2261 -385 l 2242 -378 2228 -373 2196 -364 ct 2181 -360 l 2181 -351 l
+2183 -351 2185 -351 2188 -351 ct 2212 -351 2217 -347 2217 -323 ct 2217 -57 l
+2217 -18 2213 -12 2181 -8 ct 2181 0 l 2302 0 l 2302 -8 l 2270 -11 2264 -18 2264 -57 ct
+p ef
+2853 -373 m 2737 -373 l 2737 -362 l 2768 -360 2778 -354 2778 -338 ct 2778 -329 2774 -314 2767 -297 ct
+2685 -90 l 2599 -281 l 2581 -322 2576 -335 2576 -344 ct 2576 -354 2584 -360 2602 -361 ct
+2604 -361 2611 -362 2619 -362 ct 2619 -373 l 2469 -373 l 2469 -362 l 2496 -361 2504 -353 2528 -303 ct
+2667 6 l 2676 6 l 2801 -310 l 2819 -354 2826 -360 2853 -362 ct p ef
+3007 -259 m 2933 -259 2882 -205 2882 -127 ct 2882 -51 2934 5 3005 5 ct 3076 5 3131 -54 3131 -131 ct
+3131 -205 l 3079 -259 l p
+2999 -243 m 3047 -243 3080 -189 3080 -112 ct 3080 -48 3054 -10 3012 -10 ct
+2990 -10 2969 -23 2957 -46 ct 2942 -75 2933 -115 2933 -155 ct 2933 -208 l 2959 -243 l
+p ef
+3160 -351 m 3164 -351 l 3170 -351 3177 -352 3181 -352 ct 3199 -352 3205 -344 3205 -318 ct
+3205 -49 l 3205 -18 3197 -11 3161 -8 ct 3161 0 l 3294 0 l 3294 -8 l 3259 -10 3252 -16 3252 -47 ct
+3252 -384 l 3250 -385 l 3221 -375 3199 -369 3160 -360 ct p ef
+3449 -381 m 3418 -381 3394 -371 3373 -351 ct 3340 -320 3319 -255 3319 -189 ct
+3319 -128 3338 -62 3364 -30 ct 3385 -5 3414 7 3447 7 ct 3475 7 3500 -1 3520 -21 ct
+3553 -52 3574 -117 3574 -186 ct 3574 -301 l 3523 -381 l p
+3447 -366 m 3494 -366 3520 -302 3520 -184 ct 3520 -67 3495 -6 3447 -6 ct 3398 -6 3373 -67 3373 -184 ct
+3373 -304 l 3399 -366 l p ef
+3843 -373 m 3634 -373 l 3601 -290 l 3610 -285 l 3635 -324 3645 -331 3676 -331 ct
+3798 -331 l 3687 4 l 3723 4 l 3843 -364 l p ef
+pom
+pum
+3916 19879 t
+249 -37 m 239 -29 232 -26 224 -26 ct 211 -26 207 -34 207 -59 ct 207 -169 l
+207 -198 204 -214 196 -228 ct 183 -248 159 -259 126 -259 ct 73 -259 31 -231 31 -196 ct
+31 -183 42 -172 55 -172 ct 69 -172 81 -183 81 -195 ct 81 -197 80 -200 80 -204 ct
+78 -209 78 -214 78 -218 ct 78 -233 96 -245 119 -245 ct 146 -245 161 -229 161 -199 ct
+161 -164 l 75 -129 65 -125 41 -103 ct 28 -92 20 -73 20 -54 ct 20 -19 45 5 80 5 ct
+104 5 128 -6 162 -35 ct 165 -6 175 5 198 5 ct 217 5 229 -1 249 -22 ct p
+161 -69 m 161 -51 159 -46 147 -40 ct 133 -32 117 -27 106 -27 ct 86 -27 70 -46 70 -70 ct
+70 -72 l 70 -106 93 -126 161 -151 ct p ef
+260 -351 m 264 -351 l 270 -351 277 -352 281 -352 ct 299 -352 305 -344 305 -318 ct
+305 -49 l 305 -18 297 -11 261 -8 ct 261 0 l 394 0 l 394 -8 l 359 -10 352 -16 352 -47 ct
+352 -384 l 350 -385 l 321 -375 299 -369 260 -360 ct p ef
+504 -259 m 417 -228 l 417 -219 l 421 -220 l 428 -221 435 -222 440 -222 ct
+454 -222 459 -213 459 -188 ct 459 -57 l 459 -16 453 -10 415 -8 ct 415 0 l 548 0 l
+548 -8 l 511 -11 506 -16 506 -57 ct 506 -257 l p
+478 -385 m 462 -385 449 -372 449 -356 ct 449 -340 462 -327 478 -327 ct 494 -327 507 -340 507 -356 ct
+507 -372 l 494 -385 l p ef
+812 -37 m 802 -29 795 -26 787 -26 ct 774 -26 770 -34 770 -59 ct 770 -169 l
+770 -198 767 -214 759 -228 ct 746 -248 722 -259 689 -259 ct 636 -259 594 -231 594 -196 ct
+594 -183 605 -172 618 -172 ct 632 -172 644 -183 644 -195 ct 644 -197 643 -200 643 -204 ct
+641 -209 641 -214 641 -218 ct 641 -233 659 -245 682 -245 ct 709 -245 724 -229 724 -199 ct
+724 -164 l 638 -129 628 -125 604 -103 ct 591 -92 583 -73 583 -54 ct 583 -19 608 5 643 5 ct
+667 5 691 -6 725 -35 ct 728 -6 738 5 761 5 ct 780 5 792 -1 812 -22 ct p
+724 -69 m 724 -51 722 -46 710 -40 ct 696 -32 680 -27 669 -27 ct 649 -27 633 -46 633 -70 ct
+633 -72 l 633 -106 656 -126 724 -151 ct p ef
+990 -177 m 988 -253 l 982 -253 l 981 -252 l 976 -248 975 -248 973 -248 ct
+969 -248 964 -249 957 -252 ct 945 -256 933 -258 918 -258 ct 873 -258 841 -230 841 -189 ct
+841 -157 859 -135 907 -108 ct 940 -89 l 960 -78 969 -64 969 -47 ct 969 -22 951 -6 922 -6 ct
+903 -6 886 -14 875 -26 ct 863 -40 858 -53 851 -85 ct 842 -85 l 842 2 l 849 2 l
+853 -3 855 -4 862 -4 ct 867 -4 875 -3 888 0 ct 904 3 919 5 929 5 ct 973 5 1009 -27 1009 -66 ct
+1009 -94 995 -113 961 -133 ct 900 -169 l 885 -178 876 -192 876 -208 ct 876 -230 894 -246 920 -246 ct
+952 -246 969 -227 982 -177 ct p ef
+1109 -258 m 1092 -258 1078 -244 1078 -226 ct 1078 -210 1092 -196 1109 -196 ct
+1126 -196 1141 -210 1141 -226 ct 1141 -244 l 1126 -258 l p
+1109 -56 m 1092 -56 1078 -41 1078 -24 ct 1078 -7 1092 6 1109 6 ct 1126 6 1141 -7 1141 -24 ct
+1141 -41 l 1126 -56 l p ef
+1472 -349 m 1472 -67 l 1472 -19 1466 -13 1419 -10 ct 1419 0 l 1583 0 l
+1583 -10 l 1537 -12 1529 -20 1529 -61 ct 1529 -349 l 1560 -349 l 1624 -349 1636 -339 1649 -277 ct
+1663 -277 l 1660 -373 l 1341 -373 l 1338 -277 l 1352 -277 l 1365 -338 1378 -349 1441 -349 ct
+p ef
+1677 -221 m 1682 -222 1686 -222 1691 -222 ct 1710 -222 1714 -216 1714 -190 ct
+1714 73 l 1714 103 1708 109 1674 112 ct 1674 122 l 1811 122 l 1811 112 l
+1769 111 1761 105 1761 69 ct 1761 -18 l 1781 0 1794 5 1818 5 ct 1885 5 1937 -57 1937 -139 ct
+1937 -209 1897 -259 1842 -259 ct 1811 -259 1786 -245 1761 -214 ct 1761 -258 l
+1758 -259 l 1727 -247 1708 -240 1677 -230 ct p
+1761 -188 m 1761 -205 1793 -225 1819 -225 ct 1860 -225 1888 -182 1888 -117 ct
+1888 -54 1860 -12 1820 -12 ct 1793 -12 1761 -32 1761 -49 ct p ef
+2180 -87 m 2153 -48 2133 -34 2100 -34 ct 2049 -34 2013 -80 2013 -144 ct 2013 -203 2044 -243 2090 -243 ct
+2110 -243 2117 -236 2123 -216 ct 2126 -203 l 2131 -187 2141 -177 2153 -177 ct
+2168 -177 2180 -188 2180 -201 ct 2180 -232 2140 -259 2093 -259 ct 2065 -259 2037 -248 2014 -227 ct
+1985 -203 1970 -164 1970 -120 ct 1970 -46 2014 5 2077 5 ct 2102 5 2125 -3 2145 -20 ct
+2160 -34 2171 -49 2188 -82 ct p ef
+2349 -349 m 2349 -67 l 2349 -19 2343 -13 2296 -10 ct 2296 0 l 2460 0 l
+2460 -10 l 2414 -12 2406 -20 2406 -61 ct 2406 -349 l 2437 -349 l 2501 -349 2513 -339 2526 -277 ct
+2540 -277 l 2537 -373 l 2218 -373 l 2215 -277 l 2229 -277 l 2242 -338 2255 -349 2318 -349 ct
+p ef
+2778 -92 m 2751 -49 2726 -33 2690 -33 ct 2658 -33 2634 -49 2617 -81 ct 2607 -103 2603 -121 2602 -156 ct
+2776 -156 l 2771 -192 2766 -209 2752 -227 ct 2735 -247 2709 -259 2679 -259 ct
+2651 -259 2625 -249 2603 -230 ct 2577 -206 2562 -166 2562 -120 ct 2562 -42 2602 5 2667 5 ct
+2721 5 2763 -27 2787 -88 ct p
+2603 -174 m 2610 -218 2629 -239 2663 -239 ct 2698 -239 2711 -223 2718 -174 ct
+p ef
+2808 -224 m 2816 -226 2820 -226 2826 -226 ct 2841 -226 2846 -217 2846 -190 ct
+2846 -47 l 2846 -17 2838 -9 2807 -8 ct 2807 0 l 2932 0 l 2932 -8 l 2902 -9 2893 -15 2893 -37 ct
+2893 -196 l 2893 -197 2898 -203 2902 -207 ct 2916 -220 2940 -230 2960 -230 ct
+2985 -230 2997 -210 2997 -170 ct 2997 -48 l 2997 -16 2991 -10 2959 -8 ct 2959 0 l
+3085 0 l 3085 -8 l 3053 -9 3045 -18 3045 -53 ct 3045 -195 l 3061 -219 3080 -230 3106 -230 ct
+3138 -230 3148 -214 3148 -168 ct 3148 -49 l 3148 -16 3144 -12 3111 -8 ct 3111 0 l
+3235 0 l 3235 -8 l 3220 -9 l 3203 -10 3196 -20 3196 -42 ct 3196 -159 l
+3196 -225 3174 -259 3130 -259 ct 3098 -259 3069 -244 3038 -212 ct 3028 -244 3009 -259 2979 -259 ct
+2954 -259 2938 -251 2891 -216 ct 2891 -258 l 2887 -259 l 2858 -248 2839 -242 2808 -234 ct
+p ef
+3239 -221 m 3244 -222 3248 -222 3253 -222 ct 3272 -222 3276 -216 3276 -190 ct
+3276 73 l 3276 103 3270 109 3236 112 ct 3236 122 l 3373 122 l 3373 112 l
+3331 111 3323 105 3323 69 ct 3323 -18 l 3343 0 3356 5 3380 5 ct 3447 5 3499 -57 3499 -139 ct
+3499 -209 3459 -259 3404 -259 ct 3373 -259 3348 -245 3323 -214 ct 3323 -258 l
+3320 -259 l 3289 -247 3270 -240 3239 -230 ct p
+3323 -188 m 3323 -205 3355 -225 3381 -225 ct 3422 -225 3450 -182 3450 -117 ct
+3450 -54 3422 -12 3382 -12 ct 3355 -12 3323 -32 3323 -49 ct p ef
+3770 -381 m 3758 -381 l 3756 -368 3749 -362 3740 -362 ct 3734 -362 3724 -364 3715 -368 ct
+3694 -376 3673 -381 3655 -381 ct 3631 -381 3606 -371 3587 -355 ct 3568 -337 3558 -314 3558 -284 ct
+3558 -239 3582 -208 3646 -174 ct 3686 -153 3715 -130 3730 -108 ct 3735 -101 3737 -89 3737 -76 ct
+3737 -38 3709 -12 3668 -12 ct 3618 -12 3582 -43 3554 -112 ct 3541 -112 l 3558 7 l
+3571 7 l 3571 -3 3578 -11 3586 -11 ct 3593 -11 3602 -9 3613 -5 ct 3634 3 3657 7 3679 7 ct
+3744 7 3794 -36 3794 -94 ct 3794 -141 3763 -177 3689 -217 ct 3630 -250 3606 -275 3606 -305 ct
+3606 -336 3630 -358 3665 -358 ct 3690 -358 3714 -347 3734 -327 ct 3751 -309 3759 -294 3768 -261 ct
+3782 -261 l p ef
+4061 -92 m 4034 -49 4009 -33 3973 -33 ct 3941 -33 3917 -49 3900 -81 ct 3890 -103 3886 -121 3885 -156 ct
+4059 -156 l 4054 -192 4049 -209 4035 -227 ct 4018 -247 3992 -259 3962 -259 ct
+3934 -259 3908 -249 3886 -230 ct 3860 -206 3845 -166 3845 -120 ct 3845 -42 3885 5 3950 5 ct
+4004 5 4046 -27 4070 -88 ct p
+3886 -174 m 3893 -218 3912 -239 3946 -239 ct 3981 -239 3994 -223 4001 -174 ct
+p ef
+4305 -87 m 4278 -48 4258 -34 4225 -34 ct 4174 -34 4138 -80 4138 -144 ct 4138 -203 4169 -243 4215 -243 ct
+4235 -243 4242 -236 4248 -216 ct 4251 -203 l 4256 -187 4266 -177 4278 -177 ct
+4293 -177 4305 -188 4305 -201 ct 4305 -232 4265 -259 4218 -259 ct 4190 -259 4162 -248 4139 -227 ct
+4110 -203 4095 -164 4095 -120 ct 4095 -46 4139 5 4202 5 ct 4227 5 4250 -3 4270 -20 ct
+4285 -34 4296 -49 4313 -82 ct p ef
+4474 -253 m 4417 -253 l 4417 -319 l 4417 -324 4417 -326 4413 -326 ct 4409 -321 4406 -316 4402 -310 ct
+4381 -279 4356 -252 4347 -250 ct 4341 -246 4338 -242 4338 -239 ct 4338 -238 4338 -236 4340 -235 ct
+4370 -235 l 4370 -65 l 4370 -18 4387 5 4420 5 ct 4448 5 4469 -7 4488 -37 ct
+4481 -43 l 4469 -29 4459 -23 4447 -23 ct 4426 -23 4417 -38 4417 -74 ct 4417 -235 l
+4474 -235 l p ef
+4630 -381 m 4599 -381 4575 -371 4554 -351 ct 4521 -320 4500 -255 4500 -189 ct
+4500 -128 4519 -62 4545 -30 ct 4566 -5 4595 7 4628 7 ct 4656 7 4681 -1 4701 -21 ct
+4734 -52 4755 -117 4755 -186 ct 4755 -301 l 4704 -381 l p
+4628 -366 m 4675 -366 4701 -302 4701 -184 ct 4701 -67 4676 -6 4628 -6 ct 4579 -6 4554 -67 4554 -184 ct
+4554 -304 l 4580 -366 l p ef
+4935 -381 m 4833 -329 l 4833 -322 l 4840 -324 4846 -327 4848 -328 ct 4858 -332 4868 -334 4874 -334 ct
+4886 -334 4891 -325 4891 -307 ct 4891 -52 l 4891 -33 4886 -20 4877 -15 ct 4869 -10 4861 -9 4837 -8 ct
+4837 0 l 4993 0 l 4993 -8 l 4948 -9 4939 -14 4939 -41 ct 4939 -380 l p ef
+pom
+pum
+3916 20561 t
+70 -56 m 53 -56 39 -41 39 -24 ct 39 -7 53 6 69 6 ct 87 6 102 -7 102 -24 ct 102 -41 l
+87 -56 l p ef
+210 -56 m 193 -56 179 -41 179 -24 ct 179 -7 193 6 209 6 ct 227 6 242 -7 242 -24 ct
+242 -41 l 227 -56 l p ef
+349 -56 m 332 -56 318 -41 318 -24 ct 318 -7 332 6 348 6 ct 366 6 381 -7 381 -24 ct
+381 -41 l 366 -56 l p ef
+489 -56 m 472 -56 458 -41 458 -24 ct 458 -7 472 6 488 6 ct 506 6 521 -7 521 -24 ct
+521 -41 l 506 -56 l p ef
+629 -56 m 612 -56 598 -41 598 -24 ct 598 -7 612 6 628 6 ct 646 6 661 -7 661 -24 ct
+661 -41 l 646 -56 l p ef
+769 -56 m 752 -56 738 -41 738 -24 ct 738 -7 752 6 768 6 ct 786 6 801 -7 801 -24 ct
+801 -41 l 786 -56 l p ef
+908 -56 m 891 -56 877 -41 877 -24 ct 877 -7 891 6 907 6 ct 925 6 940 -7 940 -24 ct
+940 -41 l 925 -56 l p ef
+1048 -56 m 1031 -56 1017 -41 1017 -24 ct 1017 -7 1031 6 1047 6 ct 1065 6 1080 -7 1080 -24 ct
+1080 -41 l 1065 -56 l p ef
+1188 -56 m 1171 -56 1157 -41 1157 -24 ct 1157 -7 1171 6 1187 6 ct 1205 6 1220 -7 1220 -24 ct
+1220 -41 l 1205 -56 l p ef
+1327 -56 m 1310 -56 1296 -41 1296 -24 ct 1296 -7 1310 6 1326 6 ct 1344 6 1359 -7 1359 -24 ct
+1359 -41 l 1344 -56 l p ef
+1467 -56 m 1450 -56 1436 -41 1436 -24 ct 1436 -7 1450 6 1466 6 ct 1484 6 1499 -7 1499 -24 ct
+1499 -41 l 1484 -56 l p ef
+1607 -56 m 1590 -56 1576 -41 1576 -24 ct 1576 -7 1590 6 1606 6 ct 1624 6 1639 -7 1639 -24 ct
+1639 -41 l 1624 -56 l p ef
+1746 -56 m 1729 -56 1715 -41 1715 -24 ct 1715 -7 1729 6 1745 6 ct 1763 6 1778 -7 1778 -24 ct
+1778 -41 l 1763 -56 l p ef
+1886 -56 m 1869 -56 1855 -41 1855 -24 ct 1855 -7 1869 6 1885 6 ct 1903 6 1918 -7 1918 -24 ct
+1918 -41 l 1903 -56 l p ef
+2026 -56 m 2009 -56 1995 -41 1995 -24 ct 1995 -7 2009 6 2025 6 ct 2043 6 2058 -7 2058 -24 ct
+2058 -41 l 2043 -56 l p ef
+2166 -56 m 2149 -56 2135 -41 2135 -24 ct 2135 -7 2149 6 2165 6 ct 2183 6 2198 -7 2198 -24 ct
+2198 -41 l 2183 -56 l p ef
+2305 -56 m 2288 -56 2274 -41 2274 -24 ct 2274 -7 2288 6 2304 6 ct 2322 6 2337 -7 2337 -24 ct
+2337 -41 l 2322 -56 l p ef
+2445 -56 m 2428 -56 2414 -41 2414 -24 ct 2414 -7 2428 6 2444 6 ct 2462 6 2477 -7 2477 -24 ct
+2477 -41 l 2462 -56 l p ef
+2585 -56 m 2568 -56 2554 -41 2554 -24 ct 2554 -7 2568 6 2584 6 ct 2602 6 2617 -7 2617 -24 ct
+2617 -41 l 2602 -56 l p ef
+2724 -56 m 2707 -56 2693 -41 2693 -24 ct 2693 -7 2707 6 2723 6 ct 2741 6 2756 -7 2756 -24 ct
+2756 -41 l 2741 -56 l p ef
+2864 -56 m 2847 -56 2833 -41 2833 -24 ct 2833 -7 2847 6 2863 6 ct 2881 6 2896 -7 2896 -24 ct
+2896 -41 l 2881 -56 l p ef
+3004 -56 m 2987 -56 2973 -41 2973 -24 ct 2973 -7 2987 6 3003 6 ct 3021 6 3036 -7 3036 -24 ct
+3036 -41 l 3021 -56 l p ef
+3143 -56 m 3126 -56 3112 -41 3112 -24 ct 3112 -7 3126 6 3142 6 ct 3160 6 3175 -7 3175 -24 ct
+3175 -41 l 3160 -56 l p ef
+3283 -56 m 3266 -56 3252 -41 3252 -24 ct 3252 -7 3266 6 3282 6 ct 3300 6 3315 -7 3315 -24 ct
+3315 -41 l 3300 -56 l p ef
+3423 -56 m 3406 -56 3392 -41 3392 -24 ct 3392 -7 3406 6 3422 6 ct 3440 6 3455 -7 3455 -24 ct
+3455 -41 l 3440 -56 l p ef
+3563 -56 m 3546 -56 3532 -41 3532 -24 ct 3532 -7 3546 6 3562 6 ct 3580 6 3595 -7 3595 -24 ct
+3595 -41 l 3580 -56 l p ef
+3702 -56 m 3685 -56 3671 -41 3671 -24 ct 3671 -7 3685 6 3701 6 ct 3719 6 3734 -7 3734 -24 ct
+3734 -41 l 3719 -56 l p ef
+3842 -56 m 3825 -56 3811 -41 3811 -24 ct 3811 -7 3825 6 3841 6 ct 3859 6 3874 -7 3874 -24 ct
+3874 -41 l 3859 -56 l p ef
+3982 -56 m 3965 -56 3951 -41 3951 -24 ct 3951 -7 3965 6 3981 6 ct 3999 6 4014 -7 4014 -24 ct
+4014 -41 l 3999 -56 l p ef
+4121 -56 m 4104 -56 4090 -41 4090 -24 ct 4090 -7 4104 6 4120 6 ct 4138 6 4153 -7 4153 -24 ct
+4153 -41 l 4138 -56 l p ef
+4261 -56 m 4244 -56 4230 -41 4230 -24 ct 4230 -7 4244 6 4260 6 ct 4278 6 4293 -7 4293 -24 ct
+4293 -41 l 4278 -56 l p ef
+4401 -56 m 4384 -56 4370 -41 4370 -24 ct 4370 -7 4384 6 4400 6 ct 4418 6 4433 -7 4433 -24 ct
+4433 -41 l 4418 -56 l p ef
+4540 -56 m 4523 -56 4509 -41 4509 -24 ct 4509 -7 4523 6 4539 6 ct 4557 6 4572 -7 4572 -24 ct
+4572 -41 l 4557 -56 l p ef
+4680 -56 m 4663 -56 4649 -41 4649 -24 ct 4649 -7 4663 6 4679 6 ct 4697 6 4712 -7 4712 -24 ct
+4712 -41 l 4697 -56 l p ef
+4820 -56 m 4803 -56 4789 -41 4789 -24 ct 4789 -7 4803 6 4819 6 ct 4837 6 4852 -7 4852 -24 ct
+4852 -41 l 4837 -56 l p ef
+4960 -56 m 4943 -56 4929 -41 4929 -24 ct 4929 -7 4943 6 4959 6 ct 4977 6 4992 -7 4992 -24 ct
+4992 -41 l 4977 -56 l p ef
+pom
+pum
+3916 21243 t
+249 -37 m 239 -29 232 -26 224 -26 ct 211 -26 207 -34 207 -59 ct 207 -169 l
+207 -198 204 -214 196 -228 ct 183 -248 159 -259 126 -259 ct 73 -259 31 -231 31 -196 ct
+31 -183 42 -172 55 -172 ct 69 -172 81 -183 81 -195 ct 81 -197 80 -200 80 -204 ct
+78 -209 78 -214 78 -218 ct 78 -233 96 -245 119 -245 ct 146 -245 161 -229 161 -199 ct
+161 -164 l 75 -129 65 -125 41 -103 ct 28 -92 20 -73 20 -54 ct 20 -19 45 5 80 5 ct
+104 5 128 -6 162 -35 ct 165 -6 175 5 198 5 ct 217 5 229 -1 249 -22 ct p
+161 -69 m 161 -51 159 -46 147 -40 ct 133 -32 117 -27 106 -27 ct 86 -27 70 -46 70 -70 ct
+70 -72 l 70 -106 93 -126 161 -151 ct p ef
+260 -351 m 264 -351 l 270 -351 277 -352 281 -352 ct 299 -352 305 -344 305 -318 ct
+305 -49 l 305 -18 297 -11 261 -8 ct 261 0 l 394 0 l 394 -8 l 359 -10 352 -16 352 -47 ct
+352 -384 l 350 -385 l 321 -375 299 -369 260 -360 ct p ef
+504 -259 m 417 -228 l 417 -219 l 421 -220 l 428 -221 435 -222 440 -222 ct
+454 -222 459 -213 459 -188 ct 459 -57 l 459 -16 453 -10 415 -8 ct 415 0 l 548 0 l
+548 -8 l 511 -11 506 -16 506 -57 ct 506 -257 l p
+478 -385 m 462 -385 449 -372 449 -356 ct 449 -340 462 -327 478 -327 ct 494 -327 507 -340 507 -356 ct
+507 -372 l 494 -385 l p ef
+812 -37 m 802 -29 795 -26 787 -26 ct 774 -26 770 -34 770 -59 ct 770 -169 l
+770 -198 767 -214 759 -228 ct 746 -248 722 -259 689 -259 ct 636 -259 594 -231 594 -196 ct
+594 -183 605 -172 618 -172 ct 632 -172 644 -183 644 -195 ct 644 -197 643 -200 643 -204 ct
+641 -209 641 -214 641 -218 ct 641 -233 659 -245 682 -245 ct 709 -245 724 -229 724 -199 ct
+724 -164 l 638 -129 628 -125 604 -103 ct 591 -92 583 -73 583 -54 ct 583 -19 608 5 643 5 ct
+667 5 691 -6 725 -35 ct 728 -6 738 5 761 5 ct 780 5 792 -1 812 -22 ct p
+724 -69 m 724 -51 722 -46 710 -40 ct 696 -32 680 -27 669 -27 ct 649 -27 633 -46 633 -70 ct
+633 -72 l 633 -106 656 -126 724 -151 ct p ef
+990 -177 m 988 -253 l 982 -253 l 981 -252 l 976 -248 975 -248 973 -248 ct
+969 -248 964 -249 957 -252 ct 945 -256 933 -258 918 -258 ct 873 -258 841 -230 841 -189 ct
+841 -157 859 -135 907 -108 ct 940 -89 l 960 -78 969 -64 969 -47 ct 969 -22 951 -6 922 -6 ct
+903 -6 886 -14 875 -26 ct 863 -40 858 -53 851 -85 ct 842 -85 l 842 2 l 849 2 l
+853 -3 855 -4 862 -4 ct 867 -4 875 -3 888 0 ct 904 3 919 5 929 5 ct 973 5 1009 -27 1009 -66 ct
+1009 -94 995 -113 961 -133 ct 900 -169 l 885 -178 876 -192 876 -208 ct 876 -230 894 -246 920 -246 ct
+952 -246 969 -227 982 -177 ct p ef
+1109 -258 m 1092 -258 1078 -244 1078 -226 ct 1078 -210 1092 -196 1109 -196 ct
+1126 -196 1141 -210 1141 -226 ct 1141 -244 l 1126 -258 l p
+1109 -56 m 1092 -56 1078 -41 1078 -24 ct 1078 -7 1092 6 1109 6 ct 1126 6 1141 -7 1141 -24 ct
+1141 -41 l 1126 -56 l p ef
+1472 -349 m 1472 -67 l 1472 -19 1466 -13 1419 -10 ct 1419 0 l 1583 0 l
+1583 -10 l 1537 -12 1529 -20 1529 -61 ct 1529 -349 l 1560 -349 l 1624 -349 1636 -339 1649 -277 ct
+1663 -277 l 1660 -373 l 1341 -373 l 1338 -277 l 1352 -277 l 1365 -338 1378 -349 1441 -349 ct
+p ef
+1677 -221 m 1682 -222 1686 -222 1691 -222 ct 1710 -222 1714 -216 1714 -190 ct
+1714 73 l 1714 103 1708 109 1674 112 ct 1674 122 l 1811 122 l 1811 112 l
+1769 111 1761 105 1761 69 ct 1761 -18 l 1781 0 1794 5 1818 5 ct 1885 5 1937 -57 1937 -139 ct
+1937 -209 1897 -259 1842 -259 ct 1811 -259 1786 -245 1761 -214 ct 1761 -258 l
+1758 -259 l 1727 -247 1708 -240 1677 -230 ct p
+1761 -188 m 1761 -205 1793 -225 1819 -225 ct 1860 -225 1888 -182 1888 -117 ct
+1888 -54 1860 -12 1820 -12 ct 1793 -12 1761 -32 1761 -49 ct p ef
+2180 -87 m 2153 -48 2133 -34 2100 -34 ct 2049 -34 2013 -80 2013 -144 ct 2013 -203 2044 -243 2090 -243 ct
+2110 -243 2117 -236 2123 -216 ct 2126 -203 l 2131 -187 2141 -177 2153 -177 ct
+2168 -177 2180 -188 2180 -201 ct 2180 -232 2140 -259 2093 -259 ct 2065 -259 2037 -248 2014 -227 ct
+1985 -203 1970 -164 1970 -120 ct 1970 -46 2014 5 2077 5 ct 2102 5 2125 -3 2145 -20 ct
+2160 -34 2171 -49 2188 -82 ct p ef
+2349 -349 m 2349 -67 l 2349 -19 2343 -13 2296 -10 ct 2296 0 l 2460 0 l
+2460 -10 l 2414 -12 2406 -20 2406 -61 ct 2406 -349 l 2437 -349 l 2501 -349 2513 -339 2526 -277 ct
+2540 -277 l 2537 -373 l 2218 -373 l 2215 -277 l 2229 -277 l 2242 -338 2255 -349 2318 -349 ct
+p ef
+2778 -92 m 2751 -49 2726 -33 2690 -33 ct 2658 -33 2634 -49 2617 -81 ct 2607 -103 2603 -121 2602 -156 ct
+2776 -156 l 2771 -192 2766 -209 2752 -227 ct 2735 -247 2709 -259 2679 -259 ct
+2651 -259 2625 -249 2603 -230 ct 2577 -206 2562 -166 2562 -120 ct 2562 -42 2602 5 2667 5 ct
+2721 5 2763 -27 2787 -88 ct p
+2603 -174 m 2610 -218 2629 -239 2663 -239 ct 2698 -239 2711 -223 2718 -174 ct
+p ef
+2808 -224 m 2816 -226 2820 -226 2826 -226 ct 2841 -226 2846 -217 2846 -190 ct
+2846 -47 l 2846 -17 2838 -9 2807 -8 ct 2807 0 l 2932 0 l 2932 -8 l 2902 -9 2893 -15 2893 -37 ct
+2893 -196 l 2893 -197 2898 -203 2902 -207 ct 2916 -220 2940 -230 2960 -230 ct
+2985 -230 2997 -210 2997 -170 ct 2997 -48 l 2997 -16 2991 -10 2959 -8 ct 2959 0 l
+3085 0 l 3085 -8 l 3053 -9 3045 -18 3045 -53 ct 3045 -195 l 3061 -219 3080 -230 3106 -230 ct
+3138 -230 3148 -214 3148 -168 ct 3148 -49 l 3148 -16 3144 -12 3111 -8 ct 3111 0 l
+3235 0 l 3235 -8 l 3220 -9 l 3203 -10 3196 -20 3196 -42 ct 3196 -159 l
+3196 -225 3174 -259 3130 -259 ct 3098 -259 3069 -244 3038 -212 ct 3028 -244 3009 -259 2979 -259 ct
+2954 -259 2938 -251 2891 -216 ct 2891 -258 l 2887 -259 l 2858 -248 2839 -242 2808 -234 ct
+p ef
+3239 -221 m 3244 -222 3248 -222 3253 -222 ct 3272 -222 3276 -216 3276 -190 ct
+3276 73 l 3276 103 3270 109 3236 112 ct 3236 122 l 3373 122 l 3373 112 l
+3331 111 3323 105 3323 69 ct 3323 -18 l 3343 0 3356 5 3380 5 ct 3447 5 3499 -57 3499 -139 ct
+3499 -209 3459 -259 3404 -259 ct 3373 -259 3348 -245 3323 -214 ct 3323 -258 l
+3320 -259 l 3289 -247 3270 -240 3239 -230 ct p
+3323 -188 m 3323 -205 3355 -225 3381 -225 ct 3422 -225 3450 -182 3450 -117 ct
+3450 -54 3422 -12 3382 -12 ct 3355 -12 3323 -32 3323 -49 ct p ef
+3770 -381 m 3758 -381 l 3756 -368 3749 -362 3740 -362 ct 3734 -362 3724 -364 3715 -368 ct
+3694 -376 3673 -381 3655 -381 ct 3631 -381 3606 -371 3587 -355 ct 3568 -337 3558 -314 3558 -284 ct
+3558 -239 3582 -208 3646 -174 ct 3686 -153 3715 -130 3730 -108 ct 3735 -101 3737 -89 3737 -76 ct
+3737 -38 3709 -12 3668 -12 ct 3618 -12 3582 -43 3554 -112 ct 3541 -112 l 3558 7 l
+3571 7 l 3571 -3 3578 -11 3586 -11 ct 3593 -11 3602 -9 3613 -5 ct 3634 3 3657 7 3679 7 ct
+3744 7 3794 -36 3794 -94 ct 3794 -141 3763 -177 3689 -217 ct 3630 -250 3606 -275 3606 -305 ct
+3606 -336 3630 -358 3665 -358 ct 3690 -358 3714 -347 3734 -327 ct 3751 -309 3759 -294 3768 -261 ct
+3782 -261 l p ef
+4061 -92 m 4034 -49 4009 -33 3973 -33 ct 3941 -33 3917 -49 3900 -81 ct 3890 -103 3886 -121 3885 -156 ct
+4059 -156 l 4054 -192 4049 -209 4035 -227 ct 4018 -247 3992 -259 3962 -259 ct
+3934 -259 3908 -249 3886 -230 ct 3860 -206 3845 -166 3845 -120 ct 3845 -42 3885 5 3950 5 ct
+4004 5 4046 -27 4070 -88 ct p
+3886 -174 m 3893 -218 3912 -239 3946 -239 ct 3981 -239 3994 -223 4001 -174 ct
+p ef
+4305 -87 m 4278 -48 4258 -34 4225 -34 ct 4174 -34 4138 -80 4138 -144 ct 4138 -203 4169 -243 4215 -243 ct
+4235 -243 4242 -236 4248 -216 ct 4251 -203 l 4256 -187 4266 -177 4278 -177 ct
+4293 -177 4305 -188 4305 -201 ct 4305 -232 4265 -259 4218 -259 ct 4190 -259 4162 -248 4139 -227 ct
+4110 -203 4095 -164 4095 -120 ct 4095 -46 4139 5 4202 5 ct 4227 5 4250 -3 4270 -20 ct
+4285 -34 4296 -49 4313 -82 ct p ef
+4474 -253 m 4417 -253 l 4417 -319 l 4417 -324 4417 -326 4413 -326 ct 4409 -321 4406 -316 4402 -310 ct
+4381 -279 4356 -252 4347 -250 ct 4341 -246 4338 -242 4338 -239 ct 4338 -238 4338 -236 4340 -235 ct
+4370 -235 l 4370 -65 l 4370 -18 4387 5 4420 5 ct 4448 5 4469 -7 4488 -37 ct
+4481 -43 l 4469 -29 4459 -23 4447 -23 ct 4426 -23 4417 -38 4417 -74 ct 4417 -235 l
+4474 -235 l p ef
+4630 -381 m 4599 -381 4575 -371 4554 -351 ct 4521 -320 4500 -255 4500 -189 ct
+4500 -128 4519 -62 4545 -30 ct 4566 -5 4595 7 4628 7 ct 4656 7 4681 -1 4701 -21 ct
+4734 -52 4755 -117 4755 -186 ct 4755 -301 l 4704 -381 l p
+4628 -366 m 4675 -366 4701 -302 4701 -184 ct 4701 -67 4676 -6 4628 -6 ct 4579 -6 4554 -67 4554 -184 ct
+4554 -304 l 4580 -366 l p ef
+4804 12 m 4867 5 4898 -5 4936 -33 ct 4995 -76 5029 -146 5029 -222 ct 5029 -315 4977 -381 4905 -381 ct
+4838 -381 4787 -324 4787 -248 ct 4787 -179 4828 -133 4889 -133 ct 4920 -133 4944 -142 4974 -165 ct
+4950 -73 4888 -13 4802 1 ct p
+4975 -200 m 4975 -188 4972 -183 4966 -178 ct 4950 -165 4930 -157 4909 -157 ct
+4866 -157 4839 -200 4839 -267 ct 4839 -299 4848 -333 4860 -347 ct 4870 -359 4884 -365 4900 -365 ct
+4949 -365 4975 -316 4975 -222 ct p ef
+pom
+gr
+gr
+0 26640 t
+pom
+count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_inc_state restore
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 575 755
+%%Pages: 0
+%%Creator: Sun Microsystems, Inc.
+%%Title: none
+%%CreationDate: none
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+%%BeginResource: SDRes
+/b4_inc_state save def
+/dict_count countdictstack def
+/op_count count 1 sub def
+userdict begin
+0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[] 0 setdash newpath
+/languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint} if} if
+/bdef {bind def} bind def
+/c {setrgbcolor} bdef
+/l {neg lineto} bdef
+/rl {neg rlineto} bdef
+/lc {setlinecap} bdef
+/lj {setlinejoin} bdef
+/lw {setlinewidth} bdef
+/ml {setmiterlimit} bdef
+/ld {setdash} bdef
+/m {neg moveto} bdef
+/ct {6 2 roll neg 6 2 roll neg 6 2 roll neg curveto} bdef
+/r {rotate} bdef
+/t {neg translate} bdef
+/s {scale} bdef
+/sw {show} bdef
+/gs {gsave} bdef
+/gr {grestore} bdef
+/f {findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def
+currentdict end /NFont exch definefont pop /NFont findfont} bdef
+/p {closepath} bdef
+/sf {scalefont setfont} bdef
+/ef {eofill}bdef
+/pc {closepath stroke}bdef
+/ps {stroke}bdef
+/pum {matrix currentmatrix}bdef
+/pom {setmatrix}bdef
+/bs {/aString exch def /nXOfs exch def /nWidth exch def currentpoint nXOfs 0 rmoveto pum nWidth aString stringwidth pop div 1 scale aString show pom moveto} bdef
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%EndPageSetup
+pum
+0.02833 0.02834 s
+0 -26640 t
+/tm matrix currentmatrix def
+gs
+tm setmatrix
+-635 -635 t
+1 1 s
+635 635 m 20924 635 l 20924 27274 l 635 27274 l 635 635 l eoclip newpath
+0.003 0.722 1.000 c 7596 15845 m 5033 15845 l 5033 14605 l 10160 14605 l
+10160 15845 l 7596 15845 l p ef
+0 lw 1 lj 0.003 0.003 0.003 c 7596 15845 m 5033 15845 l 5033 14605 l 10160 14605 l
+10160 15845 l 7596 15845 l pc
+gs
+pum
+5847 15494 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1462 -571 m 1444 -571 l 1441 -552 1431 -543 1417 -543 ct 1408 -543 1394 -546 1380 -553 ct
+1348 -565 1317 -571 1290 -571 ct 1254 -571 1216 -557 1188 -532 ct 1159 -506 1144 -471 1144 -427 ct
+1144 -359 1181 -312 1276 -262 ct 1336 -230 1380 -195 1402 -163 ct 1409 -152 1413 -134 1413 -114 ct
+1413 -57 1371 -18 1309 -18 ct 1234 -18 1181 -65 1138 -168 ct 1119 -168 l 1144 11 l
+1163 11 l 1164 -5 1174 -16 1187 -16 ct 1196 -16 1210 -13 1226 -7 ct 1259 5 1292 11 1326 11 ct
+1424 11 1499 -54 1499 -142 ct 1499 -211 1452 -266 1341 -326 ct 1252 -375 1216 -412 1216 -458 ct
+1216 -505 1252 -537 1304 -537 ct 1342 -537 1378 -521 1408 -490 ct 1434 -463 1446 -441 1459 -391 ct
+1480 -391 l p ef
+1686 -290 m 1722 -329 1747 -343 1780 -343 ct 1823 -343 1844 -313 1844 -253 ct
+1844 -86 l 1844 -28 1835 -17 1786 -12 ct 1786 0 l 1966 0 l 1966 -12 l
+1920 -21 1915 -27 1915 -86 ct 1915 -254 l 1915 -343 1879 -389 1811 -389 ct
+1761 -389 1725 -368 1686 -318 ct 1686 -575 l 1682 -577 l 1653 -567 1632 -560 1585 -547 ct
+1562 -540 l 1562 -527 l 1565 -527 1568 -527 1572 -527 ct 1608 -527 1615 -521 1615 -484 ct
+1615 -86 l 1615 -27 1610 -19 1561 -12 ct 1561 0 l 1744 0 l 1744 -12 l
+1695 -17 1686 -27 1686 -86 ct p ef
+2382 -42 m 2378 -42 l 2339 -42 2329 -51 2329 -90 ct 2329 -380 l 2196 -380 l
+2196 -366 l 2248 -363 2258 -355 2258 -313 ct 2258 -114 l 2258 -90 2254 -78 2242 -69 ct
+2219 -50 2193 -40 2168 -40 ct 2135 -40 2108 -69 2108 -104 ct 2108 -380 l 1984 -380 l
+1984 -368 l 2025 -366 2037 -353 2037 -314 ct 2037 -101 l 2037 -34 2077 8 2139 8 ct
+2170 8 2203 -5 2226 -27 ct 2262 -64 l 2262 5 l 2266 7 l 2308 -9 2339 -18 2382 -30 ct
+p ef
+2615 -380 m 2530 -380 l 2530 -478 l 2530 -487 2529 -489 2524 -489 ct 2518 -482 2513 -474 2507 -466 ct
+2475 -419 2438 -379 2425 -375 ct 2416 -369 2411 -363 2411 -359 ct 2411 -357 2411 -355 2414 -353 ct
+2459 -353 l 2459 -98 l 2459 -27 2484 8 2534 8 ct 2575 8 2608 -11 2636 -55 ct
+2625 -65 l 2607 -43 2592 -35 2574 -35 ct 2542 -35 2530 -58 2530 -111 ct 2530 -353 l
+2615 -353 l p ef
+2852 -380 m 2767 -380 l 2767 -478 l 2767 -487 2766 -489 2761 -489 ct 2755 -482 2750 -474 2744 -466 ct
+2712 -419 2675 -379 2662 -375 ct 2653 -369 2648 -363 2648 -359 ct 2648 -357 2648 -355 2651 -353 ct
+2696 -353 l 2696 -98 l 2696 -27 2721 8 2771 8 ct 2812 8 2845 -11 2873 -55 ct
+2862 -65 l 2844 -43 2829 -35 2811 -35 ct 2779 -35 2767 -58 2767 -111 ct 2767 -353 l
+2852 -353 l p ef
+2890 -527 m 2895 -527 l 2904 -527 2914 -528 2921 -528 ct 2948 -528 2956 -516 2956 -477 ct
+2956 -73 l 2956 -27 2945 -16 2891 -12 ct 2891 0 l 3091 0 l 3091 -12 l
+3038 -16 3027 -24 3027 -71 ct 3027 -576 l 3024 -577 l 2980 -563 2948 -554 2890 -540 ct
+p ef
+3457 -138 m 3416 -74 3380 -49 3326 -49 ct 3277 -49 3241 -74 3216 -122 ct 3201 -154 3195 -182 3194 -234 ct
+3454 -234 l 3447 -289 3439 -313 3418 -340 ct 3392 -371 3353 -389 3309 -389 ct
+3267 -389 3227 -373 3195 -345 ct 3155 -310 3133 -250 3133 -181 ct 3133 -64 3194 8 3291 8 ct
+3371 8 3435 -41 3470 -132 ct p
+3195 -261 m 3205 -327 3233 -358 3285 -358 ct 3337 -358 3357 -335 3368 -261 ct
+p ef
+pom
+gr
+0.003 0.722 1.000 c 16777 15845 m 12829 15845 l 12829 14605 l 20725 14605 l
+20725 15845 l 16777 15845 l p ef
+0.003 0.003 0.003 c 16777 15845 m 12829 15845 l 12829 14605 l 20725 14605 l
+20725 15845 l 16777 15845 l pc
+gs
+pum
+13150 15494 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1608 -380 m 1600 -571 l 1583 -571 l 1578 -554 1564 -543 1547 -543 ct 1540 -543 1527 -546 1514 -551 ct
+1473 -565 1430 -571 1391 -571 ct 1321 -571 1251 -545 1199 -499 ct 1139 -446 1107 -368 1107 -274 ct
+1107 -196 1133 -123 1176 -75 ct 1226 -20 1304 11 1388 11 ct 1484 11 1567 -27 1619 -95 ct
+1604 -110 l 1541 -50 1485 -25 1415 -25 ct 1362 -25 1314 -42 1278 -74 ct 1232 -115 1205 -192 1205 -285 ct
+1205 -439 1284 -538 1407 -538 ct 1455 -538 1499 -520 1533 -486 ct 1560 -459 1572 -435 1589 -380 ct
+p ef
+1734 -92 m 1734 -31 1724 -20 1660 -16 ct 1660 0 l 1900 0 l 1998 0 2087 -27 2140 -75 ct
+2195 -125 2226 -200 2226 -282 ct 2226 -358 2201 -424 2154 -471 ct 2097 -529 2004 -560 1888 -560 ct
+1660 -560 l 1660 -543 l 1727 -538 1734 -530 1734 -467 ct p
+1821 -495 m 1821 -521 1830 -528 1865 -528 ct 1938 -528 1993 -515 2033 -486 ct
+2099 -440 2134 -368 2134 -276 ct 2134 -176 2099 -105 2031 -65 ct 1987 -41 1938 -31 1865 -31 ct
+1831 -31 1821 -38 1821 -65 ct p ef
+2270 -560 m 2270 -543 l 2341 -539 2351 -530 2351 -467 ct 2351 -92 l 2351 -29 2340 -18 2270 -16 ct
+2270 0 l 2552 0 l 2618 0 2679 -17 2710 -46 ct 2740 -73 2757 -111 2757 -152 ct
+2757 -189 2742 -223 2716 -247 ct 2690 -270 2668 -280 2613 -294 ct 2657 -305 2674 -313 2695 -331 ct
+2716 -350 2728 -381 2728 -416 ct 2728 -510 2653 -560 2507 -560 ct p
+2437 -275 m 2519 -275 2558 -271 2589 -258 ct 2637 -238 2660 -204 2660 -151 ct
+2660 -105 2642 -72 2608 -53 ct 2581 -38 2547 -31 2491 -31 ct 2449 -31 2437 -38 2437 -65 ct
+p
+2437 -309 m 2437 -503 l 2437 -521 2443 -528 2456 -528 ct 2493 -528 l 2591 -528 2642 -488 2642 -412 ct
+2642 -346 2597 -309 2518 -309 ct p ef
+2989 -246 m 3011 -244 3026 -243 3048 -243 ct 3114 -243 3159 -252 3196 -272 ct
+3247 -299 3277 -351 3277 -406 ct 3277 -442 3265 -474 3242 -499 ct 3209 -536 3135 -560 3055 -560 ct
+2832 -560 l 2832 -543 l 2895 -537 2903 -528 2903 -467 ct 2903 -101 l 2903 -30 2896 -22 2832 -16 ct
+2832 0 l 3069 0 l 3069 -16 l 3002 -18 2989 -30 2989 -92 ct p
+2989 -499 m 2989 -522 2995 -528 3018 -528 ct 3132 -528 3185 -488 3185 -401 ct
+3185 -319 3135 -277 3038 -277 ct 3021 -277 3009 -278 2989 -280 ct p ef
+3294 -329 m 3306 -332 3314 -333 3324 -333 ct 3345 -333 3353 -319 3353 -282 ct
+3353 -71 l 3353 -28 3347 -22 3293 -12 ct 3293 0 l 3496 0 l 3496 -12 l
+3438 -15 3424 -27 3424 -76 ct 3424 -266 l 3424 -293 3460 -335 3483 -335 ct
+3488 -335 3496 -331 3505 -323 ct 3519 -311 3528 -306 3539 -306 ct 3559 -306 3572 -320 3572 -344 ct
+3572 -372 3554 -389 3525 -389 ct 3490 -389 3465 -369 3424 -309 ct 3424 -387 l
+3420 -389 l 3375 -370 3344 -359 3294 -343 ct p ef
+3918 -138 m 3877 -74 3841 -49 3787 -49 ct 3738 -49 3702 -74 3677 -122 ct 3662 -154 3656 -182 3655 -234 ct
+3915 -234 l 3908 -289 3900 -313 3879 -340 ct 3853 -371 3814 -389 3770 -389 ct
+3728 -389 3688 -373 3656 -345 ct 3616 -310 3594 -250 3594 -181 ct 3594 -64 3655 8 3752 8 ct
+3832 8 3896 -41 3931 -132 ct p
+3656 -261 m 3666 -327 3694 -358 3746 -358 ct 3798 -358 3818 -335 3829 -261 ct
+p ef
+4120 -246 m 4142 -244 4157 -243 4179 -243 ct 4245 -243 4290 -252 4327 -272 ct
+4378 -299 4408 -351 4408 -406 ct 4408 -442 4396 -474 4373 -499 ct 4340 -536 4266 -560 4186 -560 ct
+3963 -560 l 3963 -543 l 4026 -537 4034 -528 4034 -467 ct 4034 -101 l 4034 -30 4027 -22 3963 -16 ct
+3963 0 l 4200 0 l 4200 -16 l 4133 -18 4120 -30 4120 -92 ct p
+4120 -499 m 4120 -522 4126 -528 4149 -528 ct 4263 -528 4316 -488 4316 -401 ct
+4316 -319 4266 -277 4169 -277 ct 4152 -277 4140 -278 4120 -280 ct p ef
+4425 -329 m 4437 -332 4445 -333 4455 -333 ct 4476 -333 4484 -319 4484 -282 ct
+4484 -71 l 4484 -28 4478 -22 4424 -12 ct 4424 0 l 4627 0 l 4627 -12 l
+4569 -15 4555 -27 4555 -76 ct 4555 -266 l 4555 -293 4591 -335 4614 -335 ct
+4619 -335 4627 -331 4636 -323 ct 4650 -311 4659 -306 4670 -306 ct 4690 -306 4703 -320 4703 -344 ct
+4703 -372 4685 -389 4656 -389 ct 4621 -389 4596 -369 4555 -309 ct 4555 -387 l
+4551 -389 l 4506 -370 4475 -359 4425 -343 ct p ef
+4914 -389 m 4804 -389 4727 -307 4727 -191 ct 4727 -76 4806 8 4912 8 ct 5019 8 5100 -81 5100 -197 ct
+5100 -308 l 5022 -389 l p
+4903 -365 m 4974 -365 5024 -284 5024 -168 ct 5024 -72 4986 -15 4922 -15 ct
+4889 -15 4858 -35 4840 -69 ct 4817 -113 4803 -172 4803 -232 ct 4803 -313 l 4843 -365 l
+p ef
+5463 -131 m 5423 -72 5392 -52 5344 -52 ct 5267 -52 5213 -120 5213 -217 ct 5213 -304 5259 -364 5328 -364 ct
+5358 -364 5369 -355 5378 -324 ct 5383 -305 l 5390 -281 5405 -266 5423 -266 ct
+5445 -266 5463 -282 5463 -302 ct 5463 -349 5404 -389 5333 -389 ct 5291 -389 5248 -372 5214 -341 ct
+5171 -304 5148 -247 5148 -180 ct 5148 -70 5214 8 5308 8 ct 5346 8 5380 -5 5411 -31 ct
+5434 -51 5450 -74 5475 -124 ct p ef
+5848 -138 m 5807 -74 5771 -49 5717 -49 ct 5668 -49 5632 -74 5607 -122 ct 5592 -154 5586 -182 5585 -234 ct
+5845 -234 l 5838 -289 5830 -313 5809 -340 ct 5783 -371 5744 -389 5700 -389 ct
+5658 -389 5618 -373 5586 -345 ct 5546 -310 5524 -250 5524 -181 ct 5524 -64 5585 8 5682 8 ct
+5762 8 5826 -41 5861 -132 ct p
+5586 -261 m 5596 -327 5624 -358 5676 -358 ct 5728 -358 5748 -335 5759 -261 ct
+p ef
+6146 -265 m 6143 -380 l 6133 -380 l 6132 -379 l 6124 -373 6123 -372 6120 -372 ct
+6115 -372 6106 -373 6097 -378 ct 6078 -384 6060 -388 6038 -388 ct 5971 -388 5923 -345 5923 -284 ct
+5923 -236 5950 -203 6022 -162 ct 6071 -134 l 6100 -117 6115 -97 6115 -71 ct
+6115 -33 6088 -10 6044 -10 ct 6016 -10 5989 -21 5973 -39 ct 5956 -60 5948 -80 5937 -128 ct
+5923 -128 l 5923 3 l 5934 3 l 5940 -5 5944 -6 5954 -6 ct 5962 -6 5973 -5 5993 0 ct
+6017 5 6039 8 6055 8 ct 6120 8 6174 -40 6174 -99 ct 6174 -142 6154 -170 6103 -200 ct
+6011 -254 l 5988 -268 5975 -289 5975 -312 ct 5975 -346 6001 -369 6040 -369 ct
+6088 -369 6114 -340 6133 -265 ct p ef
+6476 -265 m 6473 -380 l 6463 -380 l 6462 -379 l 6454 -373 6453 -372 6450 -372 ct
+6445 -372 6436 -373 6427 -378 ct 6408 -384 6390 -388 6368 -388 ct 6301 -388 6253 -345 6253 -284 ct
+6253 -236 6280 -203 6352 -162 ct 6401 -134 l 6430 -117 6445 -97 6445 -71 ct
+6445 -33 6418 -10 6374 -10 ct 6346 -10 6319 -21 6303 -39 ct 6286 -60 6278 -80 6267 -128 ct
+6253 -128 l 6253 3 l 6264 3 l 6270 -5 6274 -6 6284 -6 ct 6292 -6 6303 -5 6323 0 ct
+6347 5 6369 8 6385 8 ct 6450 8 6504 -40 6504 -99 ct 6504 -142 6484 -170 6433 -200 ct
+6341 -254 l 6318 -268 6305 -289 6305 -312 ct 6305 -346 6331 -369 6370 -369 ct
+6418 -369 6444 -340 6463 -265 ct p ef
+6752 -389 m 6642 -389 6565 -307 6565 -191 ct 6565 -76 6644 8 6750 8 ct 6857 8 6938 -81 6938 -197 ct
+6938 -308 l 6860 -389 l p
+6741 -365 m 6812 -365 6862 -284 6862 -168 ct 6862 -72 6824 -15 6760 -15 ct
+6727 -15 6696 -35 6678 -69 ct 6655 -113 6641 -172 6641 -232 ct 6641 -313 l 6681 -365 l
+p ef
+6969 -329 m 6981 -332 6989 -333 6999 -333 ct 7020 -333 7028 -319 7028 -282 ct
+7028 -71 l 7028 -28 7022 -22 6968 -12 ct 6968 0 l 7171 0 l 7171 -12 l
+7113 -15 7099 -27 7099 -76 ct 7099 -266 l 7099 -293 7135 -335 7158 -335 ct
+7163 -335 7171 -331 7180 -323 ct 7194 -311 7203 -306 7214 -306 ct 7234 -306 7247 -320 7247 -344 ct
+7247 -372 7229 -389 7200 -389 ct 7165 -389 7140 -369 7099 -309 ct 7099 -387 l
+7095 -389 l 7050 -370 7019 -359 6969 -343 ct p ef
+pom
+gr
+gs
+10230 10260 m 17957 10260 l 17957 11530 l 10230 11530 l 10230 10260 l eoclip newpath
+gs
+tm setmatrix
+9594.76585 9625.03305 t
+0.85552 0.53179 s
+gr
+gr
+1.000 1.000 0.003 c 16975 7620 m 13165 7620 l 13165 1905 l 20785 1905 l
+20785 7620 l 16975 7620 l p ef
+0.003 0.003 0.003 c 16975 7620 m 13165 7620 l 13165 1905 l 20785 1905 l
+20785 7620 l 16975 7620 l pc
+1.000 0.003 0.003 c 17092 7585 m 14235 7585 l 14235 6315 l 19950 6315 l
+19950 7585 l 17092 7585 l p ef
+0.003 0.003 0.003 c 17092 7585 m 14235 7585 l 14235 6315 l 19950 6315 l
+19950 7585 l 17092 7585 l pc
+gs
+pum
+15187 7212 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+1180 -484 m 1180 -101 l 1180 -31 1170 -20 1103 -16 ct 1103 0 l 1340 0 l
+1340 -16 l 1278 -20 1266 -32 1266 -92 ct 1266 -467 l 1266 -527 1277 -538 1340 -543 ct
+1340 -560 l 1171 -560 l 984 -132 l 789 -560 l 621 -560 l 621 -543 l
+691 -539 702 -529 702 -467 ct 702 -124 l 702 -37 690 -21 620 -16 ct 620 0 l
+818 0 l 818 -16 l 753 -19 739 -38 739 -124 ct 739 -465 l 951 0 l 963 0 l
+p ef
+1960 -16 m 1922 -18 1913 -27 1884 -89 ct 1673 -570 l 1656 -570 l 1480 -154 l
+1426 -31 1416 -17 1375 -16 ct 1375 0 l 1543 0 l 1543 -16 l 1502 -16 1485 -27 1485 -50 ct
+1485 -60 1488 -72 1492 -83 ct 1531 -182 l 1753 -182 l 1787 -101 l 1797 -78 1803 -56 1803 -44 ct
+1803 -23 1789 -16 1744 -16 ct 1744 0 l 1960 0 l p
+1545 -217 m 1643 -450 l 1741 -217 l p ef
+2490 9 m 2490 -435 l 2490 -486 2499 -517 2515 -528 ct 2527 -537 2538 -540 2571 -543 ct
+2571 -560 l 2372 -560 l 2372 -543 l 2404 -541 2416 -538 2429 -530 ct 2445 -518 2453 -488 2453 -435 ct
+2453 -150 l 2127 -560 l 1983 -560 l 1983 -543 l 2019 -543 2031 -537 2065 -497 ct
+2065 -124 l 2065 -37 2053 -21 1983 -16 ct 1983 0 l 2181 0 l 2181 -16 l
+2116 -19 2102 -38 2102 -124 ct 2102 -456 l 2476 9 l p ef
+2669 -92 m 2669 -31 2659 -20 2595 -16 ct 2595 0 l 2835 0 l 2933 0 3022 -27 3075 -75 ct
+3130 -125 3161 -200 3161 -282 ct 3161 -358 3136 -424 3089 -471 ct 3032 -529 2939 -560 2823 -560 ct
+2595 -560 l 2595 -543 l 2662 -538 2669 -530 2669 -467 ct p
+2756 -495 m 2756 -521 2765 -528 2800 -528 ct 2873 -528 2928 -515 2968 -486 ct
+3034 -440 3069 -368 3069 -276 ct 3069 -176 3034 -105 2966 -65 ct 2922 -41 2873 -31 2800 -31 ct
+2766 -31 2756 -38 2756 -65 ct p ef
+3789 -16 m 3751 -18 3742 -27 3713 -89 ct 3502 -570 l 3485 -570 l 3309 -154 l
+3255 -31 3245 -17 3204 -16 ct 3204 0 l 3372 0 l 3372 -16 l 3331 -16 3314 -27 3314 -50 ct
+3314 -60 3317 -72 3321 -83 ct 3360 -182 l 3582 -182 l 3616 -101 l 3626 -78 3632 -56 3632 -44 ct
+3632 -23 3618 -16 3573 -16 ct 3573 0 l 3789 0 l p
+3374 -217 m 3472 -450 l 3570 -217 l p ef
+pom
+gr
+0.242 0.921 0.242 c 16975 5615 m 15573 5615 14435 5046 14435 4345 ct 14435 3644 15573 3075 16975 3075 ct
+18377 3075 19515 3644 19515 4345 ct 19515 5046 18377 5615 16975 5615 ct 16975 5615 l
+p ef
+0.003 0.003 0.003 c 16975 5615 m 15573 5615 14435 5046 14435 4345 ct 14435 3644 15573 3075 16975 3075 ct
+18377 3075 19515 3644 19515 4345 ct 19515 5046 18377 5615 16975 5615 ct 16975 5615 l
+pc
+gs
+pum
+15954 4117 t
+170 -246 m 192 -244 207 -243 229 -243 ct 295 -243 340 -252 377 -272 ct 428 -299 458 -351 458 -406 ct
+458 -442 446 -474 423 -499 ct 390 -536 316 -560 236 -560 ct 13 -560 l 13 -543 l
+76 -537 84 -528 84 -467 ct 84 -101 l 84 -30 77 -22 13 -16 ct 13 0 l 250 0 l
+250 -16 l 183 -18 170 -30 170 -92 ct p
+170 -499 m 170 -522 176 -528 199 -528 ct 313 -528 366 -488 366 -401 ct 366 -319 316 -277 219 -277 ct
+202 -277 190 -278 170 -280 ct p ef
+1059 -560 m 886 -560 l 886 -543 l 932 -541 947 -532 947 -508 ct 947 -494 942 -472 931 -446 ct
+807 -136 l 679 -422 l 651 -483 645 -503 645 -516 ct 645 -532 656 -540 684 -542 ct
+687 -542 696 -543 708 -543 ct 708 -560 l 483 -560 l 483 -543 l 524 -542 536 -530 573 -455 ct
+781 9 l 794 9 l 981 -465 l 1009 -532 1019 -541 1059 -543 ct p ef
+1458 -571 m 1440 -571 l 1437 -552 1427 -543 1413 -543 ct 1404 -543 1390 -546 1376 -553 ct
+1344 -565 1313 -571 1286 -571 ct 1250 -571 1212 -557 1184 -532 ct 1155 -506 1140 -471 1140 -427 ct
+1140 -359 1177 -312 1272 -262 ct 1332 -230 1376 -195 1398 -163 ct 1405 -152 1409 -134 1409 -114 ct
+1409 -57 1367 -18 1305 -18 ct 1230 -18 1177 -65 1134 -168 ct 1115 -168 l 1140 11 l
+1159 11 l 1160 -5 1170 -16 1183 -16 ct 1192 -16 1206 -13 1222 -7 ct 1255 5 1288 11 1322 11 ct
+1420 11 1495 -54 1495 -142 ct 1495 -211 1448 -266 1337 -326 ct 1248 -375 1212 -412 1212 -458 ct
+1212 -505 1248 -537 1300 -537 ct 1338 -537 1374 -521 1404 -490 ct 1430 -463 1442 -441 1455 -391 ct
+1476 -391 l p ef
+1927 -571 m 1909 -571 l 1906 -552 1896 -543 1882 -543 ct 1873 -543 1859 -546 1845 -553 ct
+1813 -565 1782 -571 1755 -571 ct 1719 -571 1681 -557 1653 -532 ct 1624 -506 1609 -471 1609 -427 ct
+1609 -359 1646 -312 1741 -262 ct 1801 -230 1845 -195 1867 -163 ct 1874 -152 1878 -134 1878 -114 ct
+1878 -57 1836 -18 1774 -18 ct 1699 -18 1646 -65 1603 -168 ct 1584 -168 l 1609 11 l
+1628 11 l 1629 -5 1639 -16 1652 -16 ct 1661 -16 1675 -13 1691 -7 ct 1724 5 1757 11 1791 11 ct
+1889 11 1964 -54 1964 -142 ct 1964 -211 1917 -266 1806 -326 ct 1717 -375 1681 -412 1681 -458 ct
+1681 -505 1717 -537 1769 -537 ct 1807 -537 1843 -521 1873 -490 ct 1899 -463 1911 -441 1924 -391 ct
+1945 -391 l p ef
+pom
+pum
+16282 5141 t
+87 -92 m 87 -31 77 -20 13 -16 ct 13 0 l 253 0 l 351 0 440 -27 493 -75 ct
+548 -125 579 -200 579 -282 ct 579 -358 554 -424 507 -471 ct 450 -529 357 -560 241 -560 ct
+13 -560 l 13 -543 l 80 -538 87 -530 87 -467 ct p
+174 -495 m 174 -521 183 -528 218 -528 ct 291 -528 346 -515 386 -486 ct 452 -440 487 -368 487 -276 ct
+487 -176 452 -105 384 -65 ct 340 -41 291 -31 218 -31 ct 184 -31 174 -38 174 -65 ct
+p ef
+1180 -484 m 1180 -101 l 1180 -31 1170 -20 1103 -16 ct 1103 0 l 1340 0 l
+1340 -16 l 1278 -20 1266 -32 1266 -92 ct 1266 -467 l 1266 -527 1277 -538 1340 -543 ct
+1340 -560 l 1171 -560 l 984 -132 l 789 -560 l 621 -560 l 621 -543 l
+691 -539 702 -529 702 -467 ct 702 -124 l 702 -37 690 -21 620 -16 ct 620 0 l
+818 0 l 818 -16 l 753 -19 739 -38 739 -124 ct 739 -465 l 951 0 l 963 0 l
+p ef
+pom
+gr
+gs
+pum
+13414 2820 t
+87 -92 m 87 -31 77 -20 13 -16 ct 13 0 l 253 0 l 351 0 440 -27 493 -75 ct
+548 -125 579 -200 579 -282 ct 579 -358 554 -424 507 -471 ct 450 -529 357 -560 241 -560 ct
+13 -560 l 13 -543 l 80 -538 87 -530 87 -467 ct p
+174 -495 m 174 -521 183 -528 218 -528 ct 291 -528 346 -515 386 -486 ct 452 -440 487 -368 487 -276 ct
+487 -176 452 -105 384 -65 ct 340 -41 291 -31 218 -31 ct 184 -31 174 -38 174 -65 ct
+p ef
+1134 -380 m 1126 -571 l 1109 -571 l 1104 -554 1090 -543 1073 -543 ct 1066 -543 1053 -546 1040 -551 ct
+999 -565 956 -571 917 -571 ct 847 -571 777 -545 725 -499 ct 665 -446 633 -368 633 -274 ct
+633 -196 659 -123 702 -75 ct 752 -20 830 11 914 11 ct 1010 11 1093 -27 1145 -95 ct
+1130 -110 l 1067 -50 1011 -25 941 -25 ct 888 -25 840 -42 804 -74 ct 758 -115 731 -192 731 -285 ct
+731 -439 810 -538 933 -538 ct 981 -538 1025 -520 1059 -486 ct 1086 -459 1098 -435 1115 -380 ct
+p ef
+1551 -571 m 1533 -571 l 1530 -552 1520 -543 1506 -543 ct 1497 -543 1483 -546 1469 -553 ct
+1437 -565 1406 -571 1379 -571 ct 1343 -571 1305 -557 1277 -532 ct 1248 -506 1233 -471 1233 -427 ct
+1233 -359 1270 -312 1365 -262 ct 1425 -230 1469 -195 1491 -163 ct 1498 -152 1502 -134 1502 -114 ct
+1502 -57 1460 -18 1398 -18 ct 1323 -18 1270 -65 1227 -168 ct 1208 -168 l 1233 11 l
+1252 11 l 1253 -5 1263 -16 1276 -16 ct 1285 -16 1299 -13 1315 -7 ct 1348 5 1381 11 1415 11 ct
+1513 11 1588 -54 1588 -142 ct 1588 -211 1541 -266 1430 -326 ct 1341 -375 1305 -412 1305 -458 ct
+1305 -505 1341 -537 1393 -537 ct 1431 -537 1467 -521 1497 -490 ct 1523 -463 1535 -441 1548 -391 ct
+1569 -391 l p ef
+pom
+gr
+0.003 0.722 1.000 c 14430 11465 m 11171 11465 l 11171 10195 l 17690 10195 l
+17690 11465 l 14430 11465 l p ef
+0.003 0.003 0.003 c 14430 11465 m 11171 11465 l 11171 10195 l 17690 10195 l
+17690 11465 l 14430 11465 l pc
+gs
+pum
+12039 11102 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1171 -92 m 1171 -31 1161 -20 1097 -16 ct 1097 0 l 1337 0 l 1435 0 1524 -27 1577 -75 ct
+1632 -125 1663 -200 1663 -282 ct 1663 -358 1638 -424 1591 -471 ct 1534 -529 1441 -560 1325 -560 ct
+1097 -560 l 1097 -543 l 1164 -538 1171 -530 1171 -467 ct p
+1258 -495 m 1258 -521 1267 -528 1302 -528 ct 1375 -528 1430 -515 1470 -486 ct
+1536 -440 1571 -368 1571 -276 ct 1571 -176 1536 -105 1468 -65 ct 1424 -41 1375 -31 1302 -31 ct
+1268 -31 1258 -38 1258 -65 ct p ef
+2217 -380 m 2209 -571 l 2192 -571 l 2187 -554 2173 -543 2156 -543 ct 2149 -543 2136 -546 2123 -551 ct
+2082 -565 2039 -571 2000 -571 ct 1930 -571 1860 -545 1808 -499 ct 1748 -446 1716 -368 1716 -274 ct
+1716 -196 1742 -123 1785 -75 ct 1835 -20 1913 11 1997 11 ct 2093 11 2176 -27 2228 -95 ct
+2213 -110 l 2150 -50 2094 -25 2024 -25 ct 1971 -25 1923 -42 1887 -74 ct 1841 -115 1814 -192 1814 -285 ct
+1814 -439 1893 -538 2016 -538 ct 2064 -538 2108 -520 2142 -486 ct 2169 -459 2181 -435 2198 -380 ct
+p ef
+2634 -571 m 2616 -571 l 2613 -552 2603 -543 2589 -543 ct 2580 -543 2566 -546 2552 -553 ct
+2520 -565 2489 -571 2462 -571 ct 2426 -571 2388 -557 2360 -532 ct 2331 -506 2316 -471 2316 -427 ct
+2316 -359 2353 -312 2448 -262 ct 2508 -230 2552 -195 2574 -163 ct 2581 -152 2585 -134 2585 -114 ct
+2585 -57 2543 -18 2481 -18 ct 2406 -18 2353 -65 2310 -168 ct 2291 -168 l 2316 11 l
+2335 11 l 2336 -5 2346 -16 2359 -16 ct 2368 -16 2382 -13 2398 -7 ct 2431 5 2464 11 2498 11 ct
+2596 11 2671 -54 2671 -142 ct 2671 -211 2624 -266 2513 -326 ct 2424 -375 2388 -412 2388 -458 ct
+2388 -505 2424 -537 2476 -537 ct 2514 -537 2550 -521 2580 -490 ct 2606 -463 2618 -441 2631 -391 ct
+2652 -391 l p ef
+3250 -380 m 3242 -571 l 3225 -571 l 3220 -554 3206 -543 3189 -543 ct 3182 -543 3169 -546 3156 -551 ct
+3115 -565 3072 -571 3033 -571 ct 2963 -571 2893 -545 2841 -499 ct 2781 -446 2749 -368 2749 -274 ct
+2749 -196 2775 -123 2818 -75 ct 2868 -20 2946 11 3030 11 ct 3126 11 3209 -27 3261 -95 ct
+3246 -110 l 3183 -50 3127 -25 3057 -25 ct 3004 -25 2956 -42 2920 -74 ct 2874 -115 2847 -192 2847 -285 ct
+2847 -439 2926 -538 3049 -538 ct 3097 -538 3141 -520 3175 -486 ct 3202 -459 3214 -435 3231 -380 ct
+p ef
+3305 -527 m 3310 -527 l 3319 -527 3329 -528 3336 -528 ct 3363 -528 3371 -516 3371 -477 ct
+3371 -73 l 3371 -27 3360 -16 3306 -12 ct 3306 0 l 3506 0 l 3506 -12 l
+3453 -16 3442 -24 3442 -71 ct 3442 -576 l 3439 -577 l 3395 -563 3363 -554 3305 -540 ct
+p ef
+3674 -389 m 3542 -342 l 3542 -329 l 3549 -330 l 3559 -332 3570 -333 3578 -333 ct
+3598 -333 3606 -319 3606 -282 ct 3606 -86 l 3606 -25 3597 -16 3539 -12 ct 3539 0 l
+3740 0 l 3740 -12 l 3684 -16 3677 -25 3677 -86 ct 3677 -386 l p
+3634 -577 m 3611 -577 3591 -558 3591 -534 ct 3591 -510 3610 -491 3634 -491 ct
+3658 -491 3678 -510 3678 -534 ct 3678 -558 l 3658 -577 l p ef
+4108 -138 m 4067 -74 4031 -49 3977 -49 ct 3928 -49 3892 -74 3867 -122 ct 3852 -154 3846 -182 3845 -234 ct
+4105 -234 l 4098 -289 4090 -313 4069 -340 ct 4043 -371 4004 -389 3960 -389 ct
+3918 -389 3878 -373 3846 -345 ct 3806 -310 3784 -250 3784 -181 ct 3784 -64 3845 8 3942 8 ct
+4022 8 4086 -41 4121 -132 ct p
+3846 -261 m 3856 -327 3884 -358 3936 -358 ct 3988 -358 4008 -335 4019 -261 ct
+p ef
+4153 -336 m 4158 -339 4167 -340 4176 -340 ct 4200 -340 4207 -327 4207 -285 ct
+4207 -76 l 4207 -27 4198 -16 4155 -12 ct 4155 0 l 4334 0 l 4334 -12 l
+4291 -16 4278 -26 4278 -56 ct 4278 -294 l 4319 -332 4337 -342 4365 -342 ct
+4407 -342 4427 -316 4427 -260 ct 4427 -83 l 4427 -30 4416 -16 4374 -12 ct 4374 0 l
+4550 0 l 4550 -12 l 4508 -16 4498 -27 4498 -68 ct 4498 -262 l 4498 -341 4461 -389 4398 -389 ct
+4359 -389 4333 -374 4276 -320 ct 4276 -387 l 4270 -389 l 4228 -373 4200 -364 4153 -351 ct
+p ef
+4779 -380 m 4694 -380 l 4694 -478 l 4694 -487 4693 -489 4688 -489 ct 4682 -482 4677 -474 4671 -466 ct
+4639 -419 4602 -379 4589 -375 ct 4580 -369 4575 -363 4575 -359 ct 4575 -357 4575 -355 4578 -353 ct
+4623 -353 l 4623 -98 l 4623 -27 4648 8 4698 8 ct 4739 8 4772 -11 4800 -55 ct
+4789 -65 l 4771 -43 4756 -35 4738 -35 ct 4706 -35 4694 -58 4694 -111 ct 4694 -353 l
+4779 -353 l p ef
+pom
+gr
+17092 7585 m 16665 7792 l 16875 8007 l 17092 7585 l p ef
+1 lw 0 lj 16834 7837 m 14430 10195 l ps
+16975 5715 m 16825 6165 l 17125 6164 l 16975 5715 l p ef
+16975 6350 m 16975 6075 l ps
+14430 11465 m 13958 11516 l 14083 11789 l 14430 11465 l p ef
+14102 11615 m 7596 14605 l ps
+12829 15225 m 12378 15075 l 12379 15375 l 12829 15225 l p ef
+12469 15225 m 10160 15225 l ps
+gs
+pum
+12039 15388 t
+203 -379 m 204 -365 l 206 -347 201 -323 190 -294 ct 184 -279 181 -264 181 -255 ct
+181 -238 194 -224 210 -224 ct 228 -224 243 -240 243 -258 ct 243 -263 241 -274 236 -285 ct
+225 -314 219 -346 219 -379 ct 219 -385 l 225 -383 l 244 -375 262 -360 285 -332 ct
+306 -306 320 -296 335 -296 ct 353 -296 365 -308 365 -327 ct 365 -349 352 -358 315 -364 ct
+282 -369 255 -379 233 -393 ct 226 -397 l 268 -421 284 -427 321 -433 ct 353 -438 364 -447 364 -468 ct
+364 -488 351 -501 334 -501 ct 321 -501 307 -490 286 -466 ct 265 -441 244 -423 225 -412 ct
+219 -409 l 219 -431 l 219 -451 225 -475 234 -501 ct 239 -517 242 -531 242 -540 ct
+242 -558 229 -571 212 -571 ct 195 -571 182 -559 182 -542 ct 182 -532 186 -516 191 -499 ct
+199 -471 203 -445 203 -422 ct 203 -411 l 171 -428 155 -442 127 -472 ct 110 -493 100 -499 87 -499 ct
+71 -499 58 -486 58 -469 ct 58 -449 75 -437 115 -429 ct 147 -423 172 -415 188 -404 ct
+197 -398 l 163 -377 149 -372 110 -364 ct 72 -357 58 -347 58 -326 ct 58 -307 70 -296 88 -296 ct
+102 -296 109 -301 124 -317 ct 148 -345 153 -349 159 -355 ct 168 -362 174 -367 203 -385 ct
+p ef
+pom
+gr
+0.800 0.402 0.203 c 15590 26065 m 13100 26065 l 13100 24160 l 18080 24160 l
+18080 26065 l 15590 26065 l p ef
+0 lw 1 lj 0.003 0.003 0.003 c 15590 26065 m 13100 26065 l 13100 24160 l
+18080 24160 l 18080 26065 l 15590 26065 l pc
+gs
+pum
+14499 25389 t
+484 -147 m 470 -115 458 -95 445 -81 ct 416 -48 369 -33 299 -33 ct 242 -33 l
+181 -33 170 -38 170 -67 ct 170 -467 l 170 -527 181 -539 248 -543 ct 248 -560 l
+10 -560 l 10 -543 l 72 -538 83 -527 83 -467 ct 83 -92 l 83 -33 71 -20 10 -16 ct
+10 0 l 465 0 l 505 -147 l p ef
+603 -92 m 603 -31 593 -20 529 -16 ct 529 0 l 769 0 l 867 0 956 -27 1009 -75 ct
+1064 -125 1095 -200 1095 -282 ct 1095 -358 1070 -424 1023 -471 ct 966 -529 873 -560 757 -560 ct
+529 -560 l 529 -543 l 596 -538 603 -530 603 -467 ct p
+690 -495 m 690 -521 699 -528 734 -528 ct 807 -528 862 -515 902 -486 ct 968 -440 1003 -368 1003 -276 ct
+1003 -176 968 -105 900 -65 ct 856 -41 807 -31 734 -31 ct 700 -31 690 -38 690 -65 ct
+p ef
+1723 -16 m 1685 -18 1676 -27 1647 -89 ct 1436 -570 l 1419 -570 l 1243 -154 l
+1189 -31 1179 -17 1138 -16 ct 1138 0 l 1306 0 l 1306 -16 l 1265 -16 1248 -27 1248 -50 ct
+1248 -60 1251 -72 1255 -83 ct 1294 -182 l 1516 -182 l 1550 -101 l 1560 -78 1566 -56 1566 -44 ct
+1566 -23 1552 -16 1507 -16 ct 1507 0 l 1723 0 l p
+1308 -217 m 1406 -450 l 1504 -217 l p ef
+1906 -246 m 1928 -244 1943 -243 1965 -243 ct 2031 -243 2076 -252 2113 -272 ct
+2164 -299 2194 -351 2194 -406 ct 2194 -442 2182 -474 2159 -499 ct 2126 -536 2052 -560 1972 -560 ct
+1749 -560 l 1749 -543 l 1812 -537 1820 -528 1820 -467 ct 1820 -101 l 1820 -30 1813 -22 1749 -16 ct
+1749 0 l 1986 0 l 1986 -16 l 1919 -18 1906 -30 1906 -92 ct p
+1906 -499 m 1906 -522 1912 -528 1935 -528 ct 2049 -528 2102 -488 2102 -401 ct
+2102 -319 2052 -277 1955 -277 ct 1938 -277 1926 -278 1906 -280 ct p ef
+pom
+gr
+0.003 0.722 1.000 c 15610 22425 m 11800 22425 l 11800 21155 l 19420 21155 l
+19420 22425 l 15610 22425 l p ef
+0.003 0.003 0.003 c 15610 22425 m 11800 22425 l 11800 21155 l 19420 21155 l
+19420 22425 l 15610 22425 l pc
+gs
+pum
+12700 22056 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1462 -571 m 1444 -571 l 1441 -552 1431 -543 1417 -543 ct 1408 -543 1394 -546 1380 -553 ct
+1348 -565 1317 -571 1290 -571 ct 1254 -571 1216 -557 1188 -532 ct 1159 -506 1144 -471 1144 -427 ct
+1144 -359 1181 -312 1276 -262 ct 1336 -230 1380 -195 1402 -163 ct 1409 -152 1413 -134 1413 -114 ct
+1413 -57 1371 -18 1309 -18 ct 1234 -18 1181 -65 1138 -168 ct 1119 -168 l 1144 11 l
+1163 11 l 1164 -5 1174 -16 1187 -16 ct 1196 -16 1210 -13 1226 -7 ct 1259 5 1292 11 1326 11 ct
+1424 11 1499 -54 1499 -142 ct 1499 -211 1452 -266 1341 -326 ct 1252 -375 1216 -412 1216 -458 ct
+1216 -505 1252 -537 1304 -537 ct 1342 -537 1378 -521 1408 -490 ct 1434 -463 1446 -441 1459 -391 ct
+1480 -391 l p ef
+1686 -290 m 1722 -329 1747 -343 1780 -343 ct 1823 -343 1844 -313 1844 -253 ct
+1844 -86 l 1844 -28 1835 -17 1786 -12 ct 1786 0 l 1966 0 l 1966 -12 l
+1920 -21 1915 -27 1915 -86 ct 1915 -254 l 1915 -343 1879 -389 1811 -389 ct
+1761 -389 1725 -368 1686 -318 ct 1686 -575 l 1682 -577 l 1653 -567 1632 -560 1585 -547 ct
+1562 -540 l 1562 -527 l 1565 -527 1568 -527 1572 -527 ct 1608 -527 1615 -521 1615 -484 ct
+1615 -86 l 1615 -27 1610 -19 1561 -12 ct 1561 0 l 1744 0 l 1744 -12 l
+1695 -17 1686 -27 1686 -86 ct p ef
+2382 -42 m 2378 -42 l 2339 -42 2329 -51 2329 -90 ct 2329 -380 l 2196 -380 l
+2196 -366 l 2248 -363 2258 -355 2258 -313 ct 2258 -114 l 2258 -90 2254 -78 2242 -69 ct
+2219 -50 2193 -40 2168 -40 ct 2135 -40 2108 -69 2108 -104 ct 2108 -380 l 1984 -380 l
+1984 -368 l 2025 -366 2037 -353 2037 -314 ct 2037 -101 l 2037 -34 2077 8 2139 8 ct
+2170 8 2203 -5 2226 -27 ct 2262 -64 l 2262 5 l 2266 7 l 2308 -9 2339 -18 2382 -30 ct
+p ef
+2615 -380 m 2530 -380 l 2530 -478 l 2530 -487 2529 -489 2524 -489 ct 2518 -482 2513 -474 2507 -466 ct
+2475 -419 2438 -379 2425 -375 ct 2416 -369 2411 -363 2411 -359 ct 2411 -357 2411 -355 2414 -353 ct
+2459 -353 l 2459 -98 l 2459 -27 2484 8 2534 8 ct 2575 8 2608 -11 2636 -55 ct
+2625 -65 l 2607 -43 2592 -35 2574 -35 ct 2542 -35 2530 -58 2530 -111 ct 2530 -353 l
+2615 -353 l p ef
+2852 -380 m 2767 -380 l 2767 -478 l 2767 -487 2766 -489 2761 -489 ct 2755 -482 2750 -474 2744 -466 ct
+2712 -419 2675 -379 2662 -375 ct 2653 -369 2648 -363 2648 -359 ct 2648 -357 2648 -355 2651 -353 ct
+2696 -353 l 2696 -98 l 2696 -27 2721 8 2771 8 ct 2812 8 2845 -11 2873 -55 ct
+2862 -65 l 2844 -43 2829 -35 2811 -35 ct 2779 -35 2767 -58 2767 -111 ct 2767 -353 l
+2852 -353 l p ef
+2890 -527 m 2895 -527 l 2904 -527 2914 -528 2921 -528 ct 2948 -528 2956 -516 2956 -477 ct
+2956 -73 l 2956 -27 2945 -16 2891 -12 ct 2891 0 l 3091 0 l 3091 -12 l
+3038 -16 3027 -24 3027 -71 ct 3027 -576 l 3024 -577 l 2980 -563 2948 -554 2890 -540 ct
+p ef
+3457 -138 m 3416 -74 3380 -49 3326 -49 ct 3277 -49 3241 -74 3216 -122 ct 3201 -154 3195 -182 3194 -234 ct
+3454 -234 l 3447 -289 3439 -313 3418 -340 ct 3392 -371 3353 -389 3309 -389 ct
+3267 -389 3227 -373 3195 -345 ct 3155 -310 3133 -250 3133 -181 ct 3133 -64 3194 8 3291 8 ct
+3371 8 3435 -41 3470 -132 ct p
+3195 -261 m 3205 -327 3233 -358 3285 -358 ct 3337 -358 3357 -335 3368 -261 ct
+p ef
+4012 -380 m 4004 -571 l 3987 -571 l 3982 -554 3968 -543 3951 -543 ct 3944 -543 3931 -546 3918 -551 ct
+3877 -565 3834 -571 3795 -571 ct 3725 -571 3655 -545 3603 -499 ct 3543 -446 3511 -368 3511 -274 ct
+3511 -196 3537 -123 3580 -75 ct 3630 -20 3708 11 3792 11 ct 3888 11 3971 -27 4023 -95 ct
+4008 -110 l 3945 -50 3889 -25 3819 -25 ct 3766 -25 3718 -42 3682 -74 ct 3636 -115 3609 -192 3609 -285 ct
+3609 -439 3688 -538 3811 -538 ct 3859 -538 3903 -520 3937 -486 ct 3964 -459 3976 -435 3993 -380 ct
+p ef
+4262 -389 m 4152 -389 4075 -307 4075 -191 ct 4075 -76 4154 8 4260 8 ct 4367 8 4448 -81 4448 -197 ct
+4448 -308 l 4370 -389 l p
+4251 -365 m 4322 -365 4372 -284 4372 -168 ct 4372 -72 4334 -15 4270 -15 ct
+4237 -15 4206 -35 4188 -69 ct 4165 -113 4151 -172 4151 -232 ct 4151 -313 l 4191 -365 l
+p ef
+4488 -336 m 4493 -339 4502 -340 4511 -340 ct 4535 -340 4542 -327 4542 -285 ct
+4542 -76 l 4542 -27 4533 -16 4490 -12 ct 4490 0 l 4669 0 l 4669 -12 l
+4626 -16 4613 -26 4613 -56 ct 4613 -294 l 4654 -332 4672 -342 4700 -342 ct
+4742 -342 4762 -316 4762 -260 ct 4762 -83 l 4762 -30 4751 -16 4709 -12 ct 4709 0 l
+4885 0 l 4885 -12 l 4843 -16 4833 -27 4833 -68 ct 4833 -262 l 4833 -341 4796 -389 4733 -389 ct
+4694 -389 4668 -374 4611 -320 ct 4611 -387 l 4605 -389 l 4563 -373 4535 -364 4488 -351 ct
+p ef
+5159 -380 m 5055 -380 l 5055 -478 l 5055 -527 5071 -554 5103 -554 ct 5121 -554 5133 -545 5148 -521 ct
+5161 -499 5172 -490 5186 -490 ct 5205 -490 5222 -505 5222 -525 ct 5222 -555 5184 -577 5134 -577 ct
+5081 -577 5036 -554 5014 -516 ct 4992 -478 4985 -448 4985 -380 ct 4915 -380 l
+4915 -353 l 4985 -353 l 4985 -87 l 4985 -26 4975 -16 4914 -12 ct 4914 0 l
+5134 0 l 5134 -12 l 5065 -15 5056 -24 5056 -87 ct 5056 -353 l 5159 -353 l
+p ef
+5330 -389 m 5198 -342 l 5198 -329 l 5205 -330 l 5215 -332 5226 -333 5234 -333 ct
+5254 -333 5262 -319 5262 -282 ct 5262 -86 l 5262 -25 5253 -16 5195 -12 ct 5195 0 l
+5396 0 l 5396 -12 l 5340 -16 5333 -25 5333 -86 ct 5333 -386 l p
+5290 -577 m 5267 -577 5247 -558 5247 -534 ct 5247 -510 5266 -491 5290 -491 ct
+5314 -491 5334 -510 5334 -534 ct 5334 -558 l 5314 -577 l p ef
+5816 -328 m 5816 -361 l 5751 -361 l 5734 -361 5721 -363 5704 -369 ct 5686 -376 l
+5663 -384 5640 -389 5618 -389 ct 5539 -389 5477 -328 5477 -251 ct 5477 -197 5500 -165 5556 -137 ct
+5539 -122 5524 -108 5519 -104 ct 5491 -79 5480 -62 5480 -45 ct 5480 -27 5490 -17 5525 0 ct
+5465 43 5442 71 5442 102 ct 5442 147 5508 184 5589 184 ct 5652 184 5718 162 5762 126 ct
+5794 100 5809 73 5809 41 ct 5809 -11 5769 -46 5706 -49 ct 5597 -54 l 5552 -55 5531 -63 5531 -76 ct
+5531 -93 5559 -123 5582 -130 ct 5589 -129 5595 -128 5598 -128 ct 5614 -126 5625 -126 5630 -126 ct
+5661 -126 5695 -138 5721 -161 ct 5749 -185 5762 -214 5762 -257 ct 5762 -281 5758 -301 5746 -328 ct
+p
+5543 1 m 5571 7 5638 12 5680 12 ct 5757 12 5785 23 5785 54 ct 5785 103 5721 136 5625 136 ct
+5550 136 5501 111 5501 74 ct 5501 54 l 5507 43 l p
+5547 -285 m 5547 -335 5571 -365 5610 -365 ct 5636 -365 5658 -351 5671 -325 ct
+5687 -296 5697 -257 5697 -224 ct 5697 -176 5672 -147 5633 -147 ct 5583 -147 5547 -202 5547 -283 ct
+p ef
+pom
+gr
+15610 21155 m 15317 20781 l 15152 21031 l 15610 21155 l p ef
+1 lw 0 lj 15309 20956 m 7596 15845 l ps
+15590 24160 m 15745 23711 l 15445 23708 l 15590 24160 l p ef
+15594 23800 m 15610 22425 l ps
+0.003 0.722 1.000 c 4397 9725 m 905 9725 l 905 8455 l 7890 8455 l 7890 9725 l
+4397 9725 l p ef
+0 lw 1 lj 0.003 0.003 0.003 c 4397 9725 m 905 9725 l 905 8455 l 7890 8455 l
+7890 9725 l 4397 9725 l pc
+gs
+pum
+1693 9356 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1608 -380 m 1600 -571 l 1583 -571 l 1578 -554 1564 -543 1547 -543 ct 1540 -543 1527 -546 1514 -551 ct
+1473 -565 1430 -571 1391 -571 ct 1321 -571 1251 -545 1199 -499 ct 1139 -446 1107 -368 1107 -274 ct
+1107 -196 1133 -123 1176 -75 ct 1226 -20 1304 11 1388 11 ct 1484 11 1567 -27 1619 -95 ct
+1604 -110 l 1541 -50 1485 -25 1415 -25 ct 1362 -25 1314 -42 1278 -74 ct 1232 -115 1205 -192 1205 -285 ct
+1205 -439 1284 -538 1407 -538 ct 1455 -538 1499 -520 1533 -486 ct 1560 -459 1572 -435 1589 -380 ct
+p ef
+1734 -92 m 1734 -31 1724 -20 1660 -16 ct 1660 0 l 1900 0 l 1998 0 2087 -27 2140 -75 ct
+2195 -125 2226 -200 2226 -282 ct 2226 -358 2201 -424 2154 -471 ct 2097 -529 2004 -560 1888 -560 ct
+1660 -560 l 1660 -543 l 1727 -538 1734 -530 1734 -467 ct p
+1821 -495 m 1821 -521 1830 -528 1865 -528 ct 1938 -528 1993 -515 2033 -486 ct
+2099 -440 2134 -368 2134 -276 ct 2134 -176 2099 -105 2031 -65 ct 1987 -41 1938 -31 1865 -31 ct
+1831 -31 1821 -38 1821 -65 ct p ef
+2270 -560 m 2270 -543 l 2341 -539 2351 -530 2351 -467 ct 2351 -92 l 2351 -29 2340 -18 2270 -16 ct
+2270 0 l 2552 0 l 2618 0 2679 -17 2710 -46 ct 2740 -73 2757 -111 2757 -152 ct
+2757 -189 2742 -223 2716 -247 ct 2690 -270 2668 -280 2613 -294 ct 2657 -305 2674 -313 2695 -331 ct
+2716 -350 2728 -381 2728 -416 ct 2728 -510 2653 -560 2507 -560 ct p
+2437 -275 m 2519 -275 2558 -271 2589 -258 ct 2637 -238 2660 -204 2660 -151 ct
+2660 -105 2642 -72 2608 -53 ct 2581 -38 2547 -31 2491 -31 ct 2449 -31 2437 -38 2437 -65 ct
+p
+2437 -309 m 2437 -503 l 2437 -521 2443 -528 2456 -528 ct 2493 -528 l 2591 -528 2642 -488 2642 -412 ct
+2642 -346 2597 -309 2518 -309 ct p ef
+3197 -571 m 3179 -571 l 3176 -552 3166 -543 3152 -543 ct 3143 -543 3129 -546 3115 -553 ct
+3083 -565 3052 -571 3025 -571 ct 2989 -571 2951 -557 2923 -532 ct 2894 -506 2879 -471 2879 -427 ct
+2879 -359 2916 -312 3011 -262 ct 3071 -230 3115 -195 3137 -163 ct 3144 -152 3148 -134 3148 -114 ct
+3148 -57 3106 -18 3044 -18 ct 2969 -18 2916 -65 2873 -168 ct 2854 -168 l 2879 11 l
+2898 11 l 2899 -5 2909 -16 2922 -16 ct 2931 -16 2945 -13 2961 -7 ct 2994 5 3027 11 3061 11 ct
+3159 11 3234 -54 3234 -142 ct 3234 -211 3187 -266 3076 -326 ct 2987 -375 2951 -412 2951 -458 ct
+2951 -505 2987 -537 3039 -537 ct 3077 -537 3113 -521 3143 -490 ct 3169 -463 3181 -441 3194 -391 ct
+3215 -391 l p ef
+3504 -380 m 3419 -380 l 3419 -478 l 3419 -487 3418 -489 3413 -489 ct 3407 -482 3402 -474 3396 -466 ct
+3364 -419 3327 -379 3314 -375 ct 3305 -369 3300 -363 3300 -359 ct 3300 -357 3300 -355 3303 -353 ct
+3348 -353 l 3348 -98 l 3348 -27 3373 8 3423 8 ct 3464 8 3497 -11 3525 -55 ct
+3514 -65 l 3496 -43 3481 -35 3463 -35 ct 3431 -35 3419 -58 3419 -111 ct 3419 -353 l
+3504 -353 l p ef
+3737 -389 m 3627 -389 3550 -307 3550 -191 ct 3550 -76 3629 8 3735 8 ct 3842 8 3923 -81 3923 -197 ct
+3923 -308 l 3845 -389 l p
+3726 -365 m 3797 -365 3847 -284 3847 -168 ct 3847 -72 3809 -15 3745 -15 ct
+3712 -15 3681 -35 3663 -69 ct 3640 -113 3626 -172 3626 -232 ct 3626 -313 l 3666 -365 l
+p ef
+3955 -329 m 3967 -332 3975 -333 3985 -333 ct 4006 -333 4014 -319 4014 -282 ct
+4014 -71 l 4014 -28 4008 -22 3954 -12 ct 3954 0 l 4157 0 l 4157 -12 l
+4099 -15 4085 -27 4085 -76 ct 4085 -266 l 4085 -293 4121 -335 4144 -335 ct
+4149 -335 4157 -331 4166 -323 ct 4180 -311 4189 -306 4200 -306 ct 4220 -306 4233 -320 4233 -344 ct
+4233 -372 4215 -389 4186 -389 ct 4151 -389 4126 -369 4085 -309 ct 4085 -387 l
+4081 -389 l 4036 -370 4005 -359 3955 -343 ct p ef
+4606 -55 m 4592 -43 4582 -39 4569 -39 ct 4550 -39 4544 -51 4544 -88 ct 4544 -253 l
+4544 -297 4540 -322 4527 -342 ct 4508 -373 4472 -389 4422 -389 ct 4342 -389 4280 -347 4280 -294 ct
+4280 -274 4297 -258 4316 -258 ct 4337 -258 4354 -274 4354 -293 ct 4354 -296 4353 -301 4353 -307 ct
+4351 -314 4350 -321 4350 -327 ct 4350 -350 4377 -368 4411 -368 ct 4452 -368 4475 -344 4475 -298 ct
+4475 -247 l 4345 -194 4331 -187 4294 -155 ct 4276 -138 4264 -109 4264 -82 ct
+4264 -28 4301 8 4353 8 ct 4390 8 4425 -9 4476 -53 ct 4480 -9 4496 8 4530 8 ct 4559 8 4577 -1 4606 -33 ct
+p
+4475 -104 m 4475 -77 4471 -70 4453 -60 ct 4433 -48 4409 -40 4392 -40 ct 4362 -40 4338 -69 4338 -105 ct
+4338 -109 l 4338 -159 4373 -189 4475 -226 ct p ef
+5007 -328 m 5007 -361 l 4942 -361 l 4925 -361 4912 -363 4895 -369 ct 4877 -376 l
+4854 -384 4831 -389 4809 -389 ct 4730 -389 4668 -328 4668 -251 ct 4668 -197 4691 -165 4747 -137 ct
+4730 -122 4715 -108 4710 -104 ct 4682 -79 4671 -62 4671 -45 ct 4671 -27 4681 -17 4716 0 ct
+4656 43 4633 71 4633 102 ct 4633 147 4699 184 4780 184 ct 4843 184 4909 162 4953 126 ct
+4985 100 5000 73 5000 41 ct 5000 -11 4960 -46 4897 -49 ct 4788 -54 l 4743 -55 4722 -63 4722 -76 ct
+4722 -93 4750 -123 4773 -130 ct 4780 -129 4786 -128 4789 -128 ct 4805 -126 4816 -126 4821 -126 ct
+4852 -126 4886 -138 4912 -161 ct 4940 -185 4953 -214 4953 -257 ct 4953 -281 4949 -301 4937 -328 ct
+p
+4734 1 m 4762 7 4829 12 4871 12 ct 4948 12 4976 23 4976 54 ct 4976 103 4912 136 4816 136 ct
+4741 136 4692 111 4692 74 ct 4692 54 l 4698 43 l p
+4738 -285 m 4738 -335 4762 -365 4801 -365 ct 4827 -365 4849 -351 4862 -325 ct
+4878 -296 4888 -257 4888 -224 ct 4888 -176 4863 -147 4824 -147 ct 4774 -147 4738 -202 4738 -283 ct
+p ef
+5378 -138 m 5337 -74 5301 -49 5247 -49 ct 5198 -49 5162 -74 5137 -122 ct 5122 -154 5116 -182 5115 -234 ct
+5375 -234 l 5368 -289 5360 -313 5339 -340 ct 5313 -371 5274 -389 5230 -389 ct
+5188 -389 5148 -373 5116 -345 ct 5076 -310 5054 -250 5054 -181 ct 5054 -64 5115 8 5212 8 ct
+5292 8 5356 -41 5391 -132 ct p
+5116 -261 m 5126 -327 5154 -358 5206 -358 ct 5258 -358 5278 -335 5289 -261 ct
+p ef
+pom
+gr
+4397 9725 m 4247 10175 l 4547 10174 l 4397 9725 l p ef
+1 lw 0 lj 4397 10085 m 4397 15225 l 5033 15225 l ps
+0.242 0.921 0.242 c 2357 5385 m 1480 5385 769 4958 769 4432 ct 769 3906 1480 3479 2357 3479 ct
+3234 3479 3945 3906 3945 4432 ct 3945 4958 3234 5385 2357 5385 ct 2357 5385 l
+p ef
+0 lw 1 lj 0.003 0.003 0.003 c 2357 5385 m 1480 5385 769 4958 769 4432 ct 769 3906 1480 3479 2357 3479 ct
+3234 3479 3945 3906 3945 4432 ct 3945 4958 3234 5385 2357 5385 ct 2357 5385 l
+pc
+gs
+pum
+1323 4699 t
+599 -299 m 384 -299 l 384 -284 l 420 -281 430 -279 440 -272 ct 453 -264 458 -245 458 -208 ct
+458 -71 l 458 -44 406 -22 346 -22 ct 208 -22 123 -118 123 -275 ct 123 -355 147 -432 184 -473 ct
+221 -515 274 -538 331 -538 ct 379 -538 420 -521 453 -491 ct 478 -467 492 -445 513 -393 ct
+532 -393 l 526 -571 l 507 -571 l 502 -555 487 -543 469 -543 ct 461 -543 447 -546 432 -552 ct
+394 -565 355 -571 317 -571 ct 148 -571 27 -447 27 -274 ct 27 -192 49 -128 97 -78 ct
+153 -20 235 11 328 11 ct 401 11 506 -17 540 -47 ct 540 -219 l 540 -269 550 -280 599 -284 ct
+p ef
+1167 -16 m 1135 -18 1118 -27 1093 -55 ct 919 -269 l 976 -280 1001 -291 1029 -313 ct
+1056 -335 1072 -371 1072 -411 ct 1072 -447 1061 -478 1039 -503 ct 1007 -538 937 -560 857 -560 ct
+624 -560 l 624 -543 l 687 -537 696 -527 696 -467 ct 696 -101 l 696 -31 687 -21 624 -16 ct
+624 0 l 858 0 l 858 -16 l 793 -20 782 -31 782 -92 ct 782 -258 l 829 -260 l
+1031 0 l 1167 0 l p
+782 -498 m 782 -521 791 -528 825 -528 ct 931 -528 980 -492 980 -412 ct 980 -370 962 -335 932 -318 ct
+893 -296 863 -291 782 -290 ct p ef
+1270 -92 m 1270 -28 1259 -18 1188 -16 ct 1188 0 l 1439 0 l 1439 -16 l
+1370 -18 1356 -30 1356 -92 ct 1356 -467 l 1356 -529 1368 -540 1439 -543 ct
+1439 -560 l 1188 -560 l 1188 -543 l 1260 -539 1270 -530 1270 -467 ct p ef
+1543 -92 m 1543 -31 1533 -20 1469 -16 ct 1469 0 l 1709 0 l 1807 0 1896 -27 1949 -75 ct
+2004 -125 2035 -200 2035 -282 ct 2035 -358 2010 -424 1963 -471 ct 1906 -529 1813 -560 1697 -560 ct
+1469 -560 l 1469 -543 l 1536 -538 1543 -530 1543 -467 ct p
+1630 -495 m 1630 -521 1639 -528 1674 -528 ct 1747 -528 1802 -515 1842 -486 ct
+1908 -440 1943 -368 1943 -276 ct 1943 -176 1908 -105 1840 -65 ct 1796 -41 1747 -31 1674 -31 ct
+1640 -31 1630 -38 1630 -65 ct p ef
+pom
+gr
+0.242 0.921 0.242 c 7167 5385 m 6290 5385 5579 4958 5579 4432 ct 5579 3906 6290 3479 7167 3479 ct
+8044 3479 8755 3906 8755 4432 ct 8755 4958 8044 5385 7167 5385 ct 7167 5385 l
+p ef
+0.003 0.003 0.003 c 7167 5385 m 6290 5385 5579 4958 5579 4432 ct 5579 3906 6290 3479 7167 3479 ct
+8044 3479 8755 3906 8755 4432 ct 8755 4958 8044 5385 7167 5385 ct 7167 5385 l
+pc
+gs
+pum
+6191 4699 t
+484 -147 m 470 -115 458 -95 445 -81 ct 416 -48 369 -33 299 -33 ct 242 -33 l
+181 -33 170 -38 170 -67 ct 170 -467 l 170 -527 181 -539 248 -543 ct 248 -560 l
+10 -560 l 10 -543 l 72 -538 83 -527 83 -467 ct 83 -92 l 83 -33 71 -20 10 -16 ct
+10 0 l 465 0 l 505 -147 l p ef
+727 -389 m 617 -389 540 -307 540 -191 ct 540 -76 619 8 725 8 ct 832 8 913 -81 913 -197 ct
+913 -308 l 835 -389 l p
+716 -365 m 787 -365 837 -284 837 -168 ct 837 -72 799 -15 735 -15 ct 702 -15 671 -35 653 -69 ct
+630 -113 616 -172 616 -232 ct 616 -313 l 656 -365 l p ef
+1276 -131 m 1236 -72 1205 -52 1157 -52 ct 1080 -52 1026 -120 1026 -217 ct 1026 -304 1072 -364 1141 -364 ct
+1171 -364 1182 -355 1191 -324 ct 1196 -305 l 1203 -281 1218 -266 1236 -266 ct
+1258 -266 1276 -282 1276 -302 ct 1276 -349 1217 -389 1146 -389 ct 1104 -389 1061 -372 1027 -341 ct
+984 -304 961 -247 961 -180 ct 961 -70 1027 8 1121 8 ct 1159 8 1193 -5 1224 -31 ct
+1247 -51 1263 -74 1288 -124 ct p ef
+1690 -55 m 1676 -43 1666 -39 1653 -39 ct 1634 -39 1628 -51 1628 -88 ct 1628 -253 l
+1628 -297 1624 -322 1611 -342 ct 1592 -373 1556 -389 1506 -389 ct 1426 -389 1364 -347 1364 -294 ct
+1364 -274 1381 -258 1400 -258 ct 1421 -258 1438 -274 1438 -293 ct 1438 -296 1437 -301 1437 -307 ct
+1435 -314 1434 -321 1434 -327 ct 1434 -350 1461 -368 1495 -368 ct 1536 -368 1559 -344 1559 -298 ct
+1559 -247 l 1429 -194 1415 -187 1378 -155 ct 1360 -138 1348 -109 1348 -82 ct
+1348 -28 1385 8 1437 8 ct 1474 8 1509 -9 1560 -53 ct 1564 -9 1580 8 1614 8 ct 1643 8 1661 -1 1690 -33 ct
+p
+1559 -104 m 1559 -77 1555 -70 1537 -60 ct 1517 -48 1493 -40 1476 -40 ct 1446 -40 1422 -69 1422 -105 ct
+1422 -109 l 1422 -159 1457 -189 1559 -226 ct p ef
+1709 -527 m 1714 -527 l 1723 -527 1733 -528 1740 -528 ct 1767 -528 1775 -516 1775 -477 ct
+1775 -73 l 1775 -27 1764 -16 1710 -12 ct 1710 0 l 1910 0 l 1910 -12 l
+1857 -16 1846 -24 1846 -71 ct 1846 -576 l 1843 -577 l 1799 -563 1767 -554 1709 -540 ct
+p ef
+pom
+gr
+2357 5385 m 2207 5835 l 2507 5834 l 2357 5385 l p ef
+1 lw 0 lj 2357 5745 m 2357 6920 l 4397 6920 l 4397 8455 l ps
+7167 5385 m 7017 5835 l 7317 5834 l 7167 5385 l p ef
+7167 5745 m 7167 6920 l 4397 6920 l 4397 8455 l ps
+0.003 0.722 1.000 c 4897 22225 m 1405 22225 l 1405 20955 l 8390 20955 l
+8390 22225 l 4897 22225 l p ef
+0 lw 1 lj 0.003 0.003 0.003 c 4897 22225 m 1405 22225 l 1405 20955 l 8390 20955 l
+8390 22225 l 4897 22225 l pc
+gs
+pum
+1879 21870 t
+597 -16 m 559 -18 550 -27 521 -89 ct 310 -570 l 293 -570 l 117 -154 l
+63 -31 53 -17 12 -16 ct 12 0 l 180 0 l 180 -16 l 139 -16 122 -27 122 -50 ct
+122 -60 125 -72 129 -83 ct 168 -182 l 390 -182 l 424 -101 l 434 -78 440 -56 440 -44 ct
+440 -23 426 -16 381 -16 ct 381 0 l 597 0 l p
+182 -217 m 280 -450 l 378 -217 l p ef
+626 -527 m 631 -527 l 640 -527 650 -528 657 -528 ct 684 -528 692 -516 692 -477 ct
+692 -73 l 692 -27 681 -16 627 -12 ct 627 0 l 827 0 l 827 -12 l 774 -16 763 -24 763 -71 ct
+763 -576 l 760 -577 l 716 -563 684 -554 626 -540 ct p ef
+995 -389 m 863 -342 l 863 -329 l 870 -330 l 880 -332 891 -333 899 -333 ct
+919 -333 927 -319 927 -282 ct 927 -86 l 927 -25 918 -16 860 -12 ct 860 0 l
+1061 0 l 1061 -12 l 1005 -16 998 -25 998 -86 ct 998 -386 l p
+955 -577 m 932 -577 912 -558 912 -534 ct 912 -510 931 -491 955 -491 ct 979 -491 999 -510 999 -534 ct
+999 -558 l 979 -577 l p ef
+1462 -571 m 1444 -571 l 1441 -552 1431 -543 1417 -543 ct 1408 -543 1394 -546 1380 -553 ct
+1348 -565 1317 -571 1290 -571 ct 1254 -571 1216 -557 1188 -532 ct 1159 -506 1144 -471 1144 -427 ct
+1144 -359 1181 -312 1276 -262 ct 1336 -230 1380 -195 1402 -163 ct 1409 -152 1413 -134 1413 -114 ct
+1413 -57 1371 -18 1309 -18 ct 1234 -18 1181 -65 1138 -168 ct 1119 -168 l 1144 11 l
+1163 11 l 1164 -5 1174 -16 1187 -16 ct 1196 -16 1210 -13 1226 -7 ct 1259 5 1292 11 1326 11 ct
+1424 11 1499 -54 1499 -142 ct 1499 -211 1452 -266 1341 -326 ct 1252 -375 1216 -412 1216 -458 ct
+1216 -505 1252 -537 1304 -537 ct 1342 -537 1378 -521 1408 -490 ct 1434 -463 1446 -441 1459 -391 ct
+1480 -391 l p ef
+1686 -290 m 1722 -329 1747 -343 1780 -343 ct 1823 -343 1844 -313 1844 -253 ct
+1844 -86 l 1844 -28 1835 -17 1786 -12 ct 1786 0 l 1966 0 l 1966 -12 l
+1920 -21 1915 -27 1915 -86 ct 1915 -254 l 1915 -343 1879 -389 1811 -389 ct
+1761 -389 1725 -368 1686 -318 ct 1686 -575 l 1682 -577 l 1653 -567 1632 -560 1585 -547 ct
+1562 -540 l 1562 -527 l 1565 -527 1568 -527 1572 -527 ct 1608 -527 1615 -521 1615 -484 ct
+1615 -86 l 1615 -27 1610 -19 1561 -12 ct 1561 0 l 1744 0 l 1744 -12 l
+1695 -17 1686 -27 1686 -86 ct p ef
+2382 -42 m 2378 -42 l 2339 -42 2329 -51 2329 -90 ct 2329 -380 l 2196 -380 l
+2196 -366 l 2248 -363 2258 -355 2258 -313 ct 2258 -114 l 2258 -90 2254 -78 2242 -69 ct
+2219 -50 2193 -40 2168 -40 ct 2135 -40 2108 -69 2108 -104 ct 2108 -380 l 1984 -380 l
+1984 -368 l 2025 -366 2037 -353 2037 -314 ct 2037 -101 l 2037 -34 2077 8 2139 8 ct
+2170 8 2203 -5 2226 -27 ct 2262 -64 l 2262 5 l 2266 7 l 2308 -9 2339 -18 2382 -30 ct
+p ef
+2615 -380 m 2530 -380 l 2530 -478 l 2530 -487 2529 -489 2524 -489 ct 2518 -482 2513 -474 2507 -466 ct
+2475 -419 2438 -379 2425 -375 ct 2416 -369 2411 -363 2411 -359 ct 2411 -357 2411 -355 2414 -353 ct
+2459 -353 l 2459 -98 l 2459 -27 2484 8 2534 8 ct 2575 8 2608 -11 2636 -55 ct
+2625 -65 l 2607 -43 2592 -35 2574 -35 ct 2542 -35 2530 -58 2530 -111 ct 2530 -353 l
+2615 -353 l p ef
+2852 -380 m 2767 -380 l 2767 -478 l 2767 -487 2766 -489 2761 -489 ct 2755 -482 2750 -474 2744 -466 ct
+2712 -419 2675 -379 2662 -375 ct 2653 -369 2648 -363 2648 -359 ct 2648 -357 2648 -355 2651 -353 ct
+2696 -353 l 2696 -98 l 2696 -27 2721 8 2771 8 ct 2812 8 2845 -11 2873 -55 ct
+2862 -65 l 2844 -43 2829 -35 2811 -35 ct 2779 -35 2767 -58 2767 -111 ct 2767 -353 l
+2852 -353 l p ef
+2890 -527 m 2895 -527 l 2904 -527 2914 -528 2921 -528 ct 2948 -528 2956 -516 2956 -477 ct
+2956 -73 l 2956 -27 2945 -16 2891 -12 ct 2891 0 l 3091 0 l 3091 -12 l
+3038 -16 3027 -24 3027 -71 ct 3027 -576 l 3024 -577 l 2980 -563 2948 -554 2890 -540 ct
+p ef
+3457 -138 m 3416 -74 3380 -49 3326 -49 ct 3277 -49 3241 -74 3216 -122 ct 3201 -154 3195 -182 3194 -234 ct
+3454 -234 l 3447 -289 3439 -313 3418 -340 ct 3392 -371 3353 -389 3309 -389 ct
+3267 -389 3227 -373 3195 -345 ct 3155 -310 3133 -250 3133 -181 ct 3133 -64 3194 8 3291 8 ct
+3371 8 3435 -41 3470 -132 ct p
+3195 -261 m 3205 -327 3233 -358 3285 -358 ct 3337 -358 3357 -335 3368 -261 ct
+p ef
+3702 -524 m 3702 -101 l 3702 -29 3693 -20 3623 -16 ct 3623 0 l 3870 0 l
+3870 -16 l 3801 -19 3789 -30 3789 -92 ct 3789 -524 l 3834 -524 l 3931 -524 3949 -509 3969 -416 ct
+3989 -416 l 3984 -560 l 3507 -560 l 3502 -416 l 3522 -416 l 3542 -508 3562 -524 3657 -524 ct
+p ef
+4010 -329 m 4022 -332 4030 -333 4040 -333 ct 4061 -333 4069 -319 4069 -282 ct
+4069 -71 l 4069 -28 4063 -22 4009 -12 ct 4009 0 l 4212 0 l 4212 -12 l
+4154 -15 4140 -27 4140 -76 ct 4140 -266 l 4140 -293 4176 -335 4199 -335 ct
+4204 -335 4212 -331 4221 -323 ct 4235 -311 4244 -306 4255 -306 ct 4275 -306 4288 -320 4288 -344 ct
+4288 -372 4270 -389 4241 -389 ct 4206 -389 4181 -369 4140 -309 ct 4140 -387 l
+4136 -389 l 4091 -370 4060 -359 4010 -343 ct p ef
+4436 -389 m 4304 -342 l 4304 -329 l 4311 -330 l 4321 -332 4332 -333 4340 -333 ct
+4360 -333 4368 -319 4368 -282 ct 4368 -86 l 4368 -25 4359 -16 4301 -12 ct 4301 0 l
+4502 0 l 4502 -12 l 4446 -16 4439 -25 4439 -86 ct 4439 -386 l p
+4396 -577 m 4373 -577 4353 -558 4353 -534 ct 4353 -510 4372 -491 4396 -491 ct
+4420 -491 4440 -510 4440 -534 ct 4440 -558 l 4420 -577 l p ef
+4922 -328 m 4922 -361 l 4857 -361 l 4840 -361 4827 -363 4810 -369 ct 4792 -376 l
+4769 -384 4746 -389 4724 -389 ct 4645 -389 4583 -328 4583 -251 ct 4583 -197 4606 -165 4662 -137 ct
+4645 -122 4630 -108 4625 -104 ct 4597 -79 4586 -62 4586 -45 ct 4586 -27 4596 -17 4631 0 ct
+4571 43 4548 71 4548 102 ct 4548 147 4614 184 4695 184 ct 4758 184 4824 162 4868 126 ct
+4900 100 4915 73 4915 41 ct 4915 -11 4875 -46 4812 -49 ct 4703 -54 l 4658 -55 4637 -63 4637 -76 ct
+4637 -93 4665 -123 4688 -130 ct 4695 -129 4701 -128 4704 -128 ct 4720 -126 4731 -126 4736 -126 ct
+4767 -126 4801 -138 4827 -161 ct 4855 -185 4868 -214 4868 -257 ct 4868 -281 4864 -301 4852 -328 ct
+p
+4649 1 m 4677 7 4744 12 4786 12 ct 4863 12 4891 23 4891 54 ct 4891 103 4827 136 4731 136 ct
+4656 136 4607 111 4607 74 ct 4607 54 l 4613 43 l p
+4653 -285 m 4653 -335 4677 -365 4716 -365 ct 4742 -365 4764 -351 4777 -325 ct
+4793 -296 4803 -257 4803 -224 ct 4803 -176 4778 -147 4739 -147 ct 4689 -147 4653 -202 4653 -283 ct
+p ef
+5346 -328 m 5346 -361 l 5281 -361 l 5264 -361 5251 -363 5234 -369 ct 5216 -376 l
+5193 -384 5170 -389 5148 -389 ct 5069 -389 5007 -328 5007 -251 ct 5007 -197 5030 -165 5086 -137 ct
+5069 -122 5054 -108 5049 -104 ct 5021 -79 5010 -62 5010 -45 ct 5010 -27 5020 -17 5055 0 ct
+4995 43 4972 71 4972 102 ct 4972 147 5038 184 5119 184 ct 5182 184 5248 162 5292 126 ct
+5324 100 5339 73 5339 41 ct 5339 -11 5299 -46 5236 -49 ct 5127 -54 l 5082 -55 5061 -63 5061 -76 ct
+5061 -93 5089 -123 5112 -130 ct 5119 -129 5125 -128 5128 -128 ct 5144 -126 5155 -126 5160 -126 ct
+5191 -126 5225 -138 5251 -161 ct 5279 -185 5292 -214 5292 -257 ct 5292 -281 5288 -301 5276 -328 ct
+p
+5073 1 m 5101 7 5168 12 5210 12 ct 5287 12 5315 23 5315 54 ct 5315 103 5251 136 5155 136 ct
+5080 136 5031 111 5031 74 ct 5031 54 l 5037 43 l p
+5077 -285 m 5077 -335 5101 -365 5140 -365 ct 5166 -365 5188 -351 5201 -325 ct
+5217 -296 5227 -257 5227 -224 ct 5227 -176 5202 -147 5163 -147 ct 5113 -147 5077 -202 5077 -283 ct
+p ef
+5717 -138 m 5676 -74 5640 -49 5586 -49 ct 5537 -49 5501 -74 5476 -122 ct 5461 -154 5455 -182 5454 -234 ct
+5714 -234 l 5707 -289 5699 -313 5678 -340 ct 5652 -371 5613 -389 5569 -389 ct
+5527 -389 5487 -373 5455 -345 ct 5415 -310 5393 -250 5393 -181 ct 5393 -64 5454 8 5551 8 ct
+5631 8 5695 -41 5730 -132 ct p
+5455 -261 m 5465 -327 5493 -358 5545 -358 ct 5597 -358 5617 -335 5628 -261 ct
+p ef
+5754 -329 m 5766 -332 5774 -333 5784 -333 ct 5805 -333 5813 -319 5813 -282 ct
+5813 -71 l 5813 -28 5807 -22 5753 -12 ct 5753 0 l 5956 0 l 5956 -12 l
+5898 -15 5884 -27 5884 -76 ct 5884 -266 l 5884 -293 5920 -335 5943 -335 ct
+5948 -335 5956 -331 5965 -323 ct 5979 -311 5988 -306 5999 -306 ct 6019 -306 6032 -320 6032 -344 ct
+6032 -372 6014 -389 5985 -389 ct 5950 -389 5925 -369 5884 -309 ct 5884 -387 l
+5880 -389 l 5835 -370 5804 -359 5754 -343 ct p ef
+pom
+gr
+1.000 1.000 0.003 c 4827 26370 m 2605 26370 l 2605 23830 l 7050 23830 l
+7050 26370 l 4827 26370 l p ef
+0.003 0.003 0.003 c 4827 26370 m 2605 26370 l 2605 23830 l 7050 23830 l
+7050 26370 l 4827 26370 l pc
+gs
+pum
+3916 25363 t
+87 -92 m 87 -31 77 -20 13 -16 ct 13 0 l 253 0 l 351 0 440 -27 493 -75 ct
+548 -125 579 -200 579 -282 ct 579 -358 554 -424 507 -471 ct 450 -529 357 -560 241 -560 ct
+13 -560 l 13 -543 l 80 -538 87 -530 87 -467 ct p
+174 -495 m 174 -521 183 -528 218 -528 ct 291 -528 346 -515 386 -486 ct 452 -440 487 -368 487 -276 ct
+487 -176 452 -105 384 -65 ct 340 -41 291 -31 218 -31 ct 184 -31 174 -38 174 -65 ct
+p ef
+1207 -16 m 1169 -18 1160 -27 1131 -89 ct 920 -570 l 903 -570 l 727 -154 l
+673 -31 663 -17 622 -16 ct 622 0 l 790 0 l 790 -16 l 749 -16 732 -27 732 -50 ct
+732 -60 735 -72 739 -83 ct 778 -182 l 1000 -182 l 1034 -101 l 1044 -78 1050 -56 1050 -44 ct
+1050 -23 1036 -16 991 -16 ct 991 0 l 1207 0 l p
+792 -217 m 890 -450 l 988 -217 l p ef
+1812 134 m 1715 131 1647 94 1579 5 ct 1636 -5 1667 -19 1706 -53 ct 1768 -109 1801 -186 1801 -280 ct
+1801 -450 1685 -571 1524 -571 ct 1362 -571 1247 -450 1247 -278 ct 1247 -195 1273 -126 1323 -71 ct
+1356 -36 1383 -19 1443 0 ct 1482 47 l 1540 114 1642 150 1777 150 ct 1790 150 1797 150 1806 149 ct
+1812 149 l p
+1526 -541 m 1563 -541 1602 -525 1631 -499 ct 1677 -458 1704 -377 1704 -281 ct
+1704 -197 1680 -111 1646 -72 ct 1614 -38 1570 -18 1524 -18 ct 1483 -18 1446 -33 1416 -60 ct
+1371 -99 1344 -184 1344 -283 ct 1344 -364 1368 -447 1403 -486 ct 1438 -523 l
+1477 -541 l p ef
+pom
+gr
+4827 23830 m 4976 23379 l 4676 23380 l 4827 23830 l p ef
+1 lw 0 lj 4827 23470 m 4827 23028 l 4897 23028 l 4897 22225 l ps
+7596 15845 m 7446 16295 l 7746 16294 l 7596 15845 l p ef
+7596 16205 m 7596 18400 l 4897 18400 l 4897 20955 l ps
+gr
+0 26640 t
+pom
+count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_inc_state restore
+%%PageTrailer
+%%Trailer
+%%EOF
--- /dev/null
+SRCS = AliSimpleValue.cxx AliDCSValue.cxx AliDCSMessage.cxx\
+ AliDCSClient.cxx AliShuttle.cxx AliShuttleConfig.cxx\
+ AliCDBPreProcessor.cxx
+
+HDRS:= $(SRCS:.cxx=.h)
+
+DHDR= SHUTTLELinkDef.h
+
+
+EXPORT:= AliSimpleValue.h AliDCSValue.h AliDCSClient.h\
+ AliShuttle.h AliShuttleConfig.h AliCDBPreProcessor.h
+
--- /dev/null
+#ITS config
+dn: dt=ITS,dc=alice,dc=cern,dc=ch
+objectClass: shuttleConfig
+dt: ITS
+ipHost: 192.168.39.23
+ipServicePort: 4242
+alias: HighVol01
+alias: HighVol07
+
--- /dev/null
+#PHOS config
+dn: dt=PHOS,dc=alice,dc=cern,dc=ch
+objectClass: shuttleConfig
+dt: PHOS
+ipHost: 192.168.39.23
+ipServicePort: 4242
+alias: temperature
+alias: pressure
+