package cain_028_001_01

import (
	"bytes"
	"encoding/base64"
	"encoding/xml"
	"time"
)

type AdditionalData1 struct {
	Tp  Max35Text   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Val Max2048Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Val,omitempty"`
}

type AdditionalFee1 struct {
	Tp         TypeOfAmount10Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp"`
	OthrTp     Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	FeePrgm    Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 FeePrgm,omitempty"`
	FeeDscrptr Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 FeeDscrptr,omitempty"`
	Amt        FeeAmount2         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Labl       Max140Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Labl,omitempty"`
}

type AdditionalInformation20 struct {
	Rcpt     PartyType22Code      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcpt,omitempty"`
	OthrRcpt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRcpt,omitempty"`
	Trgt     []UserInterface6Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Trgt,omitempty"`
	OthrTrgt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTrgt,omitempty"`
	Frmt     OutputFormat4Code    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Frmt,omitempty"`
	OthrFrmt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrFrmt,omitempty"`
	Tp       Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Val      Max20KText           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Val"`
}

type Algorithm13Code string

type Algorithm20Code string

type Algorithm23Code string

type Algorithm5Code string

type Algorithm7Code string

type Algorithm8Code string

type AlgorithmIdentification25 struct {
	Algo  Algorithm23Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter7      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification26 struct {
	Algo  Algorithm8Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Algorithm5Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification27 struct {
	Algo  Algorithm7Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter13    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification28 struct {
	Algo  Algorithm13Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter14     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type Amount4 struct {
	Amt      float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy      ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy,omitempty"`
	XchgRate float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgRate,omitempty"`
	QtnDt    ISODateTime             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 QtnDt,omitempty"`
}

type Amount5 struct {
	Amt float64 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Sgn bool    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sgn,omitempty"`
}

type AttributeType1Code string

type BatchManagementInformation1 struct {
	ColltnId         Max35Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ColltnId,omitempty"`
	BtchId           Max35Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BtchId"`
	MsgSeqNb         Max15NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgSeqNb,omitempty"`
	MsgChcksmInptVal Max140Binary     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgChcksmInptVal,omitempty"`
}

type BytePadding1Code string

type CardData5 struct {
	PAN           Max19NumericText    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PAN,omitempty"`
	PrtctdPANInd  bool                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtctdPANInd,omitempty"`
	CardSeqNb     Min2Max3NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardSeqNb,omitempty"`
	PmtAcctRef    Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PmtAcctRef,omitempty"`
	PANAcctRg     Max19NumericText    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PANAcctRg,omitempty"`
	CardPrtflIdr  Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardPrtflIdr,omitempty"`
	AddtlCardData Max70Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlCardData,omitempty"`
}

type CardProgrammeMode1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
}

type CertificateIssuer1 struct {
	RltvDstngshdNm []RelativeDistinguishedName1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RltvDstngshdNm"`
}

type ChargeBackResponse1 struct {
	Envt        Environment14        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Envt"`
	Cntxt       Context9             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Cntxt"`
	Tx          Transaction97        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tx"`
	PrcgRslt    ProcessingResult7    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrcgRslt"`
	PrtctdData  []ProtectedData1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtctdData,omitempty"`
	SplmtryData []SupplementaryData1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SplmtryData,omitempty"`
}

type ChargeBackResponseV01 struct {
	Hdr      Header40                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Hdr"`
	Body     ChargeBackResponse1      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Body"`
	SctyTrlr ContentInformationType20 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SctyTrlr,omitempty"`
}

type ContentInformationType20 struct {
	MACData MACData1          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MACData"`
	MAC     Max8HexBinaryText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MAC"`
}

type ContentType2Code string

type ContentType3Code string

type Context9 struct {
	TxCntxt TransactionContext3 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxCntxt,omitempty"`
}

type DetailAmount1Code string

type DetailedAmount19 struct {
	Tp             DetailAmount1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp"`
	OthrTp         Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	Amt            Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	CrdhldrBllgAmt Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
	Labl           Max70Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Labl,omitempty"`
}

type DisputeData1 struct {
	PresntmntCycl  Exact1NumericText   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntCycl,omitempty"`
	DsptCond       Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptCond,omitempty"`
	DsptSts        Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptSts,omitempty"`
	PrtlDspt       bool                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtlDspt,omitempty"`
	DsptRef        []DisputeReference1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptRef,omitempty"`
	DcmnttnSts     Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DcmnttnSts,omitempty"`
	AddtlDsptData  Max1000Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlDsptData,omitempty"`
	DsptRjctRsn    []Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptRjctRsn,omitempty"`
	ChrgbckElgblty Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChrgbckElgblty,omitempty"`
}

type DisputeIdentification1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max70Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
}

type DisputeReference1 struct {
	AssgnrNtty     PartyType32Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AssgnrNtty,omitempty"`
	OthrAssgnrNtty Max35Text                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrAssgnrNtty,omitempty"`
	DsptId         []DisputeIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptId"`
}

type Document struct {
	ChrgBckRspn ChargeBackResponseV01 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChrgBckRspn"`
}

type EncryptedContent5 struct {
	CnttTp         ContentType2Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttTp"`
	CnttNcrptnAlgo AlgorithmIdentification25 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttNcrptnAlgo"`
	NcrptdDataElmt []EncryptedDataElement1   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataElmt"`
}

type EncryptedData1 struct {
	Ctrl           Exact1HexBinaryText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctrl,omitempty"`
	KeySetIdr      Max8NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeySetIdr,omitempty"`
	DrvdInf        Max32HexBinaryText      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DrvdInf,omitempty"`
	Algo           Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo,omitempty"`
	KeyLngth       Max4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyLngth,omitempty"`
	KeyPrtcn       Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyPrtcn,omitempty"`
	KeyIndx        Max5NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIndx,omitempty"`
	PddgMtd        Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PddgMtd,omitempty"`
	NcrptdDataFrmt Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataFrmt,omitempty"`
	NcrptdDataElmt []EncryptedDataElement1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataElmt"`
}

type EncryptedData1Choice struct {
	BinryData   Max100KBinary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BinryData"`
	HexBinryVal string        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 HexBinryVal"`
}

type EncryptedDataElement1 struct {
	Id                   ExternalEncryptedElementIdentification1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	OthrId               Max35Text                                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrId,omitempty"`
	NcrptdData           EncryptedData1Choice                        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdData"`
	ClearTxtDataFrmt     EncryptedDataFormat1Code                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ClearTxtDataFrmt,omitempty"`
	OthrClearTxtDataFrmt Max35Text                                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrClearTxtDataFrmt,omitempty"`
}

type EncryptedDataFormat1Code string

type EncryptionFormat3Code string

type EnvelopedData6 struct {
	Vrsn       float64            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	Rcpt       []Recipient7Choice `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcpt"`
	NcrptdCntt EncryptedContent5  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdCntt,omitempty"`
}

type Environment14 struct {
	Acqrr  PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Acqrr"`
	Sndr   PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sndr,omitempty"`
	Rcvr   PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcvr,omitempty"`
	Accptr PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Accptr,omitempty"`
	Termnl Terminal2              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Termnl,omitempty"`
	Card   CardData5              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Card"`
	Tkn    Token1                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tkn,omitempty"`
}

type Exact12Text string

type Exact15Text string

type Exact1HexBinaryText string

type Exact1NumericText string

type Exact2AlphaNumericText string

type Exact2NumericText string

type Exact4NumericText string

type ExternalEncryptedElementIdentification1Code string

type FeeAmount2 struct {
	Amt      float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy      ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy,omitempty"`
	XchgRate float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgRate,omitempty"`
	QtnDt    ISODateTime             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 QtnDt,omitempty"`
	Sgn      bool                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sgn,omitempty"`
}

type GenericIdentification172 struct {
	Id     Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Tp     PartyType17Code   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	OthrTp Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	Assgnr PartyType18Code   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry   Min2Max3AlphaText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
}

type Header40 struct {
	MsgFctn        MessageFunction20Code       `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgFctn"`
	PrtcolVrsn     Max2048Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtcolVrsn"`
	XchgId         Max35Text                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgId,omitempty"`
	ReTrnsmssnCntr Max3NumericText             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ReTrnsmssnCntr,omitempty"`
	CreDtTm        ISODateTime                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CreDtTm"`
	BtchMgmtInf    BatchManagementInformation1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BtchMgmtInf,omitempty"`
	InitgPty       GenericIdentification172    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitgPty"`
	RcptPty        GenericIdentification172    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcptPty,omitempty"`
	TracData       []AdditionalData1           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracData,omitempty"`
	Tracblt        []Traceability7             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tracblt,omitempty"`
}

type ISO3NumericCountryCode string

type ISO3NumericCurrencyCode string

type ISODate time.Time

func (t *ISODate) UnmarshalText(text []byte) error {
	return (*xsdDate)(t).UnmarshalText(text)
}
func (t ISODate) MarshalText() ([]byte, error) {
	return xsdDate(t).MarshalText()
}

type ISODateTime time.Time

func (t *ISODateTime) UnmarshalText(text []byte) error {
	return (*xsdDateTime)(t).UnmarshalText(text)
}
func (t ISODateTime) MarshalText() ([]byte, error) {
	return xsdDateTime(t).MarshalText()
}

type ISOTime time.Time

func (t *ISOTime) UnmarshalText(text []byte) error {
	return (*xsdTime)(t).UnmarshalText(text)
}
func (t ISOTime) MarshalText() ([]byte, error) {
	return xsdTime(t).MarshalText()
}

type IssuerAndSerialNumber1 struct {
	Issr  CertificateIssuer1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Issr"`
	SrlNb Max35Binary        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SrlNb"`
}

type KEK6 struct {
	Vrsn          float64                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	KEKId         KEKIdentifier6            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KEKId"`
	KeyNcrptnAlgo AlgorithmIdentification28 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyNcrptnAlgo"`
	NcrptdKey     Max500Binary              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdKey,omitempty"`
}

type KEKIdentifier2 struct {
	KeyId     Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyId"`
	KeyVrsn   Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyVrsn"`
	SeqNb     float64         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SeqNb,omitempty"`
	DerivtnId Min5Max16Binary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DerivtnId,omitempty"`
}

type KEKIdentifier6 struct {
	KeyId     Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyId"`
	KeyVrsn   Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyVrsn,omitempty"`
	SeqNb     float64         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SeqNb,omitempty"`
	DerivtnId Min5Max16Binary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DerivtnId,omitempty"`
}

type KeyTransport6 struct {
	Vrsn          float64                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	RcptId        Recipient5Choice          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcptId"`
	KeyNcrptnAlgo AlgorithmIdentification27 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyNcrptnAlgo"`
	NcrptdKey     Max5000Binary             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdKey"`
}

type MACData1 struct {
	Ctrl         Exact1HexBinaryText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctrl"`
	KeySetIdr    Max8NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeySetIdr"`
	DrvdInf      Max32HexBinaryText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DrvdInf,omitempty"`
	Algo         Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	KeyLngth     Max4NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyLngth,omitempty"`
	KeyPrtcn     Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyPrtcn,omitempty"`
	KeyIndx      Max5NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIndx,omitempty"`
	PddgMtd      Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PddgMtd,omitempty"`
	InitlstnVctr Max32HexBinaryText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
}

type Max1000Text string

type Max100KBinary []byte

func (t *Max100KBinary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max100KBinary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max11NumericText string

type Max12NumericText string

type Max140Binary []byte

func (t *Max140Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max140Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max140Text string

type Max15NumericText string

type Max16Text string

type Max19NumericText string

type Max2048Text string

type Max20KText string

type Max23NumericText string

type Max2NumericText string

type Max32HexBinaryText string

type Max350Text string

type Max35Binary []byte

func (t *Max35Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max35Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max35Text string

type Max3NumericText string

type Max4NumericText string

type Max5000Binary []byte

func (t *Max5000Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max5000Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max500Binary []byte

func (t *Max500Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max500Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max5NumericText string

type Max70Text string

type Max8HexBinaryText string

type Max8NumericText string

type Max99Text string

type MessageFunction20Code string

type Min2Max3AlphaText string

type Min2Max3NumericText string

type Min5Max16Binary []byte

func (t *Min5Max16Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Min5Max16Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type OriginalTransactionAmount1 struct {
	AmtQlfr        TypeOfAmount11Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AmtQlfr,omitempty"`
	TxAmt          TransactionAmount1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmt"`
	CrdhldrBllgAmt Amount4            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount4            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
}

type OutputFormat4Code string

type Parameter13 struct {
	DgstAlgo     Algorithm20Code           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DgstAlgo,omitempty"`
	MskGnrtrAlgo AlgorithmIdentification26 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MskGnrtrAlgo,omitempty"`
}

type Parameter14 struct {
	NcrptnFrmt   EncryptionFormat3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptnFrmt,omitempty"`
	InitlstnVctr Max500Binary          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
	BPddg        BytePadding1Code      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BPddg,omitempty"`
}

type Parameter7 struct {
	InitlstnVctr Max500Binary     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
	BPddg        BytePadding1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BPddg,omitempty"`
}

type PartyIdentification197 struct {
	Id      Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Assgnr  Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry    ISO3NumericCountryCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm  Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
	AddtlId Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlId,omitempty"`
}

type PartyType17Code string

type PartyType18Code string

type PartyType22Code string

type PartyType32Code string

type Priority3Code string

type ProcessingResult7 struct {
	RsltData      ResultData1               `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RsltData,omitempty"`
	OrgnlRsltData ResultData1               `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OrgnlRsltData,omitempty"`
	AddtlInf      []AdditionalInformation20 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlInf,omitempty"`
}

type ProtectedData1 struct {
	CnttTp     ContentType3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttTp"`
	EnvlpdData EnvelopedData6   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 EnvlpdData,omitempty"`
	NcrptdData EncryptedData1   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdData,omitempty"`
}

type Recipient5Choice struct {
	IssrAndSrlNb IssuerAndSerialNumber1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 IssrAndSrlNb"`
	KeyIdr       KEKIdentifier2         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIdr"`
}

type Recipient7Choice struct {
	KeyTrnsprt KeyTransport6  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyTrnsprt"`
	KEK        KEK6           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KEK"`
	KeyIdr     KEKIdentifier6 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIdr"`
}

type Reconciliation3 struct {
	Id        Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	Dt        ISODate   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Dt,omitempty"`
	ChckptRef Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChckptRef,omitempty"`
}

type RelativeDistinguishedName1 struct {
	AttrTp  AttributeType1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AttrTp"`
	AttrVal Max140Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AttrVal"`
}

type Response8Code string

type ResultData1 struct {
	Rslt         Response8Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rslt,omitempty"`
	OthrRslt     Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRslt,omitempty"`
	RsltDtls     Exact2AlphaNumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RsltDtls"`
	OthrRsltDtls Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRsltDtls,omitempty"`
	AddtlRsltInf []AdditionalData1      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlRsltInf,omitempty"`
}

type SettlementReportingEntity1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
}

type SettlementService2 struct {
	SttlmSvcApld  SettlementServiceMode1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvcApld,omitempty"`
	SttlmSvcDts   SettlementServiceDate1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvcDts,omitempty"`
	SttlmRptgNtty SettlementReportingEntity1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmRptgNtty,omitempty"`
}

type SettlementServiceDate1 struct {
	ReqdSttlmDt   ISODate     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ReqdSttlmDt,omitempty"`
	SttlmDt       ISODate     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmDt,omitempty"`
	SttlmTm       ISOTime     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmTm,omitempty"`
	SttlmPrd      Max35Text   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmPrd,omitempty"`
	SttlmCutOffTm ISODateTime `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmCutOffTm,omitempty"`
}

type SettlementServiceMode1 struct {
	Tp        Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id        Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	ShrtNm    Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
	SttlmPrty Priority3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmPrty,omitempty"`
}

type SupplementaryData1 struct {
	PlcAndNm Max350Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PlcAndNm,omitempty"`
	Envlp    SupplementaryDataEnvelope1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Envlp"`
}

type SupplementaryDataEnvelope1 struct {
	Item string `xml:",any"`
}

type Terminal2 struct {
	TermnlId TerminalIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TermnlId"`
}

type TerminalIdentification1 struct {
	Id     Max16Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Assgnr Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry   Min2Max3AlphaText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
}

type Token1 struct {
	PmtTkn        Max19NumericText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PmtTkn,omitempty"`
	TknXpryDt     Exact4NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknXpryDt,omitempty"`
	TknRqstrId    Max11NumericText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknRqstrId,omitempty"`
	TknAssrncData Max140Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknAssrncData,omitempty"`
	TknAssrncMtd  Max2NumericText   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknAssrncMtd,omitempty"`
	TknInittdInd  bool              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknInittdInd,omitempty"`
}

type Traceability7 struct {
	RlayId      GenericIdentification172 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RlayId"`
	TracDtTmIn  ISODateTime              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracDtTmIn,omitempty"`
	TracDtTmOut ISODateTime              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracDtTmOut,omitempty"`
}

type Transaction97 struct {
	MsgRsn      []Exact4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgRsn,omitempty"`
	AltrnMsgRsn []Max35Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AltrnMsgRsn,omitempty"`
	TxId        TransactionIdentification10 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxId"`
	TxAmts      TransactionAmounts1         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmts"`
	DsptData    DisputeData1                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptData"`
	AddtlFees   []AdditionalFee1            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlFees,omitempty"`
	AddtlInf    AdditionalInformation20     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlInf,omitempty"`
	AddtlData   []AdditionalData1           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlData,omitempty"`
}

type TransactionAmount1 struct {
	Amt float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy"`
}

type TransactionAmounts1 struct {
	AmtQlfr        TypeOfAmount11Code         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AmtQlfr,omitempty"`
	TxAmt          TransactionAmount1         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmt,omitempty"`
	CrdhldrBllgAmt Amount4                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount4                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
	DtldAmt        []DetailedAmount19         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DtldAmt,omitempty"`
	OrgnlTxAmts    OriginalTransactionAmount1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OrgnlTxAmts,omitempty"`
}

type TransactionContext3 struct {
	MrchntCtgyCd   Exact4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MrchntCtgyCd,omitempty"`
	TxInitr        TransactionInitiator1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxInitr,omitempty"`
	CardPrgrmmApld CardProgrammeMode1        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardPrgrmmApld,omitempty"`
	SttlmSvc       SettlementService2        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvc,omitempty"`
	Rcncltn        Reconciliation3           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcncltn,omitempty"`
}

type TransactionIdentification10 struct {
	LclDtTm             ISODateTime                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LclDtTm"`
	TmZone              Max70Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TmZone,omitempty"`
	TxRef               Max35Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxRef,omitempty"`
	TrnsmssnDtTm        ISODateTime                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TrnsmssnDtTm,omitempty"`
	SysTracAudtNb       Max12NumericText                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SysTracAudtNb"`
	RtrvlRefNb          Exact12Text                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RtrvlRefNb"`
	LifeCyclSpprtInd    Exact2NumericText                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclSpprtInd,omitempty"`
	LifeCyclTracIdData  TransactionLifeCycleIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclTracIdData,omitempty"`
	LifeCyclTracIdMssng Max70Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclTracIdMssng,omitempty"`
	AcqrrRefData        Max99Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AcqrrRefData,omitempty"`
	AcqrrRefNb          Max23NumericText                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AcqrrRefNb,omitempty"`
	CardIssrRefData     Max1000Text                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardIssrRefData,omitempty"`
}

type TransactionInitiator1Code string

type TransactionLifeCycleIdentification1 struct {
	Id              Exact15Text       `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	AuthstnSeqNb    Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AuthstnSeqNb,omitempty"`
	PresntmntSeqNb  Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntSeqNb,omitempty"`
	PresntmntSeqCnt Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntSeqCnt,omitempty"`
	AuthntcnTkn     Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AuthntcnTkn,omitempty"`
}

type TypeOfAmount10Code string

type TypeOfAmount11Code string

type UserInterface6Code string

type xsdBase64Binary []byte

func (b *xsdBase64Binary) UnmarshalText(text []byte) (err error) {
	*b, err = base64.StdEncoding.DecodeString(string(text))
	return
}
func (b xsdBase64Binary) MarshalText() ([]byte, error) {
	var buf bytes.Buffer
	enc := base64.NewEncoder(base64.StdEncoding, &buf)
	enc.Write([]byte(b))
	enc.Close()
	return buf.Bytes(), nil
}

type xsdDate time.Time

func (t *xsdDate) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "2006-01-02")
}
func (t xsdDate) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "2006-01-02")
}
func (t xsdDate) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdDate) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}
func _unmarshalTime(text []byte, t *time.Time, format string) (err error) {
	s := string(bytes.TrimSpace(text))
	*t, err = time.Parse(format, s)
	if _, ok := err.(*time.ParseError); ok {
		*t, err = time.Parse(format+"Z07:00", s)
	}
	return err
}
func _marshalTime(t time.Time, format string) ([]byte, error) {
	return []byte(t.Format(format + "Z07:00")), nil
}

type xsdDateTime time.Time

func (t *xsdDateTime) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "2006-01-02T15:04:05.999999999")
}
func (t xsdDateTime) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "2006-01-02T15:04:05.999999999")
}
func (t xsdDateTime) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdDateTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}

type xsdTime time.Time

func (t *xsdTime) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "15:04:05.999999999")
}
func (t xsdTime) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "15:04:05.999999999")
}
func (t xsdTime) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}
// Code generated by main. DO NOT EDIT.

package cain_028_001_01

import (
	"bytes"
	"encoding/base64"
	"encoding/xml"
	"time"
)

type AdditionalData1 struct {
	Tp  Max35Text   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Val Max2048Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Val,omitempty"`
}

type AdditionalFee1 struct {
	Tp         TypeOfAmount10Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp"`
	OthrTp     Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	FeePrgm    Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 FeePrgm,omitempty"`
	FeeDscrptr Max35Text          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 FeeDscrptr,omitempty"`
	Amt        FeeAmount2         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Labl       Max140Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Labl,omitempty"`
}

type AdditionalInformation20 struct {
	Rcpt     PartyType22Code      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcpt,omitempty"`
	OthrRcpt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRcpt,omitempty"`
	Trgt     []UserInterface6Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Trgt,omitempty"`
	OthrTrgt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTrgt,omitempty"`
	Frmt     OutputFormat4Code    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Frmt,omitempty"`
	OthrFrmt Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrFrmt,omitempty"`
	Tp       Max35Text            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Val      Max20KText           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Val"`
}

// May be one of EA2C, E3DC, DKP9, UKPT, UKA1, EA9C, EA5C
type Algorithm13Code string

// May be one of HS25, HS38, HS51
type Algorithm20Code string

// May be one of EA2C, E3DC, EA9C, EA5C, EA2R, EA9R, EA5R, E3DR, E36C, E36R, SD5C
type Algorithm23Code string

// May be one of HS25, HS38, HS51
type Algorithm5Code string

// May be one of ERSA, RSAO
type Algorithm7Code string

// May be one of MGF1
type Algorithm8Code string

type AlgorithmIdentification25 struct {
	Algo  Algorithm23Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter7      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification26 struct {
	Algo  Algorithm8Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Algorithm5Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification27 struct {
	Algo  Algorithm7Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter13    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type AlgorithmIdentification28 struct {
	Algo  Algorithm13Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	Param Parameter14     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Param,omitempty"`
}

type Amount4 struct {
	Amt      float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy      ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy,omitempty"`
	XchgRate float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgRate,omitempty"`
	QtnDt    ISODateTime             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 QtnDt,omitempty"`
}

type Amount5 struct {
	Amt float64 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Sgn bool    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sgn,omitempty"`
}

// May be one of CNAT, LATT, OATT, OUAT, CATT
type AttributeType1Code string

type BatchManagementInformation1 struct {
	ColltnId         Max35Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ColltnId,omitempty"`
	BtchId           Max35Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BtchId"`
	MsgSeqNb         Max15NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgSeqNb,omitempty"`
	MsgChcksmInptVal Max140Binary     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgChcksmInptVal,omitempty"`
}

// May be one of LNGT, NUL8, NULG, NULL, RAND
type BytePadding1Code string

type CardData5 struct {
	PAN           Max19NumericText    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PAN,omitempty"`
	PrtctdPANInd  bool                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtctdPANInd,omitempty"`
	CardSeqNb     Min2Max3NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardSeqNb,omitempty"`
	PmtAcctRef    Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PmtAcctRef,omitempty"`
	PANAcctRg     Max19NumericText    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PANAcctRg,omitempty"`
	CardPrtflIdr  Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardPrtflIdr,omitempty"`
	AddtlCardData Max70Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlCardData,omitempty"`
}

type CardProgrammeMode1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
}

type CertificateIssuer1 struct {
	RltvDstngshdNm []RelativeDistinguishedName1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RltvDstngshdNm"`
}

type ChargeBackResponse1 struct {
	Envt        Environment14        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Envt"`
	Cntxt       Context9             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Cntxt"`
	Tx          Transaction97        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tx"`
	PrcgRslt    ProcessingResult7    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrcgRslt"`
	PrtctdData  []ProtectedData1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtctdData,omitempty"`
	SplmtryData []SupplementaryData1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SplmtryData,omitempty"`
}

type ChargeBackResponseV01 struct {
	Hdr      Header40                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Hdr"`
	Body     ChargeBackResponse1      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Body"`
	SctyTrlr ContentInformationType20 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SctyTrlr,omitempty"`
}

type ContentInformationType20 struct {
	MACData MACData1          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MACData"`
	MAC     Max8HexBinaryText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MAC"`
}

// May be one of DATA, SIGN, EVLP, DGST, AUTH
type ContentType2Code string

// May be one of EVLP, IFSE
type ContentType3Code string

type Context9 struct {
	TxCntxt TransactionContext3 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxCntxt,omitempty"`
}

// May be one of CSHB, DONN, DCCF, EXTR, FORX, GRTY, OTHN, OTHP, SRCH, TAXT
type DetailAmount1Code string

type DetailedAmount19 struct {
	Tp             DetailAmount1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp"`
	OthrTp         Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	Amt            Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	CrdhldrBllgAmt Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount5           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
	Labl           Max70Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Labl,omitempty"`
}

type DisputeData1 struct {
	PresntmntCycl  Exact1NumericText   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntCycl,omitempty"`
	DsptCond       Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptCond,omitempty"`
	DsptSts        Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptSts,omitempty"`
	PrtlDspt       bool                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtlDspt,omitempty"`
	DsptRef        []DisputeReference1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptRef,omitempty"`
	DcmnttnSts     Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DcmnttnSts,omitempty"`
	AddtlDsptData  Max1000Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlDsptData,omitempty"`
	DsptRjctRsn    []Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptRjctRsn,omitempty"`
	ChrgbckElgblty Max35Text           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChrgbckElgblty,omitempty"`
}

type DisputeIdentification1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max70Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
}

type DisputeReference1 struct {
	AssgnrNtty     PartyType32Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AssgnrNtty,omitempty"`
	OthrAssgnrNtty Max35Text                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrAssgnrNtty,omitempty"`
	DsptId         []DisputeIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptId"`
}

type Document struct {
	ChrgBckRspn ChargeBackResponseV01 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChrgBckRspn"`
}

type EncryptedContent5 struct {
	CnttTp         ContentType2Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttTp"`
	CnttNcrptnAlgo AlgorithmIdentification25 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttNcrptnAlgo"`
	NcrptdDataElmt []EncryptedDataElement1   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataElmt"`
}

type EncryptedData1 struct {
	Ctrl           Exact1HexBinaryText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctrl,omitempty"`
	KeySetIdr      Max8NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeySetIdr,omitempty"`
	DrvdInf        Max32HexBinaryText      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DrvdInf,omitempty"`
	Algo           Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo,omitempty"`
	KeyLngth       Max4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyLngth,omitempty"`
	KeyPrtcn       Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyPrtcn,omitempty"`
	KeyIndx        Max5NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIndx,omitempty"`
	PddgMtd        Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PddgMtd,omitempty"`
	NcrptdDataFrmt Max2NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataFrmt,omitempty"`
	NcrptdDataElmt []EncryptedDataElement1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdDataElmt"`
}

type EncryptedData1Choice struct {
	BinryData   Max100KBinary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BinryData"`
	HexBinryVal string        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 HexBinryVal"`
}

type EncryptedDataElement1 struct {
	Id                   ExternalEncryptedElementIdentification1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	OthrId               Max35Text                                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrId,omitempty"`
	NcrptdData           EncryptedData1Choice                        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdData"`
	ClearTxtDataFrmt     EncryptedDataFormat1Code                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ClearTxtDataFrmt,omitempty"`
	OthrClearTxtDataFrmt Max35Text                                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrClearTxtDataFrmt,omitempty"`
}

// May be one of ASCI, BINF, EBCD, HEXF, OTHN, OTHP
type EncryptedDataFormat1Code string

// May be one of TR34, TR31, CTCE, CBCE
type EncryptionFormat3Code string

type EnvelopedData6 struct {
	Vrsn       float64            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	Rcpt       []Recipient7Choice `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcpt"`
	NcrptdCntt EncryptedContent5  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdCntt,omitempty"`
}

type Environment14 struct {
	Acqrr  PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Acqrr"`
	Sndr   PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sndr,omitempty"`
	Rcvr   PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcvr,omitempty"`
	Accptr PartyIdentification197 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Accptr,omitempty"`
	Termnl Terminal2              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Termnl,omitempty"`
	Card   CardData5              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Card"`
	Tkn    Token1                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tkn,omitempty"`
}

// May be no more than 12 items long
type Exact12Text string

// May be no more than 15 items long
type Exact15Text string

// Must match the pattern ([0-9A-F][0-9A-F]){1}
type Exact1HexBinaryText string

// Must match the pattern [0-9]
type Exact1NumericText string

// Must match the pattern [a-zA-Z0-9]{2}
type Exact2AlphaNumericText string

// Must match the pattern [0-9]{2}
type Exact2NumericText string

// Must match the pattern [0-9]{4}
type Exact4NumericText string

// Must match the pattern ([0-9A-F][0-9A-F]){1,3}
type ExternalEncryptedElementIdentification1Code string

type FeeAmount2 struct {
	Amt      float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy      ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy,omitempty"`
	XchgRate float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgRate,omitempty"`
	QtnDt    ISODateTime             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 QtnDt,omitempty"`
	Sgn      bool                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Sgn,omitempty"`
}

type GenericIdentification172 struct {
	Id     Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Tp     PartyType17Code   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	OthrTp Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrTp,omitempty"`
	Assgnr PartyType18Code   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry   Min2Max3AlphaText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
}

type Header40 struct {
	MsgFctn        MessageFunction20Code       `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgFctn"`
	PrtcolVrsn     Max2048Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PrtcolVrsn"`
	XchgId         Max35Text                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 XchgId,omitempty"`
	ReTrnsmssnCntr Max3NumericText             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ReTrnsmssnCntr,omitempty"`
	CreDtTm        ISODateTime                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CreDtTm"`
	BtchMgmtInf    BatchManagementInformation1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BtchMgmtInf,omitempty"`
	InitgPty       GenericIdentification172    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitgPty"`
	RcptPty        GenericIdentification172    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcptPty,omitempty"`
	TracData       []AdditionalData1           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracData,omitempty"`
	Tracblt        []Traceability7             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tracblt,omitempty"`
}

// Must match the pattern [0-9]{3,3}
type ISO3NumericCountryCode string

// Must match the pattern [0-9]{3,3}
type ISO3NumericCurrencyCode string

type ISODate time.Time

func (t *ISODate) UnmarshalText(text []byte) error {
	return (*xsdDate)(t).UnmarshalText(text)
}
func (t ISODate) MarshalText() ([]byte, error) {
	return xsdDate(t).MarshalText()
}

type ISODateTime time.Time

func (t *ISODateTime) UnmarshalText(text []byte) error {
	return (*xsdDateTime)(t).UnmarshalText(text)
}
func (t ISODateTime) MarshalText() ([]byte, error) {
	return xsdDateTime(t).MarshalText()
}

type ISOTime time.Time

func (t *ISOTime) UnmarshalText(text []byte) error {
	return (*xsdTime)(t).UnmarshalText(text)
}
func (t ISOTime) MarshalText() ([]byte, error) {
	return xsdTime(t).MarshalText()
}

type IssuerAndSerialNumber1 struct {
	Issr  CertificateIssuer1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Issr"`
	SrlNb Max35Binary        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SrlNb"`
}

type KEK6 struct {
	Vrsn          float64                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	KEKId         KEKIdentifier6            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KEKId"`
	KeyNcrptnAlgo AlgorithmIdentification28 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyNcrptnAlgo"`
	NcrptdKey     Max500Binary              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdKey,omitempty"`
}

type KEKIdentifier2 struct {
	KeyId     Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyId"`
	KeyVrsn   Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyVrsn"`
	SeqNb     float64         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SeqNb,omitempty"`
	DerivtnId Min5Max16Binary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DerivtnId,omitempty"`
}

type KEKIdentifier6 struct {
	KeyId     Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyId"`
	KeyVrsn   Max140Text      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyVrsn,omitempty"`
	SeqNb     float64         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SeqNb,omitempty"`
	DerivtnId Min5Max16Binary `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DerivtnId,omitempty"`
}

type KeyTransport6 struct {
	Vrsn          float64                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Vrsn,omitempty"`
	RcptId        Recipient5Choice          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcptId"`
	KeyNcrptnAlgo AlgorithmIdentification27 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyNcrptnAlgo"`
	NcrptdKey     Max5000Binary             `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdKey"`
}

type MACData1 struct {
	Ctrl         Exact1HexBinaryText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctrl"`
	KeySetIdr    Max8NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeySetIdr"`
	DrvdInf      Max32HexBinaryText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DrvdInf,omitempty"`
	Algo         Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Algo"`
	KeyLngth     Max4NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyLngth,omitempty"`
	KeyPrtcn     Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyPrtcn,omitempty"`
	KeyIndx      Max5NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIndx,omitempty"`
	PddgMtd      Max2NumericText     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PddgMtd,omitempty"`
	InitlstnVctr Max32HexBinaryText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
}

// Must be at least 1 items long
type Max1000Text string

type Max100KBinary []byte

func (t *Max100KBinary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max100KBinary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

// Must match the pattern [0-9]{1,11}
type Max11NumericText string

// Must match the pattern [0-9]{1,12}
type Max12NumericText string

type Max140Binary []byte

func (t *Max140Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max140Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

// Must be at least 1 items long
type Max140Text string

// Must match the pattern [0-9]{1,15}
type Max15NumericText string

// Must be at least 1 items long
type Max16Text string

// Must match the pattern [0-9]{1,19}
type Max19NumericText string

// Must be at least 1 items long
type Max2048Text string

// Must be at least 1 items long
type Max20KText string

// Must match the pattern [0-9]{1,23}
type Max23NumericText string

// Must match the pattern [0-9]{1,2}
type Max2NumericText string

// Must match the pattern ([0-9A-F][0-9A-F]){1,32}
type Max32HexBinaryText string

// Must be at least 1 items long
type Max350Text string

type Max35Binary []byte

func (t *Max35Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max35Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

// Must be at least 1 items long
type Max35Text string

// Must match the pattern [0-9]{1,3}
type Max3NumericText string

// Must match the pattern [0-9]{1,4}
type Max4NumericText string

type Max5000Binary []byte

func (t *Max5000Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max5000Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type Max500Binary []byte

func (t *Max500Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Max500Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

// Must match the pattern [0-9]{1,5}
type Max5NumericText string

// Must be at least 1 items long
type Max70Text string

// Must match the pattern ([0-9A-F][0-9A-F]){1,8}
type Max8HexBinaryText string

// Must match the pattern [0-9]{1,8}
type Max8NumericText string

// Must be at least 1 items long
type Max99Text string

// May be one of ADVC, NOTI, REQU, RVRA, RVNO, STAD, STNO
type MessageFunction20Code string

// Must match the pattern [a-zA-Z]{2,3}
type Min2Max3AlphaText string

// Must match the pattern [0-9]{2,3}
type Min2Max3NumericText string

type Min5Max16Binary []byte

func (t *Min5Max16Binary) UnmarshalText(text []byte) error {
	return (*xsdBase64Binary)(t).UnmarshalText(text)
}
func (t Min5Max16Binary) MarshalText() ([]byte, error) {
	return xsdBase64Binary(t).MarshalText()
}

type OriginalTransactionAmount1 struct {
	AmtQlfr        TypeOfAmount11Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AmtQlfr,omitempty"`
	TxAmt          TransactionAmount1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmt"`
	CrdhldrBllgAmt Amount4            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount4            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
}

// May be one of FLNM, MREF, OTHN, OTHP, SMSI, TEXT, URLI, HTML
type OutputFormat4Code string

type Parameter13 struct {
	DgstAlgo     Algorithm20Code           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DgstAlgo,omitempty"`
	MskGnrtrAlgo AlgorithmIdentification26 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MskGnrtrAlgo,omitempty"`
}

type Parameter14 struct {
	NcrptnFrmt   EncryptionFormat3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptnFrmt,omitempty"`
	InitlstnVctr Max500Binary          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
	BPddg        BytePadding1Code      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BPddg,omitempty"`
}

type Parameter7 struct {
	InitlstnVctr Max500Binary     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 InitlstnVctr,omitempty"`
	BPddg        BytePadding1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 BPddg,omitempty"`
}

type PartyIdentification197 struct {
	Id      Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Assgnr  Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry    ISO3NumericCountryCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm  Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
	AddtlId Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlId,omitempty"`
}

// May be one of OTHN, OTHP, ACQR, ACQP, CISS, CISP, AGNT
type PartyType17Code string

// May be one of ACQR, CISS, CSCH, AGNT
type PartyType18Code string

// May be one of CRDH, MERC, OTHN, OTHP, AGNT
type PartyType22Code string

// May be one of ACQR, AGNT, ISUR, OTHN, OTHP
type PartyType32Code string

// May be one of URGT, HIGH, NORM
type Priority3Code string

type ProcessingResult7 struct {
	RsltData      ResultData1               `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RsltData,omitempty"`
	OrgnlRsltData ResultData1               `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OrgnlRsltData,omitempty"`
	AddtlInf      []AdditionalInformation20 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlInf,omitempty"`
}

type ProtectedData1 struct {
	CnttTp     ContentType3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CnttTp"`
	EnvlpdData EnvelopedData6   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 EnvlpdData,omitempty"`
	NcrptdData EncryptedData1   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 NcrptdData,omitempty"`
}

type Recipient5Choice struct {
	IssrAndSrlNb IssuerAndSerialNumber1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 IssrAndSrlNb"`
	KeyIdr       KEKIdentifier2         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIdr"`
}

type Recipient7Choice struct {
	KeyTrnsprt KeyTransport6  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyTrnsprt"`
	KEK        KEK6           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KEK"`
	KeyIdr     KEKIdentifier6 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 KeyIdr"`
}

type Reconciliation3 struct {
	Id        Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	Dt        ISODate   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Dt,omitempty"`
	ChckptRef Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ChckptRef,omitempty"`
}

type RelativeDistinguishedName1 struct {
	AttrTp  AttributeType1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AttrTp"`
	AttrVal Max140Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AttrVal"`
}

// May be one of PRCS, UNPR, UNRV, REJT, TECH, OTHN, OTHP
type Response8Code string

type ResultData1 struct {
	Rslt         Response8Code          `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rslt,omitempty"`
	OthrRslt     Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRslt,omitempty"`
	RsltDtls     Exact2AlphaNumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RsltDtls"`
	OthrRsltDtls Max35Text              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OthrRsltDtls,omitempty"`
	AddtlRsltInf []AdditionalData1      `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlRsltInf,omitempty"`
}

type SettlementReportingEntity1 struct {
	Tp Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id Max35Text `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
}

type SettlementService2 struct {
	SttlmSvcApld  SettlementServiceMode1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvcApld,omitempty"`
	SttlmSvcDts   SettlementServiceDate1     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvcDts,omitempty"`
	SttlmRptgNtty SettlementReportingEntity1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmRptgNtty,omitempty"`
}

type SettlementServiceDate1 struct {
	ReqdSttlmDt   ISODate     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ReqdSttlmDt,omitempty"`
	SttlmDt       ISODate     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmDt,omitempty"`
	SttlmTm       ISOTime     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmTm,omitempty"`
	SttlmPrd      Max35Text   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmPrd,omitempty"`
	SttlmCutOffTm ISODateTime `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmCutOffTm,omitempty"`
}

type SettlementServiceMode1 struct {
	Tp        Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Tp,omitempty"`
	Id        Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id,omitempty"`
	ShrtNm    Max35Text     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
	SttlmPrty Priority3Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmPrty,omitempty"`
}

type SupplementaryData1 struct {
	PlcAndNm Max350Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PlcAndNm,omitempty"`
	Envlp    SupplementaryDataEnvelope1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Envlp"`
}

type SupplementaryDataEnvelope1 struct {
	Item string `xml:",any"`
}

type Terminal2 struct {
	TermnlId TerminalIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TermnlId"`
}

type TerminalIdentification1 struct {
	Id     Max16Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	Assgnr Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Assgnr,omitempty"`
	Ctry   Min2Max3AlphaText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ctry,omitempty"`
	ShrtNm Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 ShrtNm,omitempty"`
}

type Token1 struct {
	PmtTkn        Max19NumericText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PmtTkn,omitempty"`
	TknXpryDt     Exact4NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknXpryDt,omitempty"`
	TknRqstrId    Max11NumericText  `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknRqstrId,omitempty"`
	TknAssrncData Max140Text        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknAssrncData,omitempty"`
	TknAssrncMtd  Max2NumericText   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknAssrncMtd,omitempty"`
	TknInittdInd  bool              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TknInittdInd,omitempty"`
}

type Traceability7 struct {
	RlayId      GenericIdentification172 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RlayId"`
	TracDtTmIn  ISODateTime              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracDtTmIn,omitempty"`
	TracDtTmOut ISODateTime              `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TracDtTmOut,omitempty"`
}

type Transaction97 struct {
	MsgRsn      []Exact4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MsgRsn,omitempty"`
	AltrnMsgRsn []Max35Text                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AltrnMsgRsn,omitempty"`
	TxId        TransactionIdentification10 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxId"`
	TxAmts      TransactionAmounts1         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmts"`
	DsptData    DisputeData1                `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DsptData"`
	AddtlFees   []AdditionalFee1            `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlFees,omitempty"`
	AddtlInf    AdditionalInformation20     `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlInf,omitempty"`
	AddtlData   []AdditionalData1           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AddtlData,omitempty"`
}

type TransactionAmount1 struct {
	Amt float64                 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Amt"`
	Ccy ISO3NumericCurrencyCode `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Ccy"`
}

type TransactionAmounts1 struct {
	AmtQlfr        TypeOfAmount11Code         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AmtQlfr,omitempty"`
	TxAmt          TransactionAmount1         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxAmt,omitempty"`
	CrdhldrBllgAmt Amount4                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CrdhldrBllgAmt,omitempty"`
	RcncltnAmt     Amount4                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RcncltnAmt,omitempty"`
	DtldAmt        []DetailedAmount19         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 DtldAmt,omitempty"`
	OrgnlTxAmts    OriginalTransactionAmount1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 OrgnlTxAmts,omitempty"`
}

type TransactionContext3 struct {
	MrchntCtgyCd   Exact4NumericText         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 MrchntCtgyCd,omitempty"`
	TxInitr        TransactionInitiator1Code `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxInitr,omitempty"`
	CardPrgrmmApld CardProgrammeMode1        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardPrgrmmApld,omitempty"`
	SttlmSvc       SettlementService2        `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SttlmSvc,omitempty"`
	Rcncltn        Reconciliation3           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Rcncltn,omitempty"`
}

type TransactionIdentification10 struct {
	LclDtTm             ISODateTime                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LclDtTm"`
	TmZone              Max70Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TmZone,omitempty"`
	TxRef               Max35Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TxRef,omitempty"`
	TrnsmssnDtTm        ISODateTime                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 TrnsmssnDtTm,omitempty"`
	SysTracAudtNb       Max12NumericText                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 SysTracAudtNb"`
	RtrvlRefNb          Exact12Text                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 RtrvlRefNb"`
	LifeCyclSpprtInd    Exact2NumericText                   `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclSpprtInd,omitempty"`
	LifeCyclTracIdData  TransactionLifeCycleIdentification1 `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclTracIdData,omitempty"`
	LifeCyclTracIdMssng Max70Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 LifeCyclTracIdMssng,omitempty"`
	AcqrrRefData        Max99Text                           `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AcqrrRefData,omitempty"`
	AcqrrRefNb          Max23NumericText                    `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AcqrrRefNb,omitempty"`
	CardIssrRefData     Max1000Text                         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 CardIssrRefData,omitempty"`
}

// May be one of MERC, CUST
type TransactionInitiator1Code string

type TransactionLifeCycleIdentification1 struct {
	Id              Exact15Text       `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 Id"`
	AuthstnSeqNb    Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AuthstnSeqNb,omitempty"`
	PresntmntSeqNb  Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntSeqNb,omitempty"`
	PresntmntSeqCnt Exact2NumericText `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 PresntmntSeqCnt,omitempty"`
	AuthntcnTkn     Max35Text         `xml:"urn:iso:std:iso:20022:tech:xsd:cain.028.001.01 AuthntcnTkn,omitempty"`
}

// May be one of INTC, FEEP, OTHN, OTHP, FEEA
type TypeOfAmount10Code string

// May be one of ACTL, DFLT, ESTM, MAXI, RESD, PRXY, DPST
type TypeOfAmount11Code string

// May be one of CDSP, CRCP, MDSP, MRCP, CRDO, FILE, CHAP, MRAP, MRIN
type UserInterface6Code string

type xsdBase64Binary []byte

func (b *xsdBase64Binary) UnmarshalText(text []byte) (err error) {
	*b, err = base64.StdEncoding.DecodeString(string(text))
	return
}
func (b xsdBase64Binary) MarshalText() ([]byte, error) {
	var buf bytes.Buffer
	enc := base64.NewEncoder(base64.StdEncoding, &buf)
	enc.Write([]byte(b))
	enc.Close()
	return buf.Bytes(), nil
}

type xsdDate time.Time

func (t *xsdDate) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "2006-01-02")
}
func (t xsdDate) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "2006-01-02")
}
func (t xsdDate) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdDate) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}
func _unmarshalTime(text []byte, t *time.Time, format string) (err error) {
	s := string(bytes.TrimSpace(text))
	*t, err = time.Parse(format, s)
	if _, ok := err.(*time.ParseError); ok {
		*t, err = time.Parse(format+"Z07:00", s)
	}
	return err
}
func _marshalTime(t time.Time, format string) ([]byte, error) {
	return []byte(t.Format(format + "Z07:00")), nil
}

type xsdDateTime time.Time

func (t *xsdDateTime) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "2006-01-02T15:04:05.999999999")
}
func (t xsdDateTime) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "2006-01-02T15:04:05.999999999")
}
func (t xsdDateTime) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdDateTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}

type xsdTime time.Time

func (t *xsdTime) UnmarshalText(text []byte) error {
	return _unmarshalTime(text, (*time.Time)(t), "15:04:05.999999999")
}
func (t xsdTime) MarshalText() ([]byte, error) {
	return _marshalTime((time.Time)(t), "15:04:05.999999999")
}
func (t xsdTime) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
	if (time.Time)(t).IsZero() {
		return nil
	}
	m, err := t.MarshalText()
	if err != nil {
		return err
	}
	return e.EncodeElement(m, start)
}
func (t xsdTime) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
	if (time.Time)(t).IsZero() {
		return xml.Attr{}, nil
	}
	m, err := t.MarshalText()
	return xml.Attr{Name: name, Value: string(m)}, err
}
