Diff of /trunk/mqttsparkplugb/mqttsparkplugb/SparkplugB/Function Blocks/FB_Payload/FB_PayloadMetric/svnobj [r537] .. [r538]  Maximize  Restore

Switch to side-by-side view

--- 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,5 +1,6 @@
-Gx_lvž!0…jüožs˜$)„°*!¢9ú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:<R				eDecodeError := ERROR.Notimplemented;=B			ProtobufedId.Metric_timestamp:>z				eDecodeState := PayloadDecodeStates.object_gettimestamp; ?@			ProtobufedId.Metric_datatype:@n				eDecodeState := PayloadDecodeStates.object_gettype;AJ			ProtobufedId.Metric_is_historical:BH			ProtobufedId.Metric_is_transient:C>			ProtobufedId.Metric_is_null:Dt				eDecodeState := PayloadDecodeStates.object_getis_null;E@			ProtobufedId.Metric_metadata:FD			ProtobufedId.Metric_properties:GB			ProtobufedId.Metric_int_value:Hx				eDecodeState := PayloadDecodeStates.object_getint_value;ID			ProtobufedId.Metric_long_value:Jz				eDecodeState := PayloadDecodeStates.object_getlong_value;KF			ProtobufedId.Metric_float_value:L|				eDecodeState := PayloadDecodeStates.object_getfloat_value;MH			ProtobufedId.Metric_double_value:N~				eDecodeState := PayloadDecodeStates.object_getdouble_value;OJ			ProtobufedId.Metric_boolean_value:P€				eDecodeState := PayloadDecodeStates.object_getboolean_value;QH			ProtobufedId.Metric_string_value:R~				eDecodeState := PayloadDecodeStates.object_getstring_value;SL			ProtobufedId.Metric_bytes_value[0]:TP			ProtobufedId.Metric_dataset_value[0]:UR			ProtobufedId.Metric_template_value[0]:VT			ProtobufedId.Metric_extension_value[0]:Wb				eDecodeError := ERROR.PayloadFoundExtensions;X:			ELSE  //extension... errorY			END_CASEZL		PayloadDecodeStates.object_getname :[*			_xHasName := TRUE;\”			_sname := OwnerPayload.DecodeNextString(); //updates i to end of string]p			eDecodeState := PayloadDecodeStates.object_getmember;^V		PayloadDecodeStates.object_gettimestamp :_4			_xHasTimeStamp := TRUE;`ž			dviTemp := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varintaP			_uliTimestamp := dviTemp.uliDateTime;bL		PayloadDecodeStates.object_gettype :c2			_xHasDatatype := TRUE;dD			_udiDatatype := dviTemp.UInt32;eV		PayloadDecodeStates.object_getint_value :f^			_eHasValue := MetricProtobufsType.int_value;g¤			_dzzValue  := OwnerPayload.DecodeNextVarInt(); //updates i to end of the varinthX		PayloadDecodeStates.object_getlong_value :i`			_eHasValue := MetricProtobufsType.long_value;jZ		PayloadDecodeStates.object_getfloat_value :kb			_eHasValue := MetricProtobufsType.float_value;lž			_rValue  := OwnerPayload.DecodeNextFloat(); //updates i to end of the varintm\		PayloadDecodeStates.object_getdouble_value :nd			_eHasValue := MetricProtobufsType.double_value;o¢			_lrValue  := OwnerPayload.DecodeNextDouble(); //updates i to end of the varintp^		PayloadDecodeStates.object_getboolean_value :qf			_eHasValue := MetricProtobufsType.boolean_value;r\		PayloadDecodeStates.object_getstring_value :sd			_eHasValue := MetricProtobufsType.string_value;t 			_sValue  := OwnerPayload.DecodeNextString(); //updates i to end of the varintu`        PayloadDecodeStates.object_getis_null : vB            _xHasIs_null := TRUE;w²            dviTemp := OwnerPayload.DecodeNextVarInt();  //updates i to end of the varintxR            _xIs_null := dviTemp.Boolean;y‚            eDecodeState := PayloadDecodeStates.object_getmember;z		END_CASE{	END_FOR|2	IF NOT xDecodeError THEN}’		ProtobufBlobIndex := ProtobufBlobIndex-1; //i is now final byte index.	~	END_IFT	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;¸^//         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Ñ1239Ò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ÚÐ-:ÐÐ
­šÚÐ-;ÐÐ
­›ÚÐ-6ÐÐ
­œÚÐ-<ÐÐ
­PÚÐ-8ÐÐ
­RÚÐ-=ÐÐ
­SÚÐ->ÐÐ
­TÚÐ-?ÐÐ
­UÚÐ-@ÐÐ
­ÚÐ-AÐÐ
­žÚÐ-6ÐÐ
­ŸÚÐ-<ÐÐ
­`ÚÐ-8ÐÐ
­ ÚÐ-BÐÐ
­¡ÚÐ-6ÐÐ
­¢ÚÐ-<ÐÐ
­cÚÐ-8ÐÐ
­£ÚÐ-CÐÐ
­eÚÐ-DÐÐ
­—ÚÐ-EÐÐ
­˜ÚÐ-6ÐÐ
­™ÚÐ-<ÐÐ
­gÚÐ-8ÐÐ
­”ÚÐ-FÐÐ
­•ÚÐ-6ÐÐ
­–ÚÐ-<ÐÐ
­iÚÐ-8ÐÐ
­vÚÐ-GÐÐ
­wÚÐ-HÐÐ
­xÚÐ-IÐÐ
­yÚÐ-JÐÐ
­zÚÐ-KÐÐ
­{ÚÐ-LÐÐ
­|ÚÐ-MÐÐ
­}ÚÐ-NÐÐ
­~ÚÐ-OÐÐ
­ÚÐ-PÐÐ
­€ÚÐ-QÐÐ
­ÚÐ-RÐÐ
­‘ÚÐ-SÐÐ
­’ÚÐ-6ÐÐ
­“ÚÐ-<ÐÐ
­‚ÚÐ-8ÐÐ
­ŽÚÐ-TÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-<ÐÐ
­„ÚÐ-8ÐÐ
­†ÚÐ-UÐÐ
­ŒÚÐ-6ÐÐ
­ÚÐ-<ÐÐ
­‡ÚÐ-8ÐÐ
­ˆÚÐ-VÐÐ
­ŠÚÐ-6ÐÐ
­‹ÚÐ-WÐÐ
­‰ÚÐ-8ÐÐ
­sÚÐ-XÐÐ
­YÚÐ-6ÐÐ
­ZÚÐ-WÐÐ
­[ÚÐ-8ÐÐ
­EÚÐ-YÐÐ
­§ÚÐ-ZÐÐ
­´ÚÐ-[ÐÐ
­µÚÐ-\ÐÐ
­³ÚÐ-]ÐÐ
­¨ÚÐ-^ÐÐ
­°ÚÐ-_ÐÐ
­±ÚÐ-`ÐÐ
­²ÚÐ-aÐÐ
­¯ÚÐ-]ÐÐ
­©ÚÐ-bÐÐ
­¶ÚÐ-cÐÐ
­¸ÚÐ-`ÐÐ
­¹ÚÐ-dÐÐ
­·ÚÐ-]ÐÐ
­ªÚÐ-eÐÐ
­ºÚÐ-fÐÐ
­»ÚÐ-gÐÐ
­¼ÚÐ-]ÐÐ
­«ÚÐ-hÐÐ
­¾ÚÐ-iÐÐ
­¿ÚÐ-gÐÐ
­½ÚÐ-]ÐÐ
­¬ÚÐ-jÐÐ
­ÁÚÐ-kÐÐ
­ÂÚÐ-lÐÐ
­ÀÚÐ-]ÐÐ
­­ÚÐ-mÐÐ
­ÄÚÐ-nÐÐ
­ÅÚÐ-oÐÐ
­ÃÚÐ-]ÐÐ
­®ÚÐ-pÐÐ
­ÇÚÐ-qÐÐ
­ÈÚÐ-gÐÐ
­ÆÚÐ-]ÐÐ
­]ÚÐ-rÐÐ
­ÊÚÐ-sÐÐ
­ËÚÐ-tÐÐ
­ÉÚÐ-]ÐÐ
­ÒÚÐ-uÐÐ
­ÔÚÐ-vÐÐ
­ÕÚÐ-wÐÐ
­ÓÚÐ-xÐÐ
­ÖÚÐ-yÐÐ
­¦ÚÐ-zÐÐ
­FÚÐ-{ÐÐ
­ÎÚÐ-|ÐÐ
­ÐÚÐ-}ÐÐ
­ÑÚÐ-~ÐÐ
­ÌÚÐ-ÐÐ
­ÍÚÐ-€ÐÐ
­>ÚÐ-ÐÐ
­1ÚÐ-‚ÐÐ
­‰ÚÐ-%ÐÐ
­2ÚÐ-ƒÐÐ
­3ÚÐ-„ÐÐ
­5ÚÐ-…ÐÐ
­9ÚÐ-(ÐÐ
­ÔÚÐ-†ÐÐ
­:ÚÐ-‡ÐÐ
­ÕÚÐ-(ÐÐ
­:ÚÐ-ˆÐÐ
­;ÚÐ-‰ÐÐ
­<ÚÐ-ŠÐÐ
­>ÚÐ-‹ÐÐ
­?ÚÐ-ŒÐÐ
­@ÚÐ-ÐÐ
­ÚÐ-(ÐÐ
­ÚÐ-ŽÐÐ
­ÚÐ-ÐÐ
­‘ÚÐ-ŠÐÐ
­’ÚÐ-ÐÐ
­“ÚÐ-‘ÐÐ
­”ÚÐ-ŒÐÐ
­ŽÚÐ-ÐÐ
­•ÚÐ-(ÐÐ
­—ÚÐ-’ÐÐ
­˜ÚÐ-“ÐÐ
­™ÚÐ-ŠÐÐ
­šÚÐ-”ÐÐ
­›ÚÐ-•ÐÐ
­œÚÐ-ŒÐÐ
­–ÚÐ-ÐÐ
­ÚÐ-(ÐÐ
­ŸÚÐ-–ÐÐ
­ ÚÐ-—ÐÐ
­¡ÚÐ-ŠÐÐ
­¢ÚÐ-˜ÐÐ
­£ÚÐ-™ÐÐ
­¤ÚÐ-ŒÐÐ
­žÚÐ-ÐÐ
­¥ÚÐ-(ÐÐ
­§ÚÐ-šÐÐ
­¨ÚÐ-›ÐÐ
­©ÚÐ-ŠÐÐ
­ªÚÐ-œÐÐ
­«ÚÐ-ÐÐ
­¬ÚÐ-ŒÐÐ
­¦ÚÐ-ÐÐ
­­ÚÐ-(ÐÐ
­¯ÚÐ-žÐÐ
­°ÚÐ-ŸÐÐ
­±ÚÐ-ŠÐÐ
­²ÚÐ- ÐÐ
­³ÚÐ-¡ÐÐ
­´ÚÐ-ŒÐÐ
­®ÚÐ-ÐÐ
­µÚÐ-(ÐÐ
­·ÚÐ-¢ÐÐ
­¸ÚÐ-£ÐÐ
­¹ÚÐ-ŠÐÐ
­ºÚÐ-¤ÐÐ
­»ÚÐ-¥ÐÐ
­¼ÚÐ-ŒÐÐ
­¶ÚÐ-ÐÐ
­½ÚÐ-(ÐÐ
­¾ÚÐ-¦ÐÐ
­×ÚÐ-§ÐÐ
­ØÚÐ-¨ÐÐ
­ÙÚÐ-©ÐÐ
­AÚÐ-(ÐÐ
­¿ÚÐ-ªÐÐ
­ÁÚÐ-«ÐÐ
­ÄÚÐ-¬ÐÐ
­ÅÚÐ-­ÐÐ
­ÆÚÐ-®ÐÐ
­ÇÚÐ-¯ÐÐ
­ÈÚÐ-°ÐÐ
­ÉÚÐ-±ÐÐ
­ÊÚÐ-²ÐÐ
­ËÚÐ-³ÐÐ
­ÌÚÐ-´ÐÐ
­ÍÚÐ-µÐÐ
­ÎÚÐ-¶ÐÐ
­ÏÚÐ-·ÐÐ
­ÐÚÐ-¸ÐÐ
­ÑÚÐ-¹ÐÐ
­ÒÚÐ-ºÐÐ
­ÓÚÐ-»ÐÐ
­ÂÚÐ-¼ÐÐ
­ÃÚÐ-~ÐÐ
­ÀÚÐ-(ÐÐ
­ÚÚÐ-½ÐÐ
­éÚÐ-¾ÐÐ
­àÚÐ-¿ÐÐ
­áÚÐ-ÀÐÐ
­ýÚÐ-ÁÐÐ
­þÚÐ-ÂÐÐ
­äÚÐ-ÃÐÐ
­èÚÐ-ÄÐÐ
­íÚÐ-ÅÐÐ
­,ÚÐ-ÆÐÐ
­-ÚÐ-ÄÐÐ
­ôÚÐ-ÇÐÐ
­.ÚÐ-ÈÐÐ
­/ÚÐ-ÄÐÐ
­öÚÐ-ÉÐÐ
­ÿÚÐ-ÊÐÐ
­ÚÐ-ÄÐÐ
­÷ÚÐ-ËÐÐ
­#ÚÐ-ÌÐÐ
­'ÚÐ-ÍÐÐ
­(ÚÐ-ÎÐÐ
­)ÚÐ-ÏÐÐ
­+ÚÐ-ÐÐÐ
­*ÚÐ-ÑÐÐ
­$ÚÐ-ÄÐÐ
­øÚÐ-ÒÐÐ
­ÚÐ-ÓÐÐ
­ÚÐ-ÔÐÐ
­ÚÐ-ÕÐÐ
­ÚÐ-ÖÐÐ
­ÚÐ-×ÐÐ
­ÚÐ-ØÐÐ
­ÚÐ-ÙÐÐ
­ÚÐ-ÚÐÐ
­ÚÐ-ÛÐÐ
­ÚÐ-ÜÐÐ
­ÚÐ-ÝÐÐ
­ÚÐ-ÞÐÐ
­ÚÐ-ßÐÐ
­ÚÐ-àÐÐ
­ ÚÐ-áÐÐ
­!ÚÐ-âÐÐ
­"ÚÐ-ãÐÐ
­ÚÐ-äÐÐ
­ùÚÐ-åÐÐ
­ÚÐ-æÐÐ
­ÚÐ-ÔÐÐ
­ÚÐ-ÕÐÐ
­ÚÐ-ÖÐÐ
­ÚÐ-×ÐÐ
­ÚÐ-ØÐÐ
­ÚÐ-çÐÐ
­	ÚÐ-èÐÐ
­
-ÚÐ-ÝÐÐ
­ÚÐ-ÞÐÐ
­ÚÐ-ßÐÐ
­
ÚÐ-àÐÐ
­ÚÐ-áÐÐ
­ÚÐ-âÐÐ
­ÚÐ-ãÐÐ
­ÚÐ-äÐÐ
­úÚÐ-éÐÐ
­ûÚÐ-êÐÐ
­üÚÐ-ÄÐÐ
­âÚÐ-zÐÐ
­êÚÐ-ëÐÐ
­~ÚÐ-(ÐÐ
­0ÚÐ-ìÐÐ
­4ÚÐ-¾ÐÐ
­5ÚÐ-ŠÐÐ
­7ÚÐ-íÐÐ
­8ÚÐ-ŒÐÐ
­3ÚÐ-ÐÐ
­1ÚÐ-(ÐÐ
­ÚÐ-îÐÐ
­€ÚÐ-(ÐÐ
­ÚÐ-ïÐÐ
­‚ÚÐ-ðÐÐ
­ÚÐ-‚ÐÐ
­„ÚÐ-%ÐñòÐ	E
-eÐÐ
­ÚÐ-óÐÐ
­ÚÐ-ôÐÐ
­ÚÐ-õÐÐ
­ ÚÐ-öÐÐ
­×ÚÐ-÷ÐÐ
­!ÚÐ-øÐÐ
­"ÚÐ-ùÐÐ
­#ÚÐ-úÐÐ
­$ÚÐ-ûÐÐ
­%ÚÐ-üÐÐ
­ŽÚÐ-ýÐÐ
­'ÚÐ-þÐÐ
­(ÚÐ-ÿÐÐ
­}ÚÐ-€ÐÐ
­ÚÐ-ÐÐ
­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_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