# Transaction

Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query.

## Generate transaction blob

> Generates a serialized transaction blob for a standard transaction where the \*\*user pays gas fees\*\*.\
> \
> \*\*Flow:\*\*\
> 1\. Call this endpoint with \`txInitiator\` (the address paying gas) and \`operations\`\
> 2\. Receive \`blob\` and \`hash\`\
> 3\. Sign using \`/tx/sign-blob\` or your own Ed25519 signer\
> 4\. Submit via \`/tx/submit\`\
> \
> \*\*Operations:\*\*\
> The \`operations\` array defines what the transaction does. Supported types include \`SEND\_GAS\`, \`TRANSFER\`, \`CONTRACT\_INVOKE\`, and more.\
> \
> \*\*Note:\*\* For gas-free transactions, use \`/tx/paymaster/generate-blob\` instead.

```json
{"openapi":"3.1.0","info":{"title":"Zetrix Microservice API","version":"1.0.0"},"tags":[{"name":"Transaction","description":"Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query."}],"servers":[{"url":"https://api-sandbox.zetrix.com","description":"Sandbox Environment – Use this for development and testing."}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token. Include in all requests as: `Authorization: Bearer <your_access_token>`"}},"parameters":{"X-API-Key":{"name":"X-API-Key","in":"header","required":true,"description":"API key for authentication. Include in all requests.","schema":{"type":"string"}}},"schemas":{"GenerateBlobReqDto":{"type":"object","description":"Request to generate a transaction blob where the user pays gas fees.","required":["operations","txInitiator"],"properties":{"txInitiator":{"type":"string","description":"Zetrix address of the account initiating and paying gas for the transaction."},"operations":{"type":"array","description":"List of operations to execute.","items":{"$ref":"#/components/schemas/OperationsEntity"}},"chainCode":{"type":"string","description":"Chain code identifier. Defaults to `\"0\"`.","default":"0"}}},"OperationsEntity":{"type":"object","description":"A single operation to execute in a transaction. The fields used depend on the operation `type`.","properties":{"type":{"type":"string","description":"Operation type: `SEND_GAS`, `TRANSFER`, `CONTRACT_INVOKE`, `CREATE_ACCOUNT`, `ISSUE_ASSET`, `SEND_ASSET`."},"toAddress":{"type":"string","description":"Destination Zetrix address for transfer-type operations."},"fromAddress":{"type":"string","description":"Source address override (defaults to `txInitiator` if omitted)."},"amount":{"type":"string","description":"Amount in drops (1 ZETRIX = 10^6 drops)."},"inputStr":{"type":"string","description":"JSON-encoded input for contract invocation operations."},"payload":{"type":"string","description":"Contract payload or bytecode (used in contract deployment)."},"precision":{"type":"string","description":"Asset precision (used in asset issuance)."},"metadata":{"type":"string","description":"Optional arbitrary metadata string attached to the operation."}}},"ResponseWrapperGenerateBlobRespDto":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/GenerateBlobRespDto"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResponseMessage"}},"success":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"traceId":{"type":"string"}}},"GenerateBlobRespDto":{"type":"object","description":"Response for transaction blob generation.","required":["blob","hash"],"properties":{"blob":{"type":"string","description":"Hex-encoded serialized transaction blob. Sign before submitting."},"hash":{"type":"string","description":"SHA-256 transaction hash. Required when calling `/tx/sign-blob`."},"actualFee":{"type":"integer","format":"int64","description":"Estimated transaction fee in gas units."},"platformSignData":{"$ref":"#/components/schemas/PlatformSignDataEntity"}}},"PlatformSignDataEntity":{"type":"object","description":"Optional platform co-signature data, present when the platform pre-signs the blob.","properties":{"publicKey":{"type":"string","description":"Platform's public key."},"signBlob":{"type":"string","description":"Platform's signature of the blob."}}},"ResponseMessage":{"type":"object","description":"A response message indicating informational, warning, or error details.","properties":{"type":{"type":"string","description":"Severity: `INFO`, `WARNING`, or `ERROR`.","enum":["INFO","ERROR","WARNING"]},"errorCode":{"type":"integer","format":"int32","description":"Numeric error code (0 = no error)."},"message":{"type":"string","description":"Human-readable description."}}}}},"paths":{"/ztx/tx/generate-blob":{"post":{"tags":["Transaction"],"summary":"Generate transaction blob","operationId":"generateBlob","parameters":[{"$ref":"#/components/parameters/X-API-Key"}],"description":"Generates a serialized transaction blob for a standard transaction where the **user pays gas fees**.\n\n**Flow:**\n1. Call this endpoint with `txInitiator` (the address paying gas) and `operations`\n2. Receive `blob` and `hash`\n3. Sign using `/tx/sign-blob` or your own Ed25519 signer\n4. Submit via `/tx/submit`\n\n**Operations:**\nThe `operations` array defines what the transaction does. Supported types include `SEND_GAS`, `TRANSFER`, `CONTRACT_INVOKE`, and more.\n\n**Note:** For gas-free transactions, use `/tx/paymaster/generate-blob` instead.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBlobReqDto"}}}},"responses":{"200":{"description":"Transaction blob generated successfully. Sign the `blob` and submit via `/tx/submit`.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperGenerateBlobRespDto"}}}}}}}}}
```

## Sign transaction blob

> Signs a transaction blob using one or more private keys. A convenience helper for Ed25519 signing on the server side.\
> \
> \*\*Output:\*\*\
> Returns a \`listSigner\` array — one entry per key — each containing \`signBlob\` (signature) and \`publicKey\`. Pass this directly to \`/tx/submit\` or \`/contract/submit\`.\
> \
> \*\*Security Note:\*\*\
> You are transmitting private keys over the network. Ensure HTTPS is used. For higher-security environments, consider client-side signing instead.

```json
{"openapi":"3.1.0","info":{"title":"Zetrix Microservice API","version":"1.0.0"},"tags":[{"name":"Transaction","description":"Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query."}],"servers":[{"url":"https://api-sandbox.zetrix.com","description":"Sandbox Environment – Use this for development and testing."}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token. Include in all requests as: `Authorization: Bearer <your_access_token>`"}},"parameters":{"X-API-Key":{"name":"X-API-Key","in":"header","required":true,"description":"API key for authentication. Include in all requests.","schema":{"type":"string"}}},"schemas":{"BlobDataReqDto":{"type":"object","description":"Request body for server-side blob signing.","properties":{"blob":{"type":"string","description":"Hex-encoded transaction blob to sign."},"hash":{"type":"string","description":"64-character transaction hash associated with the blob.","minLength":64,"maxLength":64},"privateKeys":{"type":"array","description":"List of Ed25519 private keys (each exactly 56 characters). One `SignerEntity` is returned per key.","minItems":1,"items":{"type":"string","minLength":56,"maxLength":56}}}},"ResponseWrapperListSignerEntity":{"type":"object","properties":{"object":{"type":"array","items":{"$ref":"#/components/schemas/SignerEntity"}},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResponseMessage"}},"success":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"traceId":{"type":"string"}}},"SignerEntity":{"type":"object","description":"A signer object containing a signature and public key pair. Used in transaction/contract submission requests.","properties":{"signBlob":{"type":"string","description":"Hex-encoded Ed25519 signature of the transaction blob."},"publicKey":{"type":"string","description":"Hex-encoded Ed25519 public key of the signer. Must be exactly 76 characters.","minLength":76,"maxLength":76}}},"ResponseMessage":{"type":"object","description":"A response message indicating informational, warning, or error details.","properties":{"type":{"type":"string","description":"Severity: `INFO`, `WARNING`, or `ERROR`.","enum":["INFO","ERROR","WARNING"]},"errorCode":{"type":"integer","format":"int32","description":"Numeric error code (0 = no error)."},"message":{"type":"string","description":"Human-readable description."}}}}},"paths":{"/ztx/tx/sign-blob":{"post":{"tags":["Transaction"],"summary":"Sign transaction blob","operationId":"signBlob","parameters":[{"$ref":"#/components/parameters/X-API-Key"}],"description":"Signs a transaction blob using one or more private keys. A convenience helper for Ed25519 signing on the server side.\n\n**Output:**\nReturns a `listSigner` array — one entry per key — each containing `signBlob` (signature) and `publicKey`. Pass this directly to `/tx/submit` or `/contract/submit`.\n\n**Security Note:**\nYou are transmitting private keys over the network. Ensure HTTPS is used. For higher-security environments, consider client-side signing instead.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlobDataReqDto"}}}},"responses":{"200":{"description":"Blob signed. Use the returned `listSigner` in `/tx/submit` or `/contract/submit`.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperListSignerEntity"}}}}}}}}}
```

## Submit transaction

> Submits a \*\*signed transaction blob\*\* synchronously to the Zetrix blockchain where the user pays gas fees. Blocks until the transaction is confirmed or rejected.\
> \
> \*\*Pre-conditions:\*\*\
> \- \`blob\` from \`/tx/generate-blob\`\
> \- \`listSigner\` from \`/tx/sign-blob\` or your own signer\
> \
> \*\*After submission:\*\*\
> Use the returned \`hash\` to track via \`/tx/query\`.\
> \
> \*\*Note:\*\* For gas-free submission, use \`/tx/paymaster/submit\` instead.

```json
{"openapi":"3.1.0","info":{"title":"Zetrix Microservice API","version":"1.0.0"},"tags":[{"name":"Transaction","description":"Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query."}],"servers":[{"url":"https://api-sandbox.zetrix.com","description":"Sandbox Environment – Use this for development and testing."}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token. Include in all requests as: `Authorization: Bearer <your_access_token>`"}},"parameters":{"X-API-Key":{"name":"X-API-Key","in":"header","required":true,"description":"API key for authentication. Include in all requests.","schema":{"type":"string"}}},"schemas":{"SubmitTxReqDto":{"type":"object","description":"Request body for submitting a signed transaction.","required":["blob","listSigner"],"properties":{"blob":{"type":"string","description":"Hex-encoded transaction blob from `/tx/generate-blob`. Must not be modified."},"listSigner":{"type":"array","description":"List of signers. At least one entry required.","minItems":1,"items":{"$ref":"#/components/schemas/SignerEntity"}}}},"SignerEntity":{"type":"object","description":"A signer object containing a signature and public key pair. Used in transaction/contract submission requests.","properties":{"signBlob":{"type":"string","description":"Hex-encoded Ed25519 signature of the transaction blob."},"publicKey":{"type":"string","description":"Hex-encoded Ed25519 public key of the signer. Must be exactly 76 characters.","minLength":76,"maxLength":76}}},"ResponseWrapperTxSubmitRespDto":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/TxSubmitRespDto"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResponseMessage"}},"success":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"traceId":{"type":"string"}}},"TxSubmitRespDto":{"type":"object","properties":{"hash":{"type":"string","description":"Transaction hash confirming successful broadcast."}}},"ResponseMessage":{"type":"object","description":"A response message indicating informational, warning, or error details.","properties":{"type":{"type":"string","description":"Severity: `INFO`, `WARNING`, or `ERROR`.","enum":["INFO","ERROR","WARNING"]},"errorCode":{"type":"integer","format":"int32","description":"Numeric error code (0 = no error)."},"message":{"type":"string","description":"Human-readable description."}}}}},"paths":{"/ztx/tx/submit":{"post":{"tags":["Transaction"],"summary":"Submit transaction","operationId":"submit","parameters":[{"$ref":"#/components/parameters/X-API-Key"}],"description":"Submits a **signed transaction blob** synchronously to the Zetrix blockchain where the user pays gas fees. Blocks until the transaction is confirmed or rejected.\n\n**Pre-conditions:**\n- `blob` from `/tx/generate-blob`\n- `listSigner` from `/tx/sign-blob` or your own signer\n\n**After submission:**\nUse the returned `hash` to track via `/tx/query`.\n\n**Note:** For gas-free submission, use `/tx/paymaster/submit` instead.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitTxReqDto"}}}},"responses":{"200":{"description":"Transaction submitted and confirmed. Use `hash` to query status.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperTxSubmitRespDto"}}}}}}}}}
```

## Parse transaction blob

> Decodes a hex-encoded transaction blob and returns its human-readable contents: source address, operations, nonce, gas parameters, and chain ID.\
> \
> \*\*Use Cases:\*\*\
> \- Verify what operations are encoded before signing\
> \- Debug or audit transaction contents\
> \- Display transaction details to users for confirmation\
> \
> \*\*Note:\*\* Read-only — does not interact with the blockchain.

```json
{"openapi":"3.1.0","info":{"title":"Zetrix Microservice API","version":"1.0.0"},"tags":[{"name":"Transaction","description":"Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query."}],"servers":[{"url":"https://api-sandbox.zetrix.com","description":"Sandbox Environment – Use this for development and testing."}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token. Include in all requests as: `Authorization: Bearer <your_access_token>`"}},"parameters":{"X-API-Key":{"name":"X-API-Key","in":"header","required":true,"description":"API key for authentication. Include in all requests.","schema":{"type":"string"}}},"schemas":{"ParseBlobReqDto":{"type":"object","description":"Request to parse a transaction blob.","required":["blob"],"properties":{"blob":{"type":"string","description":"Hex-encoded transaction blob to decode."}}},"ResponseWrapperTransactionParseBlobResult":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/TransactionParseBlobResult"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResponseMessage"}},"success":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"traceId":{"type":"string"}}},"TransactionParseBlobResult":{"type":"object","description":"Decoded contents of a transaction blob.","properties":{"sourceAddress":{"type":"string","description":"Address that initiated the transaction."},"feeLimit":{"type":"integer","format":"int64","description":"Maximum gas fee allowed."},"gasPrice":{"type":"integer","format":"int64","description":"Gas price per unit."},"nonce":{"type":"integer","format":"int64","description":"Transaction sequence number."},"chainId":{"type":"integer","format":"int64","description":"Zetrix chain identifier."},"operations":{"type":"array","items":{"$ref":"#/components/schemas/OperationFormat"}}}},"OperationFormat":{"type":"object","description":"Decoded operation from a parsed blob.","properties":{"type":{"type":"string"},"sourceAddress":{"type":"string"},"metadata":{"type":"string"},"sendGas":{"$ref":"#/components/schemas/GasSendInfo"},"sendAsset":{"$ref":"#/components/schemas/AssetSendInfo"},"setMetadata":{"$ref":"#/components/schemas/AccountSetMetadataInfo"},"log":{"$ref":"#/components/schemas/LogInfo"}}},"GasSendInfo":{"type":"object","properties":{"destAddress":{"type":"string"},"amount":{"type":"integer","format":"int64"},"input":{"type":"string"}}},"AssetSendInfo":{"type":"object","properties":{"destAddress":{"type":"string"},"input":{"type":"string"}}},"AccountSetMetadataInfo":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"},"version":{"type":"integer","format":"int64"},"deleteFlag":{"type":"boolean"}}},"LogInfo":{"type":"object","properties":{"topic":{"type":"string"},"datas":{"type":"array","items":{"type":"string"}}}},"ResponseMessage":{"type":"object","description":"A response message indicating informational, warning, or error details.","properties":{"type":{"type":"string","description":"Severity: `INFO`, `WARNING`, or `ERROR`.","enum":["INFO","ERROR","WARNING"]},"errorCode":{"type":"integer","format":"int32","description":"Numeric error code (0 = no error)."},"message":{"type":"string","description":"Human-readable description."}}}}},"paths":{"/ztx/tx/parse-blob":{"post":{"tags":["Transaction"],"summary":"Parse transaction blob","operationId":"parseBlob","parameters":[{"$ref":"#/components/parameters/X-API-Key"}],"description":"Decodes a hex-encoded transaction blob and returns its human-readable contents: source address, operations, nonce, gas parameters, and chain ID.\n\n**Use Cases:**\n- Verify what operations are encoded before signing\n- Debug or audit transaction contents\n- Display transaction details to users for confirmation\n\n**Note:** Read-only — does not interact with the blockchain.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseBlobReqDto"}}}},"responses":{"200":{"description":"Blob parsed. Returns decoded transaction details.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperTransactionParseBlobResult"}}}}}}}}}
```

## Query transaction by hash

> Retrieves the status and full details of a submitted transaction using its transaction hash.\
> \
> For \`txStatus\` lifecycle codes and \`errorCode\` definitions, refer to the \[Zetrix WebSocket Error Codes]\(<https://docs.zetrix.com/en/developer-resources/api/websocket#error-codes).\\>
> \
> \*\*Note:\*\* For paymaster transactions, allow a few seconds after submission before querying as processing is asynchronous.

```json
{"openapi":"3.1.0","info":{"title":"Zetrix Microservice API","version":"1.0.0"},"tags":[{"name":"Transaction","description":"Full transaction lifecycle operations on the Zetrix blockchain. Covers generating, signing, parsing, submitting, and querying both **standard transactions** (user pays gas) and **paymaster-sponsored transactions** (gas-free for users). Typical standard flow: generate blob → sign blob → submit → query."}],"servers":[{"url":"https://api-sandbox.zetrix.com","description":"Sandbox Environment – Use this for development and testing."}],"security":[{"Authorization":[]}],"components":{"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer access token. Include in all requests as: `Authorization: Bearer <your_access_token>`"}},"parameters":{"X-API-Key":{"name":"X-API-Key","in":"header","required":true,"description":"API key for authentication. Include in all requests.","schema":{"type":"string"}}},"schemas":{"ResponseWrapperTxQueryRespDto":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/TxQueryRespDto"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/ResponseMessage"}},"success":{"type":"boolean"},"timestamp":{"type":"string","format":"date-time"},"traceId":{"type":"string"}}},"TxQueryRespDto":{"type":"object","description":"Transaction query result.","properties":{"txStatus":{"type":"string","description":"Numeric transaction lifecycle status code. See [Zetrix WebSocket Error Codes](https://docs.zetrix.com/en/developer-resources/api/websocket#error-codes)."},"txContent":{"$ref":"#/components/schemas/TransactionHistory"}}},"TransactionHistory":{"type":"object","description":"Full on-chain transaction record.","properties":{"hash":{"type":"string","description":"Transaction hash."},"ledgerSeq":{"type":"integer","format":"int64","description":"Block number the transaction was confirmed in."},"actualFee":{"type":"string","description":"Actual fee paid in drops."},"errorCode":{"type":"integer","format":"int32","description":"On-chain execution error code. See [Zetrix WebSocket Error Codes](https://docs.zetrix.com/en/developer-resources/api/websocket#error-codes)."},"errorDesc":{"type":"string","description":"Error description if the transaction failed."},"closeTime":{"type":"integer","format":"int64","description":"Block close timestamp in milliseconds."},"txSize":{"type":"integer","format":"int64","description":"Transaction size in bytes."},"transaction":{"$ref":"#/components/schemas/TransactionInfo"},"signatures":{"type":"array","items":{"$ref":"#/components/schemas/Signature"}},"contractTxHashes":{"type":"array","items":{"type":"string"},"description":"Internal hashes from contract execution."}}},"TransactionInfo":{"type":"object","properties":{"sourceAddress":{"type":"string"},"feeLimit":{"type":"integer","format":"int64"},"gasPrice":{"type":"integer","format":"int64"},"nonce":{"type":"integer","format":"int64"},"chainId":{"type":"integer","format":"int64"}}},"Signature":{"type":"object","properties":{"signData":{"type":"string"},"publicKey":{"type":"string"}}},"ResponseMessage":{"type":"object","description":"A response message indicating informational, warning, or error details.","properties":{"type":{"type":"string","description":"Severity: `INFO`, `WARNING`, or `ERROR`.","enum":["INFO","ERROR","WARNING"]},"errorCode":{"type":"integer","format":"int32","description":"Numeric error code (0 = no error)."},"message":{"type":"string","description":"Human-readable description."}}}}},"paths":{"/ztx/tx/query":{"get":{"tags":["Transaction"],"summary":"Query transaction by hash","operationId":"queryTransaction","description":"Retrieves the status and full details of a submitted transaction using its transaction hash.\n\nFor `txStatus` lifecycle codes and `errorCode` definitions, refer to the [Zetrix WebSocket Error Codes](https://docs.zetrix.com/en/developer-resources/api/websocket#error-codes).\n\n**Note:** For paymaster transactions, allow a few seconds after submission before querying as processing is asynchronous.","parameters":[{"$ref":"#/components/parameters/X-API-Key"},{"name":"hash","in":"query","required":true,"description":"The 64-character transaction hash to look up.","schema":{"type":"string","minLength":64,"maxLength":64}}],"responses":{"200":{"description":"Transaction details returned.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ResponseWrapperTxQueryRespDto"}}}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zetrix.com/en/developer-resources/blockchain-as-a-services-baas/zetrix-service/transaction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
