//called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (!_pgready)
            {
                return;
            }
            if (_typeChanged || _firstFrame || _input.Spread.IsChanged)
            {
                Success.SliceCount = _input.Spread.SliceCount;
                Output.Resize(_input.Spread.SliceCount, i => new MemoryStream(), stream => stream?.Dispose());
                _output.ResizeAndDismiss(_input.Spread.SliceCount, i => null);

                for (int i = 0; i < _input.Spread.SliceCount; i++)
                {
                    Output[i] = Output[i] == null ? new MemoryStream() : Output[i];
                    var obj = _input[i];
                    var buf = _output[i];
                    if (obj == null)
                    {
                        Output[i].SetLength(0);
                        continue;
                    }
                    Output[i].Position = 0;
                    int length = 0;
                    try
                    {
                        length     = _ceras.Serialize(obj, ref buf);
                        Success[i] = true;
                    }
                    catch
                    {
                        Success[i] = false;
                        _ceras     = CerasSerializerHelper.Serializer();
                        Output[i].SetLength(0);
                        continue;
                    }
                    Output[i].SetLength(length);
                    Output[i].Write(buf, 0, length);
                    _output[i] = buf;
                }
                Output.Stream.IsChanged = true;
            }
            else
            {
                Output.Stream.IsChanged = false;
            }

            if (_firstFrame)
            {
                _firstFrame = false;
            }
            if (_typeChanged)
            {
                _typeChanged = false;
            }
        }
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (!_pgready)
            {
                return;
            }
            if (_typeChanged || _firstFrame || Input.IsChanged)
            {
                Success.SliceCount        = Input.SliceCount;
                _output.Spread.SliceCount = Input.SliceCount;
                _input.ResizeAndDismiss(Input.SliceCount, i => new byte[0]);

                for (int i = 0; i < Input.SliceCount; i++)
                {
                    if (Input[i] != null && _input[i].Length < Input[i].Length)
                    {
                        _input[i] = new byte[Input[i].Length];
                    }

                    if (Input[i] == null || Input[i].Read(_input[i], 0, (int)Input[i].Length) <= 0)
                    {
                        _output[i] = null;
                        continue;
                    }

                    try
                    {
                        if (_output[i] == null)
                        {
                            _output[i] = _ceras.Deserialize <object>(_input[i]);
                        }
                        else
                        {
                            var obj = _output[i];
                            _ceras.Deserialize(ref obj, _input[i]);
                            _output[i] = obj;
                        }
                        Success[i] = true;
                    }
                    catch
                    {
                        Success[i] = false;
                        _ceras     = CerasSerializerHelper.Serializer();
                        _output[i] = null;
                        continue;
                    }
                }
                _output.SetReflectedChanged(true);
            }
            else
            {
                _output.SetReflectedChanged(false);
            }

            if (_firstFrame)
            {
                _firstFrame = false;
            }
            if (_typeChanged)
            {
                _typeChanged = false;
            }
        }