--- a/trunk/mqttsparkplugb/mqttsparkplugb/SparkplugB/Function Blocks/FB_Payload/FB_PayloadMetric/svnobj
+++ b/trunk/mqttsparkplugb/mqttsparkplugb/SparkplugB/Function Blocks/FB_Payload/FB_PayloadMetric/svnobj
@@ -1,6 +1,6 @@
-Gx_l†Ä!0…jüoÙŽÊŠjj…5BÏ®hSystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
-TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagTextä(* This is an FB and not a struct, because it may be possible for a payload to partially or fully encode itself *)&//This IF statementFIF xDecode AND xEncode THEN //ERROR(	xDecodeDone:=FALSE;(	xDecodeBusy:=FALSE;(	xDecodeError:=TRUE;d	eDecodeError := ERROR.PayloadYouCantDoBothAtOnce;(	xEncodeDone:=FALSE;(	xEncodeBusy:=FALSE;(	xEncodeError:=TRUE;d	eEncodeError := ERROR.PayloadYouCantDoBothAtOnce;ˆELSIF NOT xDecode AND NOT xEncode THEN //DO NOTHING, ALL OUTPUTS OFF*	xDecodeError:=FALSE;@	eDecodeError := ERROR.NO_ERROR;*	xEncodeError:=FALSE;@	eEncodeError := ERROR.NO_ERROR; VELSIF xDecode AND NOT xEncode THEN //Decode!&	xDecodeBusy:=TRUE;"VELSIF NOT xDecode AND xEncode THEN //Encode#&	xEncodeBusy:=TRUE;$END_IF%&&IF xDecodeBusy THEN'.	InitializeStructure();(	)l	eDecodeState := PayloadDecodeStates.object_getlength;* 	//decode length+š	dviTemp := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varint,B	lengthOfMetric := dviTemp.int32;-l	finalByteIndex := ProtobufBlobIndex + lengthOfMetric;.T	ProtobufBlobIndex := ProtobufBlobIndex+1;/l	eDecodeState := PayloadDecodeStates.object_getmember;04	//for i to i + length - 11€	FOR ProtobufBlobIndex := ProtobufBlobIndex TO finalByteIndex DO2,		CASE eDecodeState OF3N		PayloadDecodeStates.object_getmember:4X			CASE myProtobufBlob[ProtobufBlobIndex] OF5V			16#00://end of data? padding byte? ERROR62				xDecodeError := TRUE;7R				eDecodeError := ERROR.PayloadFound00;8‚				ProtobufBlobIndex := protobufBlobMaxIndex; //break out of FOR98			ProtobufedId.Metric_name::p				eDecodeState := PayloadDecodeStates.object_getname; ;:			ProtobufedId.Metric_alias:<p				eDecodeState := PayloadDecodeStates.object_getalias;=B			ProtobufedId.Metric_timestamp:>z				eDecodeState := PayloadDecodeStates.object_gettimestamp; ?@			ProtobufedId.Metric_datatype:@n				eDecodeState := PayloadDecodeStates.object_gettype;AJ			ProtobufedId.Metric_is_historical:B€				eDecodeState := PayloadDecodeStates.object_getis_historical;CH			ProtobufedId.Metric_is_transient:D~				eDecodeState := PayloadDecodeStates.object_getis_transient;E>			ProtobufedId.Metric_is_null:Ft				eDecodeState := PayloadDecodeStates.object_getis_null;G@			ProtobufedId.Metric_metadata:H„				eDecodeState := PayloadDecodeStates.object_getmetadata_length;ID			ProtobufedId.Metric_properties:JR				eDecodeError := ERROR.Notimplemented;KB			ProtobufedId.Metric_int_value:Lx				eDecodeState := PayloadDecodeStates.object_getint_value;MD			ProtobufedId.Metric_long_value:Nz				eDecodeState := PayloadDecodeStates.object_getlong_value;OF			ProtobufedId.Metric_float_value:P|				eDecodeState := PayloadDecodeStates.object_getfloat_value;QH			ProtobufedId.Metric_double_value:R~				eDecodeState := PayloadDecodeStates.object_getdouble_value;SJ			ProtobufedId.Metric_boolean_value:T€				eDecodeState := PayloadDecodeStates.object_getboolean_value;UH			ProtobufedId.Metric_string_value:V~				eDecodeState := PayloadDecodeStates.object_getstring_value;WL			ProtobufedId.Metric_bytes_value[0]:XP			ProtobufedId.Metric_dataset_value[0]:YR			ProtobufedId.Metric_template_value[0]:ZT			ProtobufedId.Metric_extension_value[0]:[b				eDecodeError := ERROR.PayloadFoundExtensions;\:			ELSE  //extension... error]			END_CASE^L		PayloadDecodeStates.object_getname :_*			_xHasName := TRUE;`”			_sname := OwnerPayload.DecodeNextString(); //updates i to end of stringap			eDecodeState := PayloadDecodeStates.object_getmember;bN		PayloadDecodeStates.object_getalias :c,			_xHasAlias := TRUE;dž			dviTemp := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varinte>			_uliAlias := dviTemp.Uint64;fV		PayloadDecodeStates.object_gettimestamp :g4			_xHasTimeStamp := TRUE;hP			_uliTimestamp := dviTemp.uliDateTime;iL		PayloadDecodeStates.object_gettype :j2			_xHasDatatype := TRUE;kD			_udiDatatype := dviTemp.UInt32;lV		PayloadDecodeStates.object_getint_value :m^			_eHasValue := MetricProtobufsType.int_value;n¤			_dzzValue  := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varintoX		PayloadDecodeStates.object_getlong_value :p`			_eHasValue := MetricProtobufsType.long_value;qZ		PayloadDecodeStates.object_getfloat_value :rb			_eHasValue := MetricProtobufsType.float_value;sž			_rValue  := OwnerPayload.DecodeNextFloat(); //updates i to end of the varintt\		PayloadDecodeStates.object_getdouble_value :ud			_eHasValue := MetricProtobufsType.double_value;v¢			_lrValue  := OwnerPayload.DecodeNextDouble(); //updates i to end of the varintw^		PayloadDecodeStates.object_getboolean_value :xf			_eHasValue := MetricProtobufsType.boolean_value;y\		PayloadDecodeStates.object_getstring_value :zd			_eHasValue := MetricProtobufsType.string_value;{ 			_sValue  := OwnerPayload.DecodeNextString(); //updates i to end of the string|`		PayloadDecodeStates.object_getis_historical : }N            _xHasIs_historical := TRUE;~²            dviTemp := OwnerPayload.DecodeNextVarInt();  //updates i to end of the varint^            _xIs_historical := dviTemp.Boolean;€‚            eDecodeState := PayloadDecodeStates.object_getmember;^		PayloadDecodeStates.object_getis_transient : ‚L            _xHasIs_transient := TRUE;ƒ\            _xIs_transient := dviTemp.Boolean;„`        PayloadDecodeStates.object_getis_null : …B            _xHasIs_null := TRUE;†R            _xIs_null := dviTemp.Boolean;‡b		PayloadDecodeStates.object_getmetadata_length :ˆN			_myHasMetaData.xHasMetaData := TRUE;‰ 			dviTemp := OwnerPayload.DecodeNextVarInt();  //updates i to end of the varintŠt			_metadataendindex := dviTemp.Int32 + ProtobufBlobIndex;‹`			IF ProtobufBlobIndex < _metadataendindex THENŒ„				eDecodeState := PayloadDecodeStates.object_getmetadata_member;			ELSEŽr				eDecodeState := PayloadDecodeStates.object_getmember;			END_IFb		PayloadDecodeStates.object_getmetadata_member :‘R			ProtobufedId.MetaData_is_multi_part : ’’				eDecodeState := PayloadDecodeStates.object_getMetaData_is_multi_part;“P			ProtobufedId.MetaData_content_type  :”				eDecodeState := PayloadDecodeStates.object_getMetaData_content_type;•P			ProtobufedId.MetaData_size          :–€				eDecodeState := PayloadDecodeStates.object_getMetaData_size;—P			ProtobufedId.MetaData_seq           :˜~				eDecodeState := PayloadDecodeStates.object_getMetaData_seq;™R			ProtobufedId.MetaData_file_name     : šŠ				eDecodeState := PayloadDecodeStates.object_getMetaData_file_name;›R			ProtobufedId.MetaData_file_type     : œŠ				eDecodeState := PayloadDecodeStates.object_getMetaData_file_type;R			ProtobufedId.MetaData_md5           : ž~				eDecodeState := PayloadDecodeStates.object_getMetaData_md5;ŸR			ProtobufedId.MetaData_description   :  Ž				eDecodeState := PayloadDecodeStates.object_getMetaData_description;¡p		PayloadDecodeStates.object_getMetaData_is_multi_part :¢X			_myHasMetaData.xHasIs_multi_part := TRUE;£r            _myMetaData.is_multi_part := dviTemp.Boolean;¤p		PayloadDecodeStates.object_getMetaData_content_type  :¥V			_myHasMetaData.xHasContent_type := TRUE;¦Ò            _myMetaData.content_type := OwnerPayload.DecodeNextString(); //updates i to end of the string§p		PayloadDecodeStates.object_getMetaData_size          :¨F			_myHasMetaData.xHasSize := TRUE;©^            _myMetaData.size := dviTemp.UInt64;ªp		PayloadDecodeStates.object_getMetaData_seq           :«D			_myHasMetaData.xHasSeq := TRUE;¬\            _myMetaData.seq := dviTemp.UInt64;­p		PayloadDecodeStates.object_getMetaData_file_name     :®P			_myHasMetaData.xHasFile_name := TRUE;¯Ì            _myMetaData.file_name := OwnerPayload.DecodeNextString(); //updates i to end of the string°p		PayloadDecodeStates.object_getMetaData_file_type     :±P			_myHasMetaData.xHasFile_type := TRUE;²Ì            _myMetaData.file_type := OwnerPayload.DecodeNextString(); //updates i to end of the string³p		PayloadDecodeStates.object_getMetaData_md5           :´D			_myHasMetaData.xHasMd5 := TRUE;µÀ            _myMetaData.md5 := OwnerPayload.DecodeNextString(); //updates i to end of the string¶p		PayloadDecodeStates.object_getMetaData_description   :·T			_myHasMetaData.xHasDescription := TRUE;¸Ð            _myMetaData.description := OwnerPayload.DecodeNextString(); //updates i to end of the string¹		END_CASEº	END_FOR»2	IF NOT xDecodeError THEN¼’		ProtobufBlobIndex := ProtobufBlobIndex-1; //i is now final byte index.	½	END_IF¾T	eDecodeState := PayloadDecodeStates.idle;¿B	xDecodeDone := NOT xDecodeError;À,	xDecodeBusy := FALSE;ÁEND_IF;Â&IF xEncodeBusy THENÃb	//NOTE: BLOB Data will not be initialized to 00.ÄV	//But we will start with a 0 byte payload.Å~	//store the starting byte, because we need it right at the endÆ`	startingByteOfEncodedData := ProtobufBlobIndex;Ç>	//Encode Name (Field Number 1)Èh	IF eEncodeError = ERROR.NO_ERROR AND _xHasName THENÉx		//{info 'todo: i-campbell Make these field numbers a GVL'}ÊÄ		eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _sName, ProtobufFieldNumber:= 1);Ëb		xEncodeError := eEncodeError <> ERROR.NO_ERROR;Ì	END_IF;Í	//Encode AliasÎj	IF eEncodeError = ERROR.NO_ERROR AND _xHasAlias THENÏ<		dviTemp.Uint64 := _uliAlias;ÐÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 2);ÑH	//Encode Timestamp (Field Number 3)Òr	IF eEncodeError = ERROR.NO_ERROR AND _xHasTimestamp THENÓN		dviTemp.uliDateTime := _uliTimestamp;ÔÆ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode := dviTemp, ProtobufFieldNumber:= 3);Õ$	//Encode DataTypeÖp	IF eEncodeError = ERROR.NO_ERROR AND _xHasDatatype THEN×B		dviTemp.Uint32 := _udiDatatype;ØÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 4);Ù.	//Encode is_historicalÚz	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_historical THENÛJ		dviTemp.Boolean := _xIs_historical;ÜÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 5);Ý,	//Encode is_transientÞx	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_transient THENßH		dviTemp.Boolean := _xIs_transient;àÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 6);á"	//Encode is_nullân	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_null THENã>		dviTemp.Boolean := _xIs_null;äÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 7);åZ	//{info 'TODO: i-campbell: encode meta data}æ.	//metadata fieldnumberç	//metadatasizeè>	//metadatavarints.bool * 12offé*	//Encode PropertySetêv	IF eEncodeError = ERROR.NO_ERROR AND _xHasPropertySet THENë"		_myPropertySet(ì(			xDecode:= FALSE, í&			xEncode:= TRUE, î@			OwnerPayload:= OwnerPayload, ïT			ProtobufBlobIndex:= ProtobufBlobIndex, ðH			myProtobufBlob:= myProtobufBlob, ñ8			myKeysPool:= myKeysPool, òl			myPropertySetValuesPool:= myPropertySetValuesPool, óX			myPropertySetsPool:= myPropertySetsPool, ô&			xDecodeDone=> , õ&			xDecodeBusy=> , ö(			xDecodeError=> , ÷(			eDecodeError=> , ø&			xEncodeDone=> , ù&			xEncodeBusy=> , ú@			xEncodeError=> xEncodeError, û@			eEncodeError=> eEncodeError);ü	//encode ValueýL	IF eEncodeError = ERROR.NO_ERROR THENþ(		CASE _eHasValue OFÿJ		MetricProtobufsType.boolean_value, €B		MetricProtobufsType.int_value, B		MetricProtobufsType.long_value:‚î			eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= _dzzValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));ƒd			xEncodeError := eEncodeError <> ERROR.NO_ERROR;„J	    MetricProtobufsType.float_value:…è			eEncodeError := OwnerPayload.EncodeNextFloat(ValueToEncode:= _rValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));†L	    MetricProtobufsType.double_value:‡ì			eEncodeError := OwnerPayload.EncodeNextDouble(ValueToEncode:= _lrValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));ˆL	    MetricProtobufsType.string_value:‰ì			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _sValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));ŠJ	    MetricProtobufsType.bytes_value:‹j			eEncodeError := OwnerPayload.EncodeNextBinaryData(ŒJ				StartOfBytes := _diStartOfBytes, @				NumberOfBytes:= _diHasBytes,Ž^				ProtobufFieldNumber := TO_BYTE(_eHasValue),F				ProtobufBlob:= myProtobufBlob, 6				BodyPool:= myBodyPool);‘N	    MetricProtobufsType.dataset_value:’			_myDataSet(“*				xDecode:= FALSE, ”(				xEncode:= TRUE, •B				OwnerPayload:= OwnerPayload, –V				ProtobufBlobIndex:= ProtobufBlobIndex, —J				myProtobufBlob:= myProtobufBlob, ˜b				myDataSetColumnsPool:= myDataSetColumnsPool, ™Z				myDataSetTypesPool:= myDataSetTypesPool, š:				myRowsPool:= myRowsPool, ›J				myElementsPool:= myElementsPool, œ(				xDecodeDone=> , (				xDecodeBusy=> , ž*				xDecodeError=> , Ÿ*				eDecodeError=> ,  (				xEncodeDone=> , ¡(				xEncodeBusy=> , ¢B				xEncodeError=> xEncodeError, £B				eEncodeError=> eEncodeError);¤P	    MetricProtobufsType.template_value:¥			_myTemplate(¦F				myMetricsPool:= myMetricsPool, §R				myParametersPool:= myParametersPool, ¨R	    MetricProtobufsType.extension_value:©`			eEncodeError := ERROR.PayloadFoundExtensions;ª	END_IF;	«T	//Field number and length and we're done!¬Ž		eEncodeError := OwnerPayload.ReencodeLengthDelimited(ProtobufFieldNumber:= 2, startingByteOfEncodedData:= startingByteOfEncodedData);­	//DONE :)®B	xEncodeDone := NOT xEncodeError;¯,	xEncodeBusy := FALSE;°Interface±L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}²(*³Ø    Allows for the representation of a Sparkplug B metric in both object form and protobufs binary blob form´Ò	Allows for the transformation of a Sparkplug B metric between object form and protobufs binary blob formµ*)¶${attribute 'hide'}·pFUNCTION_BLOCK INTERNAL FB_PayloadMetric EXTENDS Element¸VAR_INPUT¹6	(*Trigers for conversion*)º 	xDecode : BOOL;»"	xEncode : BOOL;	¼:	protobufBlobMaxIndex : DINT;½END_VAR¾VAR_IN_OUT¿Œ	OwnerPayload : FB_Payload; //He manages the assigning of Pool ObjectsÀê	ProtobufBlobIndex : DINT;  //For decoding, starts where the start of the Metric is, ends on the last byte of the Metric.  For Encoding, starts where the first byte of the Metric should be written to, ends on the next free byte after this metricÁà	myProtobufBlob : ARRAY [*] OF BYTE;//array of bytes containing the protobuf payload.  If the array is the wholeÂT	myMetricsPool : List; //OF ISimpleStorageÃh	myKeysPool : ARRAY [*] OF LinkedListWStringElement;Ä€	myPropertySetValuesPool : ARRAY [*] OF FB_PayloadPropertyValue;År	myPropertySetsPool : ARRAY [*] OF FB_PayloadPropertySet;Ƹ	myDataSetColumnsPool : ARRAY[*] OF LinkedListWStringElement; //Maybe combine with KeysPool?Çp	myDataSetTypesPool : ARRAY[*] OF FB_PayloadDataSetType;Èb	myRowsPool         : ARRAY [*] OF FB_PayloadRow;Éj	myElementsPool     : ARRAY [*] OF FB_PayloadElement;Ên	myParametersPool   : ARRAY [*] OF FB_PayloadParameter;Ëš	myBodyPool         : ARRAY [*] OF BYTE; // for example Payload.Metric[].BodyÌVAR_OUTPUTÍZ	xDecodeDone,xDecodeBusy,xDecodeError : BOOL;Î,	eDecodeError : ERROR;ÏZ	xEncodeDone,xEncodeBusy,xEncodeError : BOOL;Ð,	eEncodeError : ERROR;ÑVARÒ.	(*Internal variables*)Ó2	dviTemp : DecodedVarInt;ÔD	startingByteOfEncodedData : DINT;ÕH	eDecodeState : PayloadDecodeStates;Ö.	lengthOfMetric : DINT;×.	finalByteIndex : DINT;Ø$	(* Binary blob *)Ù    _pabyBlob : POINTER TO BYTE; //Start of the array which holds the binary blob for this metricÚ¾	_udiMaxBlobSize : UDINT;  //size in Bytes of the array.  Must be less than MQTT limit of 256MBÛ„    _udiBlobSize : UDINT; //Size in Bytes.  Actual size of messageÜ2    (* Structured data *)Ý.//     message Metric {Þ// ßÐ//         optional string   name          = 1;        // Metric name - should only be included on birthà*    _xHasName : BOOL;á0    _sName    : WSTRING;âŒ//         optional uint64   alias         = 2;        // Metric alias - tied to name on birth and included in all later DATA messagesã,    _xHasAlias : BOOL;ä2    _uliAlias    : ULINT;åÒ//         optional uint64   timestamp     = 3;        // Timestamp associated with data acquisition timeæ4    _xHasTimestamp : BOOL;ç@    _uliTimestamp  : T_DateTime;è´//         optional uint32   datatype      = 4;        // DataType of the metric/tag valueé2    _xHasDatatype : BOOL;êD    _udiDatatype : MetricDataType;ëð//         optional bool     is_historical = 5;        // If this is historical data and should not update real time tagì<    _xHasIs_historical : BOOL;í6    _xIs_historical : BOOL;î˜//         optional bool     is_transient  = 6;        // Tells conNumberOfMetricsing clients such as MQTT Engine to not store this as a tagï:    _xHasIs_transient : BOOL;ð4    _xIs_transient : BOOL;ñ¤//         optional bool     is_null       = 7;        // If this is null - explicitly say so rather than using -1, false, etc for some datatypes.ò0    _xHasIs_null : BOOL;ó*    _xIs_null : BOOL;ô¤//         optional MetaData metadata      = 8;        // Metadata for the payloadõB    _myHasMetaData : HasMetaData;ö6    _myMetaData : MetaData;÷4	_metadataendindex : DINT;ø^//         optional PropertySet properties = 9;ù8    _xHasPropertySet : BOOL;úV    _myPropertySet : FB_PayloadPropertySet;ûp//         IC: note, oneof means "either zero or one of"ü0//         oneof value {ýJ    _eHasValue : MetricProtobufsType;þx//             uint32   int_value                      = 10;ÿx//             uint64   long_value                     = 11;€x//             bool     boolean_value                  = 14;>    _dzzValue  : DecodedVarInt;‚x//             float    float_value                    = 12;ƒ&    _rValue : REAL;„x//             double   double_value                   = 13;…*    _lrValue : LREAL;†x//             string   string_value                   = 15;‡,    _sValue : WSTRING;ˆ¢//             bytes    bytes_value                    = 16;       // Bytes, File‰Ô    _diHasBytes       : DINT;    // there's only at most 1 body, but this number represents how many bytesŠÜ	_diStartOfBytes   : DINT;  // Array Index to the start position in FB_Payload.myBodyPool[] make up the "body"‹x//             DataSet  dataset_value                  = 17;ŒJ    _myDataSet   : FB_PayloadDataSet;x//             Template template_value                 = 18;ŽJ    _myTemplate : FB_PayloadTemplate; // NO EXTENSIONS"UniqueIdGenerator‘1400’POULevel“L{8e575c5b-1d37-49c6-941b-5c0ec7874787}”Standard• ChildObjectGuids–8System.Collections.ArrayList—,AddAttributeSubsequent˜boolÐÐ-ÐÐ	E
-ÃÐÐ
­	ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­‘ÚÐ-ÐÐ
­’ÚÐ-ÐÐ
­“ÚÐ-ÐÐ
­”ÚÐ-ÐÐ
­•ÚÐ-ÐÐ
­–ÚÐ-ÐÐ
­—ÚÐ-ÐÐ
­˜ÚÐ-ÐÐ
­™ÚÐ-ÐÐ
­šÚÐ-ÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-ÐÐ
­ÚÐ-ÐÐ
­žÚÐ-ÐÐ
­ŸÚÐ-ÐÐ
­ ÚÐ-ÐÐ
­¡ÚÐ-ÐÐ
­¢ÚÐ-ÐÐ
­£ÚÐ- ÐÐ
­¤ÚÐ-ÐÐ
­¥ÚÐ-!ÐÐ
­¦ÚÐ-ÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-ÐÐ
­©ÚÐ-ÐÐ
­ªÚÐ-ÐÐ
­«ÚÐ-ÐÐ
­¬ÚÐ-"ÐÐ
­­ÚÐ-ÐÐ
­®ÚÐ-ÐÐ
­¯ÚÐ-ÐÐ
­°ÚÐ-ÐÐ
­±ÚÐ-ÐÐ
­²ÚÐ-#ÐÐ
­³ÚÐ-ÐÐ
­´ÚÐ-ÐÐ
­µÚÐ-$ÐÐ
­¶ÚÐ-%ÐÐ
­·ÚÐ-&ÐÐ
­ÃÚÐ-'ÐÐ
­ÈÚÐ-(ÐÐ
­0ÚÐ-)ÐÐ
­<ÚÐ-*ÐÐ
­@ÚÐ-+ÐÐ
­AÚÐ-,ÐÐ
­^ÚÐ--ÐÐ
­CÚÐ-.ÐÐ
­\ÚÐ-/ÐÐ
­=ÚÐ-0ÐÐ
­DÚÐ-1ÐÐ
­GÚÐ-2ÐÐ
­HÚÐ-3ÐÐ
­IÚÐ-4ÐÐ
­JÚÐ-5ÐÐ
­KÚÐ-6ÐÐ
­LÚÐ-7ÐÐ
­MÚÐ-8ÐÐ
­NÚÐ-9ÐÐ
­OÚÐ-:ÐÐ
­šÚÐ-;ÐÐ
­PÚÐ-<ÐÐ
­RÚÐ-=ÐÐ
­SÚÐ->ÐÐ
­TÚÐ-?ÐÐ
­UÚÐ-@ÐÐ
­ÚÐ-AÐÐ
­`ÚÐ-BÐÐ
­ ÚÐ-CÐÐ
­cÚÐ-DÐÐ
­£ÚÐ-EÐÐ
­eÚÐ-FÐÐ
­—ÚÐ-GÐÐ
­gÚÐ-HÐÐ
­”ÚÐ-IÐÐ
­•ÚÐ-6ÐÐ
­–ÚÐ-JÐÐ
­iÚÐ-8ÐÐ
­vÚÐ-KÐÐ
­wÚÐ-LÐÐ
­xÚÐ-MÐÐ
­yÚÐ-NÐÐ
­zÚÐ-OÐÐ
­{ÚÐ-PÐÐ
­|ÚÐ-QÐÐ
­}ÚÐ-RÐÐ
­~ÚÐ-SÐÐ
­ÚÐ-TÐÐ
­€ÚÐ-UÐÐ
­ÚÐ-VÐÐ
­‘ÚÐ-WÐÐ
­’ÚÐ-6ÐÐ
­“ÚÐ-JÐÐ
­‚ÚÐ-8ÐÐ
­ŽÚÐ-XÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-JÐÐ
­„ÚÐ-8ÐÐ
­†ÚÐ-YÐÐ
­ŒÚÐ-6ÐÐ
­ÚÐ-JÐÐ
­‡ÚÐ-8ÐÐ
­ˆÚÐ-ZÐÐ
­ŠÚÐ-6ÐÐ
­‹ÚÐ-[ÐÐ
­‰ÚÐ-8ÐÐ
­sÚÐ-\ÐÐ
­YÚÐ-6ÐÐ
­ZÚÐ-[ÐÐ
­[ÚÐ-8ÐÐ
­EÚÐ-]ÐÐ
­§ÚÐ-^ÐÐ
­´ÚÐ-_ÐÐ
­µÚÐ-`ÐÐ
­³ÚÐ-aÐÐ
­ØÚÐ-bÐÐ
­ÚÚÐ-cÐÐ
­ÛÚÐ-dÐÐ
­ÜÚÐ-eÐÐ
­ÙÚÐ-aÐÐ
­¨ÚÐ-fÐÐ
­°ÚÐ-gÐÐ
­±ÚÐ-dÐÐ
­²ÚÐ-hÐÐ
­¯ÚÐ-aÐÐ
­©ÚÐ-iÐÐ
­¶ÚÐ-jÐÐ
­¸ÚÐ-dÐÐ
­¹ÚÐ-kÐÐ
­·ÚÐ-aÐÐ
­ªÚÐ-lÐÐ
­ºÚÐ-mÐÐ
­»ÚÐ-nÐÐ
­¼ÚÐ-aÐÐ
­«ÚÐ-oÐÐ
­¾ÚÐ-pÐÐ
­¿ÚÐ-nÐÐ
­½ÚÐ-aÐÐ
­¬ÚÐ-qÐÐ
­ÁÚÐ-rÐÐ
­ÂÚÐ-sÐÐ
­ÀÚÐ-aÐÐ
­­ÚÐ-tÐÐ
­ÄÚÐ-uÐÐ
­ÅÚÐ-vÐÐ
­ÃÚÐ-aÐÐ
­®ÚÐ-wÐÐ
­ÇÚÐ-xÐÐ
­ÈÚÐ-nÐÐ
­ÆÚÐ-aÐÐ
­]ÚÐ-yÐÐ
­ÊÚÐ-zÐÐ
­ËÚÐ-{ÐÐ
­ÉÚÐ-aÐÐ
­ÞÚÐ-|ÐÐ
­ßÚÐ-}ÐÐ
­àÚÐ-~ÐÐ
­áÚÐ-ÐÐ
­ÝÚÐ-€ÐÐ
­ãÚÐ-ÐÐ
­äÚÐ-‚ÐÐ
­åÚÐ-~ÐÐ
­æÚÐ-ƒÐÐ
­âÚÐ-€ÐÐ
­ÒÚÐ-„ÐÐ
­ÔÚÐ-…ÐÐ
­ÕÚÐ-~ÐÐ
­ÓÚÐ-†ÐÐ
­ÖÚÐ-€ÐÐ
­çÚÐ-‡ÐÐ
­ðÚÐ-ˆÐÐ
­èÚÐ-‰ÐÐ
­ìÚÐ-ŠÐÐ
­ôÚÐ-‹ÐÐ
­ïÚÐ-ŒÐÐ
­õÚÐ-ÐÐ
­öÚÐ-ŽÐÐ
­÷ÚÐ-ÐÐ
­òÚÐ-ÐÐ
­ýÚÐ-4ÐÐ
­þÚÐ-5ÐÐ
­ÿÚÐ-6ÐÐ
­ÚÐ-7ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-‘ÐÐ
­ÚÐ-’ÐÐ
­ÚÐ-“ÐÐ
­ÚÐ-”ÐÐ
­ÚÐ-•ÐÐ
­!ÚÐ-–ÐÐ
­	ÚÐ-—ÐÐ
­'ÚÐ-˜ÐÐ
­
-ÚÐ-™ÐÐ
­,ÚÐ-šÐÐ
­ÚÐ-›ÐÐ
­0ÚÐ-œÐÐ
­ÚÐ-ÐÐ
­2ÚÐ-žÐÐ
­üÚÐ-ŸÐÐ
­4ÚÐ- ÐÐ
­
ÚÐ-\ÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-[ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-]ÐÐ
­5ÚÐ-¡ÐÐ
­dÚÐ-¢ÐÐ
­eÚÐ-~ÐÐ
­fÚÐ-£ÐÐ
­_ÚÐ-‹ÐÐ
­`ÚÐ-ŒÐÐ
­aÚÐ-ÐÐ
­bÚÐ-ŽÐÐ
­^ÚÐ-ÐÐ
­6ÚÐ-¤ÐÐ
­jÚÐ-¥ÐÐ
­kÚÐ-¦ÐÐ
­ZÚÐ-‹ÐÐ
­[ÚÐ-ŒÐÐ
­\ÚÐ-ÐÐ
­]ÚÐ-ŽÐÐ
­YÚÐ-ÐÐ
­7ÚÐ-§ÐÐ
­hÚÐ-¨ÐÐ
­nÚÐ-‰ÐÐ
­oÚÐ-©ÐÐ
­UÚÐ-‹ÐÐ
­VÚÐ-ŒÐÐ
­WÚÐ-ÐÐ
­XÚÐ-ŽÐÐ
­TÚÐ-ÐÐ
­8ÚÐ-ªÐÐ
­PÚÐ-«ÐÐ
­mÚÐ-~ÐÐ
­pÚÐ-¬ÐÐ
­lÚÐ-‹ÐÐ
­QÚÐ-ŒÐÐ
­RÚÐ-ÐÐ
­SÚÐ-ŽÐÐ
­OÚÐ-ÐÐ
­9ÚÐ-­ÐÐ
­qÚÐ-®ÐÐ
­rÚÐ-¯ÐÐ
­KÚÐ-‹ÐÐ
­LÚÐ-ŒÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ŽÐÐ
­JÚÐ-ÐÐ
­:ÚÐ-°ÐÐ
­sÚÐ-±ÐÐ
­tÚÐ-²ÐÐ
­FÚÐ-‹ÐÐ
­GÚÐ-ŒÐÐ
­HÚÐ-ÐÐ
­IÚÐ-ŽÐÐ
­EÚÐ-ÐÐ
­;ÚÐ-³ÐÐ
­uÚÐ-´ÐÐ
­vÚÐ-µÐÐ
­AÚÐ-‹ÐÐ
­BÚÐ-ŒÐÐ
­CÚÐ-ÐÐ
­DÚÐ-ŽÐÐ
­@ÚÐ-ÐÐ
­ÚÐ-¶ÐÐ
­wÚÐ-·ÐÐ
­xÚÐ-¸ÐÐ
­<ÚÐ-‹ÐÐ
­=ÚÐ-ŒÐÐ
­>ÚÐ-ÐÐ
­?ÚÐ-ŽÐÐ
­ÚÐ-ÐÐ
­¦ÚÐ-¹ÐÐ
­FÚÐ-ºÐÐ
­ÎÚÐ-»ÐÐ
­ÐÚÐ-¼ÐÐ
­ÑÚÐ-½ÐÐ
­ÌÚÐ-¾ÐÐ
­ÍÚÐ-¿ÐÐ
­>ÚÐ-ÀÐÐ
­1ÚÐ-ÁÐÐ
­‰ÚÐ-%ÐÐ
­2ÚÐ-ÂÐÐ
­3ÚÐ-ÃÐÐ
­5ÚÐ-ÄÐÐ
­9ÚÐ-(ÐÐ
­ÔÚÐ-ÅÐÐ
­:ÚÐ-ÆÐÐ
­ÕÚÐ-(ÐÐ
­:ÚÐ-ÇÐÐ
­;ÚÐ-ÈÐÐ
­<ÚÐ-ÉÐÐ
­>ÚÐ-ÊÐÐ
­?ÚÐ-ËÐÐ
­@ÚÐ-ÌÐÐ
­ÚÐ-(ÐÐ
­ÚÐ-ÍÐÐ
­ÚÐ-ÎÐÐ
­‘ÚÐ-ÉÐÐ
­’ÚÐ-ÏÐÐ
­“ÚÐ-ÐÐÐ
­”ÚÐ-ËÐÐ
­ŽÚÐ-ÌÐÐ
­•ÚÐ-(ÐÐ
­—ÚÐ-ÑÐÐ
­˜ÚÐ-ÒÐÐ
­™ÚÐ-ÉÐÐ
­šÚÐ-ÓÐÐ
­›ÚÐ-ÔÐÐ
­œÚÐ-ËÐÐ
­–ÚÐ-ÌÐÐ
­ÚÐ-(ÐÐ
­ŸÚÐ-ÕÐÐ
­ ÚÐ-ÖÐÐ
­¡ÚÐ-ÉÐÐ
­¢ÚÐ-×ÐÐ
­£ÚÐ-ØÐÐ
­¤ÚÐ-ËÐÐ
­žÚÐ-ÌÐÐ
­¥ÚÐ-(ÐÐ
­§ÚÐ-ÙÐÐ
­¨ÚÐ-ÚÐÐ
­©ÚÐ-ÉÐÐ
­ªÚÐ-ÛÐÐ
­«ÚÐ-ÜÐÐ
­¬ÚÐ-ËÐÐ
­¦ÚÐ-ÌÐÐ
­­ÚÐ-(ÐÐ
­¯ÚÐ-ÝÐÐ
­°ÚÐ-ÞÐÐ
­±ÚÐ-ÉÐÐ
­²ÚÐ-ßÐÐ
­³ÚÐ-àÐÐ
­´ÚÐ-ËÐÐ
­®ÚÐ-ÌÐÐ
­µÚÐ-(ÐÐ
­·ÚÐ-áÐÐ
­¸ÚÐ-âÐÐ
­¹ÚÐ-ÉÐÐ
­ºÚÐ-ãÐÐ
­»ÚÐ-äÐÐ
­¼ÚÐ-ËÐÐ
­¶ÚÐ-ÌÐÐ
­½ÚÐ-(ÐÐ
­¾ÚÐ-åÐÐ
­×ÚÐ-æÐÐ
­ØÚÐ-çÐÐ
­ÙÚÐ-èÐÐ
­AÚÐ-(ÐÐ
­¿ÚÐ-éÐÐ
­ÁÚÐ-êÐÐ
­ÄÚÐ-ëÐÐ
­ÅÚÐ-ìÐÐ
­ÆÚÐ-íÐÐ
­ÇÚÐ-îÐÐ
­ÈÚÐ-ïÐÐ
­ÉÚÐ-ðÐÐ
­ÊÚÐ-ñÐÐ
­ËÚÐ-òÐÐ
­ÌÚÐ-óÐÐ
­ÍÚÐ-ôÐÐ
­ÎÚÐ-õÐÐ
­ÏÚÐ-öÐÐ
­ÐÚÐ-÷ÐÐ
­ÑÚÐ-øÐÐ
­ÒÚÐ-ùÐÐ
­ÓÚÐ-úÐÐ
­ÂÚÐ-ûÐÐ
­ÃÚÐ-½ÐÐ
­ÀÚÐ-(ÐÐ
­ÚÚÐ-üÐÐ
­éÚÐ-ýÐÐ
­àÚÐ-þÐÐ
­áÚÐ-ÿÐÐ
­ýÚÐ-€ÐÐ
­þÚÐ-ÐÐ
­äÚÐ-‚ÐÐ
­èÚÐ-ƒÐÐ
­íÚÐ-„ÐÐ
­,ÚÐ-…ÐÐ
­-ÚÐ-ƒÐÐ
­ôÚÐ-†ÐÐ
­.ÚÐ-‡ÐÐ
­/ÚÐ-ƒÐÐ
­öÚÐ-ˆÐÐ
­ÿÚÐ-‰ÐÐ
­ÚÐ-ƒÐÐ
­÷ÚÐ-ŠÐÐ
­#ÚÐ-‹ÐÐ
­'ÚÐ-ŒÐÐ
­(ÚÐ-ÐÐ
­)ÚÐ-ŽÐÐ
­+ÚÐ-ÐÐ
­*ÚÐ-ÐÐ
­$ÚÐ-ƒÐÐ
­øÚÐ-‘ÐÐ
­ÚÐ-’ÐÐ
­ÚÐ-“ÐÐ
­ÚÐ-”ÐÐ
­ÚÐ-•ÐÐ
­ÚÐ-–ÐÐ
­ÚÐ-—ÐÐ
­ÚÐ-˜ÐÐ
­ÚÐ-™ÐÐ
­ÚÐ-šÐÐ
­ÚÐ-›ÐÐ
­ÚÐ-œÐÐ
­ÚÐ-ÐÐ
­ÚÐ-žÐÐ
­ÚÐ-ŸÐÐ
­ ÚÐ- ÐÐ
­!ÚÐ-¡ÐÐ
­"ÚÐ-¢ÐÐ
­ÚÐ-£ÐÐ
­ùÚÐ-¤ÐÐ
­ÚÐ-¥ÐÐ
­ÚÐ-“ÐÐ
­ÚÐ-”ÐÐ
­ÚÐ-•ÐÐ
­ÚÐ-–ÐÐ
­ÚÐ-—ÐÐ
­ÚÐ-¦ÐÐ
­	ÚÐ-§ÐÐ
­
-ÚÐ-œÐÐ
­ÚÐ-ÐÐ
­ÚÐ-žÐÐ
­
ÚÐ-ŸÐÐ
­ÚÐ- ÐÐ
­ÚÐ-¡ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-£ÐÐ
­úÚÐ-¨ÐÐ
­ûÚÐ-©ÐÐ
­üÚÐ-ƒÐÐ
­âÚÐ-¹ÐÐ
­êÚÐ-ªÐÐ
­~ÚÐ-(ÐÐ
­0ÚÐ-«ÐÐ
­4ÚÐ-ýÐÐ
­5ÚÐ-ÉÐÐ
­7ÚÐ-¬ÐÐ
­8ÚÐ-ËÐÐ
­3ÚÐ-ÌÐÐ
­1ÚÐ-(ÐÐ
­ÚÐ-­ÐÐ
­€ÚÐ-(ÐÐ
­ÚÐ-®ÐÐ
­‚ÚÐ-¯ÐÐ
­ÚÐ-ÁÐÐ
­„ÚÐ-%а±Ð	E
-fÐÐ
­ÚÐ-²ÐÐ
­ÚÐ-³ÐÐ
­ÚÐ-´ÐÐ
­ ÚÐ-µÐÐ
­×ÚÐ-¶ÐÐ
­!ÚÐ-·ÐÐ
­"ÚÐ-¸ÐÐ
­#ÚÐ-¹ÐÐ
­$ÚÐ-ºÐÐ
­%ÚÐ-»ÐÐ
­ŽÚÐ-¼ÐÐ
­'ÚÐ-½ÐÐ
­(ÚÐ-¾ÐÐ
­}ÚÐ-¿ÐÐ
­ÚÐ-ÀÐÐ
­qÚÐ-ÁÐÐ
­sÚÐ-ÂÐÐ
­tÚÐ-ÃÐÐ
­uÚÐ-ÄÐÐ
­vÚÐ-ÅÐÐ
­wÚÐ-ÆÐÐ
­xÚÐ-ÇÐÐ
­yÚÐ-ÈÐÐ
­zÚÐ-ÉÐÐ
­{ÚÐ-ÊÐÐ
­pÚÐ-ËÐÐ
­)ÚÐ-½ÐÐ
­*ÚÐ-ÌÐÐ
­+ÚÐ-ÍÐÐ
­,ÚÐ-ÎÐÐ
­-ÚÐ-ÏÐÐ
­.ÚÐ-ÐÐÐ
­/ÚÐ-½ÐÐ
­0ÚÐ-ÑÐÐ
­ŠÚÐ-ÒÐÐ
­ŒÚÐ-ÓÐÐ
­9ÚÐ-ÔÐÐ
­?ÚÐ-ÕÐÐ
­BÚÐ-ÖÐÐ
­_ÚÐ-×ÐÐ
­‹ÚÐ-%ÐÐ
­4ÚÐ-ØÐÐ
­5ÚÐ-ÙÐÐ
­6ÚÐ-ÚÐÐ
­7ÚÐ-ÛÐÐ
­8ÚÐ-%ÐÐ
­9ÚÐ-ÜÐÐ
­:ÚÐ-ÝÐÐ
­;ÚÐ-ÞÐÐ
­<ÚÐ-ßÐÐ
­=ÚÐ-àÐÐ
­>ÚÐ-áÐÐ
­?ÚÐ-âÐÐ
­@ÚÐ-ãÐÐ
­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ÚÐ-ýÐÐ
­[ÚÐ-þÐÐ
­\ÚÐ-ÿÐÐ
­]ÚÐ-€ÐÐ
­^ÚÐ-ÐÐ
­_ÚÐ-‚ÐÐ
­`ÚÐ-ƒÐÐ
­aÚÐ-„ÐÐ
­bÚÐ-…ÐÐ
­cÚÐ-†ÐÐ
­eÚÐ-‡ÐÐ
­fÚÐ-ˆÐÐ
­~ÚÐ-‰ÐÐ
­iÚÐ-ŠÐÐ
­jÚÐ-‹ÐÐ
­kÚÐ-ŒÐÐ
­lÚÐ-ÐÐ
­mÚÐ-ŽÐÐ
­2ÚÐ-ÐÐ
­3ÚÐ-%ÐÐ
­1ÚÐ-½ÐÐ
­ÚÐ-%А-‘В“-”•–З˜­
\ No newline at end of file
+Gx_lVÖ!0…jüoWeq‚¿×8Ø8!¬System.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
+TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagTextä(* This is an FB and not a struct, because it may be possible for a payload to partially or fully encode itself *)&//This IF statementFIF xDecode AND xEncode THEN //ERROR(	xDecodeDone:=FALSE;(	xDecodeBusy:=FALSE;(	xDecodeError:=TRUE;d	eDecodeError := ERROR.PayloadYouCantDoBothAtOnce;(	xEncodeDone:=FALSE;(	xEncodeBusy:=FALSE;(	xEncodeError:=TRUE;d	eEncodeError := ERROR.PayloadYouCantDoBothAtOnce;ˆELSIF NOT xDecode AND NOT xEncode THEN //DO NOTHING, ALL OUTPUTS OFF*	xDecodeError:=FALSE;@	eDecodeError := ERROR.NO_ERROR;*	xEncodeError:=FALSE;@	eEncodeError := ERROR.NO_ERROR; VELSIF xDecode AND NOT xEncode THEN //Decode!&	xDecodeBusy:=TRUE;"VELSIF NOT xDecode AND xEncode THEN //Encode#&	xEncodeBusy:=TRUE;$END_IF%&&IF xDecodeBusy THEN'.	InitializeStructure();(	)l	eDecodeState := PayloadDecodeStates.object_getlength;* 	//decode length+š	dviTemp := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varint,B	lengthOfMetric := dviTemp.int32;-l	finalByteIndex := ProtobufBlobIndex + lengthOfMetric;.T	ProtobufBlobIndex := ProtobufBlobIndex+1;/l	eDecodeState := PayloadDecodeStates.object_getmember;04	//for i to i + length - 11€	FOR ProtobufBlobIndex := ProtobufBlobIndex TO finalByteIndex DO2,		CASE eDecodeState OF3N		PayloadDecodeStates.object_getmember:4X			CASE myProtobufBlob[ProtobufBlobIndex] OF5V			16#00://end of data? padding byte? ERROR62				xDecodeError := TRUE;7R				eDecodeError := ERROR.PayloadFound00;8‚				ProtobufBlobIndex := protobufBlobMaxIndex; //break out of FOR98			ProtobufedId.Metric_name::p				eDecodeState := PayloadDecodeStates.object_getname; ;:			ProtobufedId.Metric_alias:<p				eDecodeState := PayloadDecodeStates.object_getalias;=B			ProtobufedId.Metric_timestamp:>z				eDecodeState := PayloadDecodeStates.object_gettimestamp; ?@			ProtobufedId.Metric_datatype:@n				eDecodeState := PayloadDecodeStates.object_gettype;AJ			ProtobufedId.Metric_is_historical:B€				eDecodeState := PayloadDecodeStates.object_getis_historical;CH			ProtobufedId.Metric_is_transient:D~				eDecodeState := PayloadDecodeStates.object_getis_transient;E>			ProtobufedId.Metric_is_null:Ft				eDecodeState := PayloadDecodeStates.object_getis_null;G@			ProtobufedId.Metric_metadata:H„				eDecodeState := PayloadDecodeStates.object_getmetadata_length;ID			ProtobufedId.Metric_properties:JR				eDecodeError := ERROR.Notimplemented;KB			ProtobufedId.Metric_int_value:Lx				eDecodeState := PayloadDecodeStates.object_getint_value;MD			ProtobufedId.Metric_long_value:Nz				eDecodeState := PayloadDecodeStates.object_getlong_value;OF			ProtobufedId.Metric_float_value:P|				eDecodeState := PayloadDecodeStates.object_getfloat_value;QH			ProtobufedId.Metric_double_value:R~				eDecodeState := PayloadDecodeStates.object_getdouble_value;SJ			ProtobufedId.Metric_boolean_value:T€				eDecodeState := PayloadDecodeStates.object_getboolean_value;UH			ProtobufedId.Metric_string_value:V~				eDecodeState := PayloadDecodeStates.object_getstring_value;WL			ProtobufedId.Metric_bytes_value[0]:XP			ProtobufedId.Metric_dataset_value[0]:YR			ProtobufedId.Metric_template_value[0]:ZT			ProtobufedId.Metric_extension_value[0]:[b				eDecodeError := ERROR.PayloadFoundExtensions;\:			ELSE  //extension... error]			END_CASE^L		PayloadDecodeStates.object_getname :_*			_xHasName := TRUE;`”			_sname := OwnerPayload.DecodeNextString(); //updates i to end of stringap			eDecodeState := PayloadDecodeStates.object_getmember;bN		PayloadDecodeStates.object_getalias :c,			_xHasAlias := TRUE;dž			dviTemp := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varinte>			_uliAlias := dviTemp.Uint64;fV		PayloadDecodeStates.object_gettimestamp :g4			_xHasTimeStamp := TRUE;hP			_uliTimestamp := dviTemp.uliDateTime;iL		PayloadDecodeStates.object_gettype :j2			_xHasDatatype := TRUE;kD			_udiDatatype := dviTemp.UInt32;lV		PayloadDecodeStates.object_getint_value :m^			_eHasValue := MetricProtobufsType.int_value;n¤			_dzzValue  := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varintoX		PayloadDecodeStates.object_getlong_value :p`			_eHasValue := MetricProtobufsType.long_value;qZ		PayloadDecodeStates.object_getfloat_value :rb			_eHasValue := MetricProtobufsType.float_value;sž			_rValue  := OwnerPayload.DecodeNextFloat(); //updates i to end of the varintt\		PayloadDecodeStates.object_getdouble_value :ud			_eHasValue := MetricProtobufsType.double_value;v¢			_lrValue  := OwnerPayload.DecodeNextDouble(); //updates i to end of the varintw^		PayloadDecodeStates.object_getboolean_value :xf			_eHasValue := MetricProtobufsType.boolean_value;y\		PayloadDecodeStates.object_getstring_value :zd			_eHasValue := MetricProtobufsType.string_value;{ 			_sValue  := OwnerPayload.DecodeNextString(); //updates i to end of the string|`		PayloadDecodeStates.object_getis_historical : }N            _xHasIs_historical := TRUE;~²            dviTemp := OwnerPayload.DecodeNextVarInt();  //updates i to end of the varint^            _xIs_historical := dviTemp.Boolean;€‚            eDecodeState := PayloadDecodeStates.object_getmember;^		PayloadDecodeStates.object_getis_transient : ‚L            _xHasIs_transient := TRUE;ƒ\            _xIs_transient := dviTemp.Boolean;„`        PayloadDecodeStates.object_getis_null : …B            _xHasIs_null := TRUE;†R            _xIs_null := dviTemp.Boolean;‡b		PayloadDecodeStates.object_getmetadata_length :ˆN			_myHasMetaData.xHasMetaData := TRUE;‰ 			dviTemp := OwnerPayload.DecodeNextVarInt();  //updates i to end of the varintŠt			_metadataendindex := dviTemp.Int32 + ProtobufBlobIndex;‹`			IF ProtobufBlobIndex < _metadataendindex THENŒ„				eDecodeState := PayloadDecodeStates.object_getmetadata_member;			ELSEŽr				eDecodeState := PayloadDecodeStates.object_getmember;			END_IFb		PayloadDecodeStates.object_getmetadata_member :‘R			ProtobufedId.MetaData_is_multi_part : ’’				eDecodeState := PayloadDecodeStates.object_getMetaData_is_multi_part;“P			ProtobufedId.MetaData_content_type  :”				eDecodeState := PayloadDecodeStates.object_getMetaData_content_type;•P			ProtobufedId.MetaData_size          :–€				eDecodeState := PayloadDecodeStates.object_getMetaData_size;—P			ProtobufedId.MetaData_seq           :˜~				eDecodeState := PayloadDecodeStates.object_getMetaData_seq;™R			ProtobufedId.MetaData_file_name     : šŠ				eDecodeState := PayloadDecodeStates.object_getMetaData_file_name;›R			ProtobufedId.MetaData_file_type     : œŠ				eDecodeState := PayloadDecodeStates.object_getMetaData_file_type;R			ProtobufedId.MetaData_md5           : ž~				eDecodeState := PayloadDecodeStates.object_getMetaData_md5;ŸR			ProtobufedId.MetaData_description   :  Ž				eDecodeState := PayloadDecodeStates.object_getMetaData_description;¡p		PayloadDecodeStates.object_getMetaData_is_multi_part :¢X			_myHasMetaData.xHasIs_multi_part := TRUE;£r            _myMetaData.is_multi_part := dviTemp.Boolean;¤p		PayloadDecodeStates.object_getMetaData_content_type  :¥V			_myHasMetaData.xHasContent_type := TRUE;¦Ò            _myMetaData.content_type := OwnerPayload.DecodeNextString(); //updates i to end of the string§p		PayloadDecodeStates.object_getMetaData_size          :¨F			_myHasMetaData.xHasSize := TRUE;©^            _myMetaData.size := dviTemp.UInt64;ªp		PayloadDecodeStates.object_getMetaData_seq           :«D			_myHasMetaData.xHasSeq := TRUE;¬\            _myMetaData.seq := dviTemp.UInt64;­p		PayloadDecodeStates.object_getMetaData_file_name     :®P			_myHasMetaData.xHasFile_name := TRUE;¯Ì            _myMetaData.file_name := OwnerPayload.DecodeNextString(); //updates i to end of the string°p		PayloadDecodeStates.object_getMetaData_file_type     :±P			_myHasMetaData.xHasFile_type := TRUE;²Ì            _myMetaData.file_type := OwnerPayload.DecodeNextString(); //updates i to end of the string³p		PayloadDecodeStates.object_getMetaData_md5           :´D			_myHasMetaData.xHasMd5 := TRUE;µÀ            _myMetaData.md5 := OwnerPayload.DecodeNextString(); //updates i to end of the string¶p		PayloadDecodeStates.object_getMetaData_description   :·T			_myHasMetaData.xHasDescription := TRUE;¸Ð            _myMetaData.description := OwnerPayload.DecodeNextString(); //updates i to end of the string¹		END_CASEº	END_FOR»2	IF NOT xDecodeError THEN¼’		ProtobufBlobIndex := ProtobufBlobIndex-1; //i is now final byte index.	½	END_IF¾T	eDecodeState := PayloadDecodeStates.idle;¿B	xDecodeDone := NOT xDecodeError;À,	xDecodeBusy := FALSE;ÁEND_IF;Â&IF xEncodeBusy THENÃb	//NOTE: BLOB Data will not be initialized to 00.ÄV	//But we will start with a 0 byte payload.Å~	//store the starting byte, because we need it right at the endÆ`	startingByteOfEncodedData := ProtobufBlobIndex;Ç>	//Encode Name (Field Number 1)Èh	IF eEncodeError = ERROR.NO_ERROR AND _xHasName THENÉx		//{info 'todo: i-campbell Make these field numbers a GVL'}ÊÄ		eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _sName, ProtobufFieldNumber:= 1);Ëb		xEncodeError := eEncodeError <> ERROR.NO_ERROR;Ì	END_IF;Í	//Encode AliasÎj	IF eEncodeError = ERROR.NO_ERROR AND _xHasAlias THENÏ<		dviTemp.Uint64 := _uliAlias;ÐÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 2);ÑH	//Encode Timestamp (Field Number 3)Òr	IF eEncodeError = ERROR.NO_ERROR AND _xHasTimestamp THENÓN		dviTemp.uliDateTime := _uliTimestamp;ÔÆ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode := dviTemp, ProtobufFieldNumber:= 3);Õ$	//Encode DataTypeÖp	IF eEncodeError = ERROR.NO_ERROR AND _xHasDatatype THEN×B		dviTemp.Uint32 := _udiDatatype;ØÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 4);Ù.	//Encode is_historicalÚz	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_historical THENÛJ		dviTemp.Boolean := _xIs_historical;ÜÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 5);Ý,	//Encode is_transientÞx	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_transient THENßH		dviTemp.Boolean := _xIs_transient;àÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 6);á"	//Encode is_nullân	IF eEncodeError = ERROR.NO_ERROR AND _xHasIs_null THENã>		dviTemp.Boolean := _xIs_null;äÄ		eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 7);å$	//Encode metadataæŒ	IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasMetaData THENçV		_metadatastartindex := ProtobufBlobIndex;è˜		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasIs_multi_part THENé`			dviTemp.Boolean := _myMetaData.is_multi_part;êÆ			eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 1);ë		END_IFì–		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasContent_type THENíê			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _myMetaData.content_type, ProtobufFieldNumber:= 2);î†		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasSize THENïL			dviTemp.UInt64 := _myMetaData.size;ðÆ			eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 3);ñ„		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasSeq THENòJ			dviTemp.UInt64 := _myMetaData.seq;óÆ			eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= dviTemp, ProtobufFieldNumber:= 4);ô		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasFile_name THENõä			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _myMetaData.file_name, ProtobufFieldNumber:= 5);ö		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasFile_type THEN÷ä			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _myMetaData.file_type, ProtobufFieldNumber:= 6);ø„		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasMd5 THENùØ			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _myMetaData.md5, ProtobufFieldNumber:= 7);ú”		IF eEncodeError = ERROR.NO_ERROR AND _myHasMetaData.xHasDescription THENûè			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _myMetaData.description, ProtobufFieldNumber:= 8);ü		ýN		IF eEncodeError = ERROR.NO_ERROR THENþˆ			eEncodeError := OwnerPayload.ReencodeLengthDelimited(ProtobufFieldNumber := 8, startingByteOfEncodedData := _metadatastartindex);ÿ		END_IF;€*	//Encode PropertySetv	IF eEncodeError = ERROR.NO_ERROR AND _xHasPropertySet THEN‚"		_myPropertySet(ƒ(			xDecode:= FALSE, „&			xEncode:= TRUE, …@			OwnerPayload:= OwnerPayload, †T			ProtobufBlobIndex:= ProtobufBlobIndex, ‡H			myProtobufBlob:= myProtobufBlob, ˆ8			myKeysPool:= myKeysPool, ‰l			myPropertySetValuesPool:= myPropertySetValuesPool, ŠX			myPropertySetsPool:= myPropertySetsPool, ‹&			xDecodeDone=> , Œ&			xDecodeBusy=> , (			xDecodeError=> , Ž(			eDecodeError=> , &			xEncodeDone=> , &			xEncodeBusy=> , ‘@			xEncodeError=> xEncodeError, ’@			eEncodeError=> eEncodeError);“	//encode Value”L	IF eEncodeError = ERROR.NO_ERROR THEN•(		CASE _eHasValue OF–J		MetricProtobufsType.boolean_value, —B		MetricProtobufsType.int_value, ˜B		MetricProtobufsType.long_value:™î			eEncodeError := OwnerPayload.EncodeNextVarInt(ValueToEncode:= _dzzValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));šd			xEncodeError := eEncodeError <> ERROR.NO_ERROR;›J	    MetricProtobufsType.float_value:œè			eEncodeError := OwnerPayload.EncodeNextFloat(ValueToEncode:= _rValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));L	    MetricProtobufsType.double_value:žì			eEncodeError := OwnerPayload.EncodeNextDouble(ValueToEncode:= _lrValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));ŸL	    MetricProtobufsType.string_value: ì			eEncodeError := OwnerPayload.EncodeNextString(ValueToEncode := _sValue, ProtobufFieldNumber:= TO_BYTE(_eHasValue));¡J	    MetricProtobufsType.bytes_value:¢j			eEncodeError := OwnerPayload.EncodeNextBinaryData(£J				StartOfBytes := _diStartOfBytes, ¤@				NumberOfBytes:= _diHasBytes,¥^				ProtobufFieldNumber := TO_BYTE(_eHasValue),¦F				ProtobufBlob:= myProtobufBlob, §6				BodyPool:= myBodyPool);¨N	    MetricProtobufsType.dataset_value:©			_myDataSet(ª*				xDecode:= FALSE, «(				xEncode:= TRUE, ¬B				OwnerPayload:= OwnerPayload, ­V				ProtobufBlobIndex:= ProtobufBlobIndex, ®J				myProtobufBlob:= myProtobufBlob, ¯b				myDataSetColumnsPool:= myDataSetColumnsPool, °Z				myDataSetTypesPool:= myDataSetTypesPool, ±:				myRowsPool:= myRowsPool, ²J				myElementsPool:= myElementsPool, ³(				xDecodeDone=> , ´(				xDecodeBusy=> , µ*				xDecodeError=> , ¶*				eDecodeError=> , ·(				xEncodeDone=> , ¸(				xEncodeBusy=> , ¹B				xEncodeError=> xEncodeError, ºB				eEncodeError=> eEncodeError);»P	    MetricProtobufsType.template_value:¼			_myTemplate(½F				myMetricsPool:= myMetricsPool, ¾R				myParametersPool:= myParametersPool, ¿R	    MetricProtobufsType.extension_value:À`			eEncodeError := ERROR.PayloadFoundExtensions;Á	END_IF;	ÂT	//Field number and length and we're done!ÃŽ		eEncodeError := OwnerPayload.ReencodeLengthDelimited(ProtobufFieldNumber:= 2, startingByteOfEncodedData:= startingByteOfEncodedData);Ä	//DONE :)ÅB	xEncodeDone := NOT xEncodeError;Æ,	xEncodeBusy := FALSE;ÇInterfaceÈL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}É(*ÊØ    Allows for the representation of a Sparkplug B metric in both object form and protobufs binary blob formËÒ	Allows for the transformation of a Sparkplug B metric between object form and protobufs binary blob formÌ*)Í${attribute 'hide'}ÎpFUNCTION_BLOCK INTERNAL FB_PayloadMetric EXTENDS ElementÏVAR_INPUTÐ6	(*Trigers for conversion*)Ñ 	xDecode : BOOL;Ò"	xEncode : BOOL;	Ó:	protobufBlobMaxIndex : DINT;ÔEND_VARÕVAR_IN_OUTÖŒ	OwnerPayload : FB_Payload; //He manages the assigning of Pool Objects×ê	ProtobufBlobIndex : DINT;  //For decoding, starts where the start of the Metric is, ends on the last byte of the Metric.  For Encoding, starts where the first byte of the Metric should be written to, ends on the next free byte after this metricØà	myProtobufBlob : ARRAY [*] OF BYTE;//array of bytes containing the protobuf payload.  If the array is the wholeÙT	myMetricsPool : List; //OF ISimpleStorageÚh	myKeysPool : ARRAY [*] OF LinkedListWStringElement;Û€	myPropertySetValuesPool : ARRAY [*] OF FB_PayloadPropertyValue;Ür	myPropertySetsPool : ARRAY [*] OF FB_PayloadPropertySet;ݸ	myDataSetColumnsPool : ARRAY[*] OF LinkedListWStringElement; //Maybe combine with KeysPool?Þp	myDataSetTypesPool : ARRAY[*] OF FB_PayloadDataSetType;ßb	myRowsPool         : ARRAY [*] OF FB_PayloadRow;àj	myElementsPool     : ARRAY [*] OF FB_PayloadElement;án	myParametersPool   : ARRAY [*] OF FB_PayloadParameter;âš	myBodyPool         : ARRAY [*] OF BYTE; // for example Payload.Metric[].BodyãVAR_OUTPUTäZ	xDecodeDone,xDecodeBusy,xDecodeError : BOOL;å,	eDecodeError : ERROR;æZ	xEncodeDone,xEncodeBusy,xEncodeError : BOOL;ç,	eEncodeError : ERROR;èVARé.	(*Internal variables*)ê2	dviTemp : DecodedVarInt;ëD	startingByteOfEncodedData : DINT;ìH	eDecodeState : PayloadDecodeStates;í.	lengthOfMetric : DINT;î.	finalByteIndex : DINT;ï$	(* Binary blob *)ð    _pabyBlob : POINTER TO BYTE; //Start of the array which holds the binary blob for this metricñ¾	_udiMaxBlobSize : UDINT;  //size in Bytes of the array.  Must be less than MQTT limit of 256MBò„    _udiBlobSize : UDINT; //Size in Bytes.  Actual size of messageó2    (* Structured data *)ô.//     message Metric {õ// öÐ//         optional string   name          = 1;        // Metric name - should only be included on birth÷*    _xHasName : BOOL;ø0    _sName    : WSTRING;ùŒ//         optional uint64   alias         = 2;        // Metric alias - tied to name on birth and included in all later DATA messagesú,    _xHasAlias : BOOL;û2    _uliAlias    : ULINT;üÒ//         optional uint64   timestamp     = 3;        // Timestamp associated with data acquisition timeý4    _xHasTimestamp : BOOL;þ@    _uliTimestamp  : T_DateTime;ÿ´//         optional uint32   datatype      = 4;        // DataType of the metric/tag value€2    _xHasDatatype : BOOL;D    _udiDatatype : MetricDataType;‚ð//         optional bool     is_historical = 5;        // If this is historical data and should not update real time tagƒ<    _xHasIs_historical : BOOL;„6    _xIs_historical : BOOL;…˜//         optional bool     is_transient  = 6;        // Tells conNumberOfMetricsing clients such as MQTT Engine to not store this as a tag†:    _xHasIs_transient : BOOL;‡4    _xIs_transient : BOOL;ˆ¤//         optional bool     is_null       = 7;        // If this is null - explicitly say so rather than using -1, false, etc for some datatypes.‰0    _xHasIs_null : BOOL;Š*    _xIs_null : BOOL;‹¤//         optional MetaData metadata      = 8;        // Metadata for the payloadŒB    _myHasMetaData : HasMetaData;6    _myMetaData : MetaData;ŽJ	_metadatastartindex : DINT; //encodeF	_metadataendindex : DINT; //decode^//         optional PropertySet properties = 9;‘8    _xHasPropertySet : BOOL;’V    _myPropertySet : FB_PayloadPropertySet;“p//         IC: note, oneof means "either zero or one of"”0//         oneof value {•J    _eHasValue : MetricProtobufsType;–x//             uint32   int_value                      = 10;—x//             uint64   long_value                     = 11;˜x//             bool     boolean_value                  = 14;™>    _dzzValue  : DecodedVarInt;šx//             float    float_value                    = 12;›&    _rValue : REAL;œx//             double   double_value                   = 13;*    _lrValue : LREAL;žx//             string   string_value                   = 15;Ÿ,    _sValue : WSTRING; ¢//             bytes    bytes_value                    = 16;       // Bytes, File¡Ô    _diHasBytes       : DINT;    // there's only at most 1 body, but this number represents how many bytes¢Ü	_diStartOfBytes   : DINT;  // Array Index to the start position in FB_Payload.myBodyPool[] make up the "body"£x//             DataSet  dataset_value                  = 17;¤J    _myDataSet   : FB_PayloadDataSet;¥x//             Template template_value                 = 18;¦J    _myTemplate : FB_PayloadTemplate;§ // NO EXTENSIONS¨"UniqueIdGenerator©1478ªPOULevel«L{8e575c5b-1d37-49c6-941b-5c0ec7874787}¬Standard­ ChildObjectGuids®8System.Collections.ArrayList¯,AddAttributeSubsequent°boolÐÐ-ÐÐ	E
+äÐÐ
­	ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­‘ÚÐ-ÐÐ
­’ÚÐ-ÐÐ
­“ÚÐ-ÐÐ
­”ÚÐ-ÐÐ
­•ÚÐ-ÐÐ
­–ÚÐ-ÐÐ
­—ÚÐ-ÐÐ
­˜ÚÐ-ÐÐ
­™ÚÐ-ÐÐ
­šÚÐ-ÐÐ
­›ÚÐ-ÐÐ
­œÚÐ-ÐÐ
­ÚÐ-ÐÐ
­žÚÐ-ÐÐ
­ŸÚÐ-ÐÐ
­ ÚÐ-ÐÐ
­¡ÚÐ-ÐÐ
­¢ÚÐ-ÐÐ
­£ÚÐ- ÐÐ
­¤ÚÐ-ÐÐ
­¥ÚÐ-!ÐÐ
­¦ÚÐ-ÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-ÐÐ
­©ÚÐ-ÐÐ
­ªÚÐ-ÐÐ
­«ÚÐ-ÐÐ
­¬ÚÐ-"ÐÐ
­­ÚÐ-ÐÐ
­®ÚÐ-ÐÐ
­¯ÚÐ-ÐÐ
­°ÚÐ-ÐÐ
­±ÚÐ-ÐÐ
­²ÚÐ-#ÐÐ
­³ÚÐ-ÐÐ
­´ÚÐ-ÐÐ
­µÚÐ-$ÐÐ
­¶ÚÐ-%ÐÐ
­·ÚÐ-&ÐÐ
­ÃÚÐ-'ÐÐ
­ÈÚÐ-(ÐÐ
­0ÚÐ-)ÐÐ
­<ÚÐ-*ÐÐ
­@ÚÐ-+ÐÐ
­AÚÐ-,ÐÐ
­^ÚÐ--ÐÐ
­CÚÐ-.ÐÐ
­\ÚÐ-/ÐÐ
­=ÚÐ-0ÐÐ
­DÚÐ-1ÐÐ
­GÚÐ-2ÐÐ
­HÚÐ-3ÐÐ
­IÚÐ-4ÐÐ
­JÚÐ-5ÐÐ
­KÚÐ-6ÐÐ
­LÚÐ-7ÐÐ
­MÚÐ-8ÐÐ
­NÚÐ-9ÐÐ
­OÚÐ-:ÐÐ
­šÚÐ-;ÐÐ
­PÚÐ-<ÐÐ
­RÚÐ-=ÐÐ
­SÚÐ->ÐÐ
­TÚÐ-?ÐÐ
­UÚÐ-@ÐÐ
­ÚÐ-AÐÐ
­`ÚÐ-BÐÐ
­ ÚÐ-CÐÐ
­cÚÐ-DÐÐ
­£ÚÐ-EÐÐ
­eÚÐ-FÐÐ
­—ÚÐ-GÐÐ
­gÚÐ-HÐÐ
­”ÚÐ-IÐÐ
­•ÚÐ-6ÐÐ
­–ÚÐ-JÐÐ
­iÚÐ-8ÐÐ
­vÚÐ-KÐÐ
­wÚÐ-LÐÐ
­xÚÐ-MÐÐ
­yÚÐ-NÐÐ
­zÚÐ-OÐÐ
­{ÚÐ-PÐÐ
­|ÚÐ-QÐÐ
­}ÚÐ-RÐÐ
­~ÚÐ-SÐÐ
­ÚÐ-TÐÐ
­€ÚÐ-UÐÐ
­ÚÐ-VÐÐ
­‘ÚÐ-WÐÐ
­’ÚÐ-6ÐÐ
­“ÚÐ-JÐÐ
­‚ÚÐ-8ÐÐ
­ŽÚÐ-XÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-JÐÐ
­„ÚÐ-8ÐÐ
­†ÚÐ-YÐÐ
­ŒÚÐ-6ÐÐ
­ÚÐ-JÐÐ
­‡ÚÐ-8ÐÐ
­ˆÚÐ-ZÐÐ
­ŠÚÐ-6ÐÐ
­‹ÚÐ-[ÐÐ
­‰ÚÐ-8ÐÐ
­sÚÐ-\ÐÐ
­YÚÐ-6ÐÐ
­ZÚÐ-[ÐÐ
­[ÚÐ-8ÐÐ
­EÚÐ-]ÐÐ
­§ÚÐ-^ÐÐ
­´ÚÐ-_ÐÐ
­µÚÐ-`ÐÐ
­³ÚÐ-aÐÐ
­ØÚÐ-bÐÐ
­ÚÚÐ-cÐÐ
­ÛÚÐ-dÐÐ
­ÜÚÐ-eÐÐ
­ÙÚÐ-aÐÐ
­¨ÚÐ-fÐÐ
­°ÚÐ-gÐÐ
­±ÚÐ-dÐÐ
­²ÚÐ-hÐÐ
­¯ÚÐ-aÐÐ
­©ÚÐ-iÐÐ
­¶ÚÐ-jÐÐ
­¸ÚÐ-dÐÐ
­¹ÚÐ-kÐÐ
­·ÚÐ-aÐÐ
­ªÚÐ-lÐÐ
­ºÚÐ-mÐÐ
­»ÚÐ-nÐÐ
­¼ÚÐ-aÐÐ
­«ÚÐ-oÐÐ
­¾ÚÐ-pÐÐ
­¿ÚÐ-nÐÐ
­½ÚÐ-aÐÐ
­¬ÚÐ-qÐÐ
­ÁÚÐ-rÐÐ
­ÂÚÐ-sÐÐ
­ÀÚÐ-aÐÐ
­­ÚÐ-tÐÐ
­ÄÚÐ-uÐÐ
­ÅÚÐ-vÐÐ
­ÃÚÐ-aÐÐ
­®ÚÐ-wÐÐ
­ÇÚÐ-xÐÐ
­ÈÚÐ-nÐÐ
­ÆÚÐ-aÐÐ
­]ÚÐ-yÐÐ
­ÊÚÐ-zÐÐ
­ËÚÐ-{ÐÐ
­ÉÚÐ-aÐÐ
­ÞÚÐ-|ÐÐ
­ßÚÐ-}ÐÐ
­àÚÐ-~ÐÐ
­áÚÐ-ÐÐ
­ÝÚÐ-€ÐÐ
­ãÚÐ-ÐÐ
­äÚÐ-‚ÐÐ
­åÚÐ-~ÐÐ
­æÚÐ-ƒÐÐ
­âÚÐ-€ÐÐ
­ÒÚÐ-„ÐÐ
­ÔÚÐ-…ÐÐ
­ÕÚÐ-~ÐÐ
­ÓÚÐ-†ÐÐ
­ÖÚÐ-€ÐÐ
­çÚÐ-‡ÐÐ
­ðÚÐ-ˆÐÐ
­èÚÐ-‰ÐÐ
­ìÚÐ-ŠÐÐ
­ôÚÐ-‹ÐÐ
­ïÚÐ-ŒÐÐ
­õÚÐ-ÐÐ
­öÚÐ-ŽÐÐ
­÷ÚÐ-ÐÐ
­òÚÐ-ÐÐ
­ýÚÐ-4ÐÐ
­þÚÐ-5ÐÐ
­ÿÚÐ-6ÐÐ
­ÚÐ-7ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-‘ÐÐ
­ÚÐ-’ÐÐ
­ÚÐ-“ÐÐ
­ÚÐ-”ÐÐ
­ÚÐ-•ÐÐ
­!ÚÐ-–ÐÐ
­	ÚÐ-—ÐÐ
­'ÚÐ-˜ÐÐ
­
+ÚÐ-™ÐÐ
­,ÚÐ-šÐÐ
­ÚÐ-›ÐÐ
­0ÚÐ-œÐÐ
­ÚÐ-ÐÐ
­2ÚÐ-žÐÐ
­üÚÐ-ŸÐÐ
­4ÚÐ- ÐÐ
­
ÚÐ-\ÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-[ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-]ÐÐ
­5ÚÐ-¡ÐÐ
­dÚÐ-¢ÐÐ
­eÚÐ-~ÐÐ
­fÚÐ-£ÐÐ
­_ÚÐ-‹ÐÐ
­`ÚÐ-ŒÐÐ
­aÚÐ-ÐÐ
­bÚÐ-ŽÐÐ
­^ÚÐ-ÐÐ
­6ÚÐ-¤ÐÐ
­jÚÐ-¥ÐÐ
­kÚÐ-¦ÐÐ
­ZÚÐ-‹ÐÐ
­[ÚÐ-ŒÐÐ
­\ÚÐ-ÐÐ
­]ÚÐ-ŽÐÐ
­YÚÐ-ÐÐ
­7ÚÐ-§ÐÐ
­hÚÐ-¨ÐÐ
­nÚÐ-‰ÐÐ
­oÚÐ-©ÐÐ
­UÚÐ-‹ÐÐ
­VÚÐ-ŒÐÐ
­WÚÐ-ÐÐ
­XÚÐ-ŽÐÐ
­TÚÐ-ÐÐ
­8ÚÐ-ªÐÐ
­PÚÐ-«ÐÐ
­mÚÐ-~ÐÐ
­pÚÐ-¬ÐÐ
­lÚÐ-‹ÐÐ
­QÚÐ-ŒÐÐ
­RÚÐ-ÐÐ
­SÚÐ-ŽÐÐ
­OÚÐ-ÐÐ
­9ÚÐ-­ÐÐ
­qÚÐ-®ÐÐ
­rÚÐ-¯ÐÐ
­KÚÐ-‹ÐÐ
­LÚÐ-ŒÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ŽÐÐ
­JÚÐ-ÐÐ
­:ÚÐ-°ÐÐ
­sÚÐ-±ÐÐ
­tÚÐ-²ÐÐ
­FÚÐ-‹ÐÐ
­GÚÐ-ŒÐÐ
­HÚÐ-ÐÐ
­IÚÐ-ŽÐÐ
­EÚÐ-ÐÐ
­;ÚÐ-³ÐÐ
­uÚÐ-´ÐÐ
­vÚÐ-µÐÐ
­AÚÐ-‹ÐÐ
­BÚÐ-ŒÐÐ
­CÚÐ-ÐÐ
­DÚÐ-ŽÐÐ
­@ÚÐ-ÐÐ
­ÚÐ-¶ÐÐ
­wÚÐ-·ÐÐ
­xÚÐ-¸ÐÐ
­<ÚÐ-‹ÐÐ
­=ÚÐ-ŒÐÐ
­>ÚÐ-ÐÐ
­?ÚÐ-ŽÐÐ
­ÚÐ-ÐÐ
­¦ÚÐ-¹ÐÐ
­FÚÐ-ºÐÐ
­ÎÚÐ-»ÐÐ
­ÐÚÐ-¼ÐÐ
­ÑÚÐ-½ÐÐ
­ÌÚÐ-¾ÐÐ
­ÍÚÐ-¿ÐÐ
­>ÚÐ-ÀÐÐ
­1ÚÐ-ÁÐÐ
­‰ÚÐ-%ÐÐ
­2ÚÐ-ÂÐÐ
­3ÚÐ-ÃÐÐ
­5ÚÐ-ÄÐÐ
­9ÚÐ-(ÐÐ
­ÔÚÐ-ÅÐÐ
­:ÚÐ-ÆÐÐ
­ÕÚÐ-(ÐÐ
­:ÚÐ-ÇÐÐ
­;ÚÐ-ÈÐÐ
­<ÚÐ-ÉÐÐ
­>ÚÐ-ÊÐÐ
­?ÚÐ-ËÐÐ
­@ÚÐ-ÌÐÐ
­ÚÐ-(ÐÐ
­ÚÐ-ÍÐÐ
­ÚÐ-ÎÐÐ
­‘ÚÐ-ÉÐÐ
­’ÚÐ-ÏÐÐ
­“ÚÐ-ÐÐÐ
­”ÚÐ-ËÐÐ
­ŽÚÐ-ÌÐÐ
­•ÚÐ-(ÐÐ
­—ÚÐ-ÑÐÐ
­˜ÚÐ-ÒÐÐ
­™ÚÐ-ÉÐÐ
­šÚÐ-ÓÐÐ
­›ÚÐ-ÔÐÐ
­œÚÐ-ËÐÐ
­–ÚÐ-ÌÐÐ
­ÚÐ-(ÐÐ
­ŸÚÐ-ÕÐÐ
­ ÚÐ-ÖÐÐ
­¡ÚÐ-ÉÐÐ
­¢ÚÐ-×ÐÐ
­£ÚÐ-ØÐÐ
­¤ÚÐ-ËÐÐ
­žÚÐ-ÌÐÐ
­¥ÚÐ-(ÐÐ
­§ÚÐ-ÙÐÐ
­¨ÚÐ-ÚÐÐ
­©ÚÐ-ÉÐÐ
­ªÚÐ-ÛÐÐ
­«ÚÐ-ÜÐÐ
­¬ÚÐ-ËÐÐ
­¦ÚÐ-ÌÐÐ
­­ÚÐ-(ÐÐ
­¯ÚÐ-ÝÐÐ
­°ÚÐ-ÞÐÐ
­±ÚÐ-ÉÐÐ
­²ÚÐ-ßÐÐ
­³ÚÐ-àÐÐ
­´ÚÐ-ËÐÐ
­®ÚÐ-ÌÐÐ
­µÚÐ-(ÐÐ
­·ÚÐ-áÐÐ
­¸ÚÐ-âÐÐ
­¹ÚÐ-ÉÐÐ
­ºÚÐ-ãÐÐ
­»ÚÐ-äÐÐ
­¼ÚÐ-ËÐÐ
­¶ÚÐ-ÌÐÐ
­½ÚÐ-(ÐÐ
­{ÚÐ-åÐÐ
­}ÚÐ-æÐÐ
­‚ÚÐ-çÐÐ
­~ÚÐ-ÉÐÐ
­‰ÚÐ-èÐÐ
­ÚÐ-éÐÐ
­€ÚÐ-êÐÐ
­ŠÚÐ-ëÐÐ
­¡ÚÐ-ìÐÐ
­ÆÚÐ-íÐÐ
­ ÚÐ-ëÐÐ
­¨ÚÐ-îÐÐ
­©ÚÐ-ïÐÐ
­ªÚÐ-ðÐÐ
­§ÚÐ-ëÐÐ
­­ÚÐ-ñÐÐ
­®ÚÐ-òÐÐ
­¯ÚÐ-óÐÐ
­¬ÚÐ-ëÐÐ
­³ÚÐ-ôÐÐ
­´ÚÐ-õÐÐ
­±ÚÐ-ëÐÐ
­¸ÚÐ-öÐÐ
­¹ÚÐ-÷ÐÐ
­·ÚÐ-ëÐÐ
­½ÚÐ-øÐÐ
­¾ÚÐ-ùÐÐ
­¼ÚÐ-ëÐÐ
­ÂÚÐ-úÐÐ
­ÃÚÐ-ûÐÐ
­ÁÚÐ-ëÐÐ
­…ÚÐ-üÐÐ
­†ÚÐ-ýÐÐ
­„ÚÐ-þÐÐ
­|ÚÐ-ÿÐÐ
­ˆÚÐ-ËÐÐ
­‡ÚÐ-ÌÐÐ
­AÚÐ-(ÐÐ
­¿ÚÐ-€ÐÐ
­ÁÚÐ-ÐÐ
­ÄÚÐ-‚ÐÐ
­ÅÚÐ-ƒÐÐ
­ÆÚÐ-„ÐÐ
­ÇÚÐ-…ÐÐ
­ÈÚÐ-†ÐÐ
­ÉÚÐ-‡ÐÐ
­ÊÚÐ-ˆÐÐ
­ËÚÐ-‰ÐÐ
­ÌÚÐ-ŠÐÐ
­ÍÚÐ-‹ÐÐ
­ÎÚÐ-ŒÐÐ
­ÏÚÐ-ÐÐ
­ÐÚÐ-ŽÐÐ
­ÑÚÐ-ÐÐ
­ÒÚÐ-ÐÐ
­ÓÚÐ-‘ÐÐ
­ÂÚÐ-’ÐÐ
­ÃÚÐ-½ÐÐ
­ÀÚÐ-(ÐÐ
­ÚÚÐ-“ÐÐ
­éÚÐ-”ÐÐ
­àÚÐ-•ÐÐ
­áÚÐ-–ÐÐ
­ýÚÐ-—ÐÐ
­þÚÐ-˜ÐÐ
­äÚÐ-™ÐÐ
­èÚÐ-šÐÐ
­íÚÐ-›ÐÐ
­,ÚÐ-œÐÐ
­-ÚÐ-šÐÐ
­ôÚÐ-ÐÐ
­.ÚÐ-žÐÐ
­/ÚÐ-šÐÐ
­öÚÐ-ŸÐÐ
­ÿÚÐ- ÐÐ
­ÚÐ-šÐÐ
­÷ÚÐ-¡ÐÐ
­#ÚÐ-¢ÐÐ
­'ÚÐ-£ÐÐ
­(ÚÐ-¤ÐÐ
­)ÚÐ-¥ÐÐ
­+ÚÐ-¦ÐÐ
­*ÚÐ-§ÐÐ
­$ÚÐ-šÐÐ
­øÚÐ-¨ÐÐ
­ÚÐ-©ÐÐ
­ÚÐ-ªÐÐ
­ÚÐ-«ÐÐ
­ÚÐ-¬ÐÐ
­ÚÐ-­ÐÐ
­ÚÐ-®ÐÐ
­ÚÐ-¯ÐÐ
­ÚÐ-°ÐÐ
­ÚÐ-±ÐÐ
­ÚÐ-²ÐÐ
­ÚÐ-³ÐÐ
­ÚÐ-´ÐÐ
­ÚÐ-µÐÐ
­ÚÐ-¶ÐÐ
­ ÚÐ-·ÐÐ
­!ÚÐ-¸ÐÐ
­"ÚÐ-¹ÐÐ
­ÚÐ-ºÐÐ
­ùÚÐ-»ÐÐ
­ÚÐ-¼ÐÐ
­ÚÐ-ªÐÐ
­ÚÐ-«ÐÐ
­ÚÐ-¬ÐÐ
­ÚÐ-­ÐÐ
­ÚÐ-®ÐÐ
­ÚÐ-½ÐÐ
­	ÚÐ-¾ÐÐ
­
+ÚÐ-³ÐÐ
­ÚÐ-´ÐÐ
­ÚÐ-µÐÐ
­
ÚÐ-¶ÐÐ
­ÚÐ-·ÐÐ
­ÚÐ-¸ÐÐ
­ÚÐ-¹ÐÐ
­ÚÐ-ºÐÐ
­úÚÐ-¿ÐÐ
­ûÚÐ-ÀÐÐ
­üÚÐ-šÐÐ
­âÚÐ-¹ÐÐ
­êÚÐ-ÁÐÐ
­~ÚÐ-(ÐÐ
­0ÚÐ-ÂÐÐ
­4ÚÐ-”ÐÐ
­5ÚÐ-ÉÐÐ
­7ÚÐ-ÃÐÐ
­8ÚÐ-ËÐÐ
­3ÚÐ-ÌÐÐ
­1ÚÐ-(ÐÐ
­ÚÐ-ÄÐÐ
­€ÚÐ-(ÐÐ
­ÚÐ-ÅÐÐ
­‚ÚÐ-ÆÐÐ
­ÚÐ-ÁÐÐ
­„ÚÐ-%ÐÇÈÐ	E
+gÐÐ
­ÚÐ-ÉÐÐ
­ÚÐ-ÊÐÐ
­ÚÐ-ËÐÐ
­ ÚÐ-ÌÐÐ
­×ÚÐ-ÍÐÐ
­!ÚÐ-ÎÐÐ
­"ÚÐ-ÏÐÐ
­#ÚÐ-ÐÐÐ
­$ÚÐ-ÑÐÐ
­%ÚÐ-ÒÐÐ
­ŽÚÐ-ÓÐÐ
­'ÚÐ-ÔÐÐ
­(ÚÐ-ÕÐÐ
­}ÚÐ-ÖÐÐ
­ÚÐ-×ÐÐ
­qÚÐ-ØÐÐ
­sÚÐ-ÙÐÐ
­tÚÐ-ÚÐÐ
­uÚÐ-ÛÐÐ
­vÚÐ-ÜÐÐ
­wÚÐ-ÝÐÐ
­xÚÐ-ÞÐÐ
­yÚÐ-ßÐÐ
­zÚÐ-àÐÐ
­{ÚÐ-áÐÐ
­pÚÐ-âÐÐ
­)ÚÐ-ÔÐÐ
­*ÚÐ-ãÐÐ
­+ÚÐ-äÐÐ
­,ÚÐ-åÐÐ
­-ÚÐ-æÐÐ
­.ÚÐ-çÐÐ
­/ÚÐ-ÔÐÐ
­0ÚÐ-èÐÐ
­ŠÚÐ-éÐÐ
­ŒÚÐ-êÐÐ
­9ÚÐ-ëÐÐ
­?ÚÐ-ìÐÐ
­BÚÐ-íÐÐ
­_ÚÐ-îÐÐ
­‹ÚÐ-%ÐÐ
­4ÚÐ-ïÐÐ
­5ÚÐ-ðÐÐ
­6ÚÐ-ñÐÐ
­7ÚÐ-òÐÐ
­8ÚÐ-%ÐÐ
­9ÚÐ-óÐÐ
­:ÚÐ-ôÐÐ
­;ÚÐ-õÐÐ
­<ÚÐ-öÐÐ
­=ÚÐ-÷ÐÐ
­>ÚÐ-øÐÐ
­?ÚÐ-ùÐÐ
­@ÚÐ-úÐÐ
­AÚÐ-ûÐÐ
­BÚÐ-üÐÐ
­CÚÐ-ýÐÐ
­DÚÐ-þÐÐ
­EÚÐ-ÿÐÐ
­FÚÐ-€ÐÐ
­GÚÐ-ÐÐ
­HÚÐ-‚ÐÐ
­IÚÐ-ƒÐÐ
­JÚÐ-„ÐÐ
­KÚÐ-…ÐÐ
­LÚÐ-†ÐÐ
­MÚÐ-‡ÐÐ
­NÚÐ-ˆÐÐ
­OÚÐ-‰ÐÐ
­PÚÐ-ŠÐÐ
­QÚÐ-‹ÐÐ
­RÚÐ-ŒÐÐ
­SÚÐ-ÐÐ
­yÚÐ-ŽÐÐ
­zÚÐ-ÐÐ
­TÚÐ-ÐÐ
­UÚÐ-‘ÐÐ
­VÚÐ-’ÐÐ
­WÚÐ-õÐÐ
­XÚÐ-“ÐÐ
­YÚÐ-”ÐÐ
­ZÚÐ-•ÐÐ
­[ÚÐ-–ÐÐ
­\ÚÐ-—ÐÐ
­]ÚÐ-˜ÐÐ
­^ÚÐ-™ÐÐ
­_ÚÐ-šÐÐ
­`ÚÐ-›ÐÐ
­aÚÐ-œÐÐ
­bÚÐ-ÐÐ
­cÚÐ-žÐÐ
­eÚÐ-ŸÐÐ
­fÚÐ- ÐÐ
­~ÚÐ-¡ÐÐ
­iÚÐ-¢ÐÐ
­jÚÐ-£ÐÐ
­kÚÐ-¤ÐÐ
­lÚÐ-¥ÐÐ
­mÚÐ-¦ÐÐ
­2ÚÐ-§ÐÐ
­3ÚÐ-%ÐÐ
­1ÚÐ-ÔÐÐ
­ÚÐ-%Ш-©Ъ«-¬­®Я°­
\ No newline at end of file