private void ReadDeclaration() { int num; if (!this.buffered) { this.BufferElement(); } byte[] bytes = base.BufferReader.GetBuffer(5, out num); if (((bytes[num] != 0x3f) || (bytes[num + 1] != 120)) || (((bytes[num + 2] != 0x6d) || (bytes[num + 3] != 0x6c)) || ((charType[bytes[num + 4]] & 4) == 0))) { XmlExceptionHelper.ThrowProcessingInstructionNotSupported(this); } if (base.Node.ReadState != System.Xml.ReadState.Initial) { XmlExceptionHelper.ThrowDeclarationNotFirst(this); } base.BufferReader.Advance(5); int offset = num + 1; int length = 3; int num4 = base.BufferReader.Offset; this.SkipWhitespace(); this.ReadAttributes(); int num5 = base.BufferReader.Offset - num4; while (num5 > 0) { byte @byte = base.BufferReader.GetByte((num4 + num5) - 1); if ((charType[@byte] & 4) == 0) { break; } num5--; } bytes = base.BufferReader.GetBuffer(2, out num); if ((bytes[num] != 0x3f) || (bytes[num + 1] != 0x3e)) { XmlExceptionHelper.ThrowTokenExpected(this, "?>", Encoding.UTF8.GetString(bytes, num, 2)); } base.BufferReader.Advance(2); XmlBaseReader.XmlDeclarationNode node = base.MoveToDeclaration(); node.LocalName.SetValue(offset, length); node.Value.SetValue(ValueHandleType.UTF8, num4, num5); }