> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# تعليمات CPMM

> كل تعليمة على برنامج CPMM، مع معاملات التعليمة وقائمة الحسابات والشروط المسبقة واللاحقة والأخطاء التي قد تحدث.

<Info>
  **هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.**

  [عرض النسخة الإنجليزية →](/products/cpmm/instructions)
</Info>

## ملخص التعليمات

| اسم الممیز                 | من یوقع                           | ما تفعله                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| -------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Initialize`               | منشئ التجمع                       | إنشاء تجمع CPMM جديد من عملتين و`AmmConfig`. بدون إذن؛ يمكن لأي شخص استدعاؤها. يحدد بثبات `enable_creator_fee = false` على التجمع الجديد. يمكن أن يكون حساب `pool_state` إما PDA القانونية أو زوج مفاتيح عشوائي جديد (انظر حسابات Initialize).                                                                                                                                                                                                                                                  |
| `InitializeWithPermission` | الدافع + صاحب PDA `Permission`    | نسخة مرخصة من `Initialize`. يجب على المتصل (`payer`) أن يمتلك PDA `Permission` مشتقة من مفتاحه العام. يستخدمه المنصات التي تحتاج إلى إنشاء تجمع محدود (مثل تخرجات LaunchLab). يسمح للمتصل بتحديد `creator_fee_on` (`BothToken` / `OnlyToken0` / `OnlyToken1`) ويفرض `enable_creator_fee = true` على التجمع الجديد. يتم تعيين حقل `creator` على `pool_state` إلى حساب `creator` منفصل تم تمريره، وليس الدافع. نفس المرونة PDA-القانونية-أو-عشوائية-المفاتيح لـ `pool_state` كما في `Initialize`. |
| `Deposit`                  | مزود السيولة                      | إضافة السيولة بكلا الرموز؛ استقبال رموز LP.                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `Withdraw`                 | مزود السيولة                      | حرق رموز LP؛ استقبال كلا الرموز الأساسيين بنسبة.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `SwapBaseInput`            | المتبادل                          | مبادلة دقيقة المدخلات (`amount_in` داخلاً، ≥ `minimum_amount_out` خارجاً).                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `SwapBaseOutput`           | المتبادل                          | مبادلة دقيقة المخرجات (≤ `maximum_amount_in` داخلاً، `amount_out` خارجاً).                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `CollectProtocolFee`       | `protocol_owner` (من `AmmConfig`) | تجميع الرسوم البروتوكول المتراكمة من الخزانات.                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `CollectFundFee`           | `fund_owner` (من `AmmConfig`)     | تجميع رسوم الصندوق المتراكمة من الخزانات.                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `CollectCreatorFee`        | `pool_creator`                    | تجميع رسوم المنشئ المتراكمة (إن كانت رسوم المنشئ مفعلة).                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `UpdatePoolStatus`         | `admin`                           | إيقاف / استئناف عمليات محددة على التجمع عبر قناع البت.                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `UpdateAmmConfig`          | `admin`                           | تغيير معدلات الرسوم أو مالك البروتوكول/الصندوق على `AmmConfig`.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `CreateAmmConfig`          | `admin`                           | إنشاء طبقة رسوم جديدة (حساب `AmmConfig` جديد).                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `CreatePermissionPda`      | `admin`                           | إنشاء PDA `Permission` يسمح لسلطة محددة باستدعاء `InitializeWithPermission`.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `ClosePermissionPda`       | `admin`                           | إلغاء PDA `Permission` صادرة مسبقاً.                                                                                                                                                                                                                                                                                                                                                                                                                                                            |

قناع الحالة: حقل `status` في كل تجمع هو `u8` حيث البت 0 = الإيداع معطل، البت 1 = السحب معطل، البت 2 = المبادلة معطلة (`PoolStatusBitIndex { Deposit, Withdraw, Swap }` في البرنامج). البت الصافي يعني السماح بالعملية؛ البت المضبوط يعني إيقافها. `UpdatePoolStatus` يأخذ `u8` خام ويستبدل القيمة الموجودة.

تمر الأقسام التالية عبر كل واحدة بالتفصيل. ترتيب الحسابات يتبع IDL الخاص بـ CPMM؛ الـ SDK وعميل Rust في `raydium-cp-swap/programs/cp-swap/src/instructions` يطابقان هذا الترتيب.

## `Initialize`

إنشاء تجمع CPMM جديد.

**المعاملات**

```
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix timestamp; swaps rejected before this
```

**الحسابات** (W = قابل للكتابة، S = موقّع)

| #  | الاسم                      | W | S   | ملاحظات                                                                                                                                                                                                                                                                                                                                                                                                                       |
| -- | -------------------------- | - | --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1  | `creator`                  | W | S   | يدفع الإيجار؛ يُسجل باسم `pool_state.pool_creator`.                                                                                                                                                                                                                                                                                                                                                                           |
| 2  | `amm_config`               |   |     | طبقة الرسوم المختارة.                                                                                                                                                                                                                                                                                                                                                                                                         |
| 3  | `authority`                |   |     | PDA سلطة CPMM العالمية.                                                                                                                                                                                                                                                                                                                                                                                                       |
| 4  | `pool_state`               | W | S\* | تُهيأ هنا. **إما** PDA القانونية `["pool", amm_config, token_0_mint, token_1_mint]` **أو** زوج مفاتيح عشوائي جديد — عندما لا تكون PDA القانونية، يتطلب البرنامج توقيع `pool_state` (`require_eq!(pool_account_info.is_signer, true)`). يسمح المسار العشوائي للمفاتيح للمنشئ بتجنب محاولات البيع المسبق على PDA القانونية. تُشتق الـ PDAs اللاحقة (`lp_mint`، `vaults`، `observation_state`) من `pool_state.key()` على أي حال. |
| 5  | `token_0_mint`             |   |     | مرتب: `token_0_mint < token_1_mint`.                                                                                                                                                                                                                                                                                                                                                                                          |
| 6  | `token_1_mint`             |   |     |                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 7  | `lp_mint`                  | W |     | تُهيأ هنا. السلطة معيّنة إلى `authority`.                                                                                                                                                                                                                                                                                                                                                                                     |
| 8  | `creator_token_0`          | W |     | ATA المصدر لـ `init_amount_0`.                                                                                                                                                                                                                                                                                                                                                                                                |
| 9  | `creator_token_1`          | W |     | ATA المصدر لـ `init_amount_1`.                                                                                                                                                                                                                                                                                                                                                                                                |
| 10 | `creator_lp_token`         | W |     | الوجهة لـ LP (تُنشأ إذا فقدت).                                                                                                                                                                                                                                                                                                                                                                                                |
| 11 | `token_0_vault`            | W |     | تُهيأ هنا. مملوكة بواسطة `authority`.                                                                                                                                                                                                                                                                                                                                                                                         |
| 12 | `token_1_vault`            | W |     |                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 13 | `create_pool_fee`          | W |     | ATA الوجهة لـ `create_pool_fee` المدفوعة من قبل المنشئ.                                                                                                                                                                                                                                                                                                                                                                       |
| 14 | `observation_state`        | W |     | تُهيأ هنا.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 15 | `token_program`            |   |     | SPL Token (لـ LP mint).                                                                                                                                                                                                                                                                                                                                                                                                       |
| 16 | `token_0_program`          |   |     | SPL Token أو Token-2022.                                                                                                                                                                                                                                                                                                                                                                                                      |
| 17 | `token_1_program`          |   |     | SPL Token أو Token-2022.                                                                                                                                                                                                                                                                                                                                                                                                      |
| 18 | `associated_token_program` |   |     |                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 19 | `system_program`           |   |     |                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 20 | `rent`                     |   |     |                                                                                                                                                                                                                                                                                                                                                                                                                               |

`*` يوقّع `pool_state` فقط على مسار زوج المفاتيح العشوائي؛ مسار PDA القانونية يعمل بدون توقيع `pool_state`.

**الشروط المسبقة**

* الرموز مرتبة (`token_0_mint < token_1_mint` بترتيب البايت).
* لا تستخدم أي من الرموز ملحقاً خارج قائمة السماح بـ CPMM (`TransferFeeConfig`، `MetadataPointer`، `TokenMetadata`، `InterestBearingConfig`، `ScaledUiAmount`) — انظر [`products/cpmm/accounts`](/ar/products/cpmm/accounts#vaults-and-token-2022). قائمة سماح صغيرة لكل رمز داخل البرنامج تتجاوز الفحص للاستخدام حالة بحالة.
* يمتلك `creator` على الأقل `init_amount_0` و`init_amount_1` في الـ ATAs الخاصة بهما.
* `amm_config.disable_create_pool == false`.

**الشروط اللاحقة**

* يوجد `pool_state` مع `lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP`.
* يتم قفل بادئ LP البالغ `LOCKED_LP` (`100` لامبورت من رمز LP) بشكل دائم في التجمع — `pool_state.lp_supply` يسجل `liquidity − 100` بينما يبقى `100` وحدة LP خارج التداول، مما يمنع التجمع من الاستنزاف الكامل والقسمة على صفر.
* تُهيأ `observation_state`؛ `observation_index = 0` و`pool_id = pool_state.key()`.
* يتم نقل `create_pool_fee` لامبورت من المنشئ إلى المستلم ومزامنتها بـ SOL أصلية (إنها ATA wSOL).
* قناع حالة التجمع هو `0` (الإيداع / السحب / المبادلة كلها مفعلة).
* `enable_creator_fee = false` و`creator_fee_on = BothToken`. `Initialize` **لا** تدعم تفعيل رسوم المنشئ — هذا المسار هو `InitializeWithPermission`.
* يتم زيادة `open_time` إلى `block_timestamp + 1` إذا مرر المتصل قيمة `<= block_timestamp`. يتم رفض المبادلات قبل `open_time`؛ الإيداعات والسحوبات تعمل على الفور.

**الأخطاء الشائعة** (القائمة الكاملة في [`reference/error-codes`](/ar/reference/error-codes))

* `InvalidInput` — رموز غير مرتبة، أو رموز متطابقة.
* `NotSupportMint` — ملحق Token-2022 محجوب.
* `ExceededSlippage` — نادراً؛ إذا أسفر `init_amount_0/1` عن صفر LP بسبب عدم تطابق الكسور العشرية.

## `Deposit`

إضافة السيولة بكلا الرموز بما يتناسب مع التجمع.

**المعاملات**

```
lp_token_amount:   u64   // how many LP tokens to mint to the LP
maximum_token_0:   u64
maximum_token_1:   u64
```

**الحسابات**

| #  | الاسم                | W | S |
| -- | -------------------- | - | - |
| 1  | `owner`              |   | S |
| 2  | `authority`          |   |   |
| 3  | `pool_state`         | W |   |
| 4  | `owner_lp_token`     | W |   |
| 5  | `token_0_account`    | W |   |
| 6  | `token_1_account`    | W |   |
| 7  | `token_0_vault`      | W |   |
| 8  | `token_1_vault`      | W |   |
| 9  | `token_program`      |   |   |
| 10 | `token_program_2022` |   |   |
| 11 | `vault_0_mint`       |   |   |
| 12 | `vault_1_mint`       |   |   |
| 13 | `lp_mint`            | W |   |

**الرياضيات**

```
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
```

لا توجد تغييرات في تناسب `k` — تتوسع كلا الخزانات و`lp_supply` بنفس العامل.

**الشروط اللاحقة**

* `lp_supply += lp_token_amount`.
* `vault_0 += needed_token_0` (صافي أي رسم نقل Token-2022 على الإدخال).
* `vault_1 += needed_token_1` (صافي أي رسم نقل Token-2022 على الإدخال).

**الأخطاء الشائعة** — `ExceededSlippage`، `ZeroTradingTokens`، `InvalidStatus` إذا تم إيقاف الإيداع.

## `Withdraw`

حرق رموز LP واستقبال كلا الرموز الأساسيين بنسبة.

**المعاملات**

```
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
```

**الحسابات**

| #  | الاسم                | W | S |
| -- | -------------------- | - | - |
| 1  | `owner`              |   | S |
| 2  | `authority`          |   |   |
| 3  | `pool_state`         | W |   |
| 4  | `owner_lp_token`     | W |   |
| 5  | `token_0_account`    | W |   |
| 6  | `token_1_account`    | W |   |
| 7  | `token_0_vault`      | W |   |
| 8  | `token_1_vault`      | W |   |
| 9  | `token_program`      |   |   |
| 10 | `token_program_2022` |   |   |
| 11 | `vault_0_mint`       |   |   |
| 12 | `vault_1_mint`       |   |   |
| 13 | `lp_mint`            | W |   |

(مطابقة لـ `Deposit`؛ `lp_mint` قابلة للكتابة لأن رموز LP تُحرق.)

**الرياضيات**

```
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
```

**الشروط اللاحقة**

* `lp_supply -= lp_token_amount`.
* تُرسل الخزانات `out_token_0` / `out_token_1` (إجمالياً؛ يستقبل المستخدم صافي أي رسم نقل Token-2022).

## `SwapBaseInput`

مبادلة دقيقة المدخلات.

**المعاملات**

```
amount_in:            u64
minimum_amount_out:   u64
```

**الحسابات**

| #  | الاسم                  | W | S |
| -- | ---------------------- | - | - |
| 1  | `payer`                |   | S |
| 2  | `authority`            |   |   |
| 3  | `amm_config`           |   |   |
| 4  | `pool_state`           | W |   |
| 5  | `input_token_account`  | W |   |
| 6  | `output_token_account` | W |   |
| 7  | `input_vault`          | W |   |
| 8  | `output_vault`         | W |   |
| 9  | `input_token_program`  |   |   |
| 10 | `output_token_program` |   |   |
| 11 | `input_token_mint`     |   |   |
| 12 | `output_token_mint`    |   |   |
| 13 | `observation_state`    | W |   |

الترتيب **الإدخال → الإخراج** هو باتجاه المستخدم، وليس بـ `token_0 / token_1` القانونية للتجمع. يحدد البرنامج أي خزان هو أي عن طريق مطابقة الرموز.

**الرياضيات** — انظر [`products/cpmm/math`](/ar/products/cpmm/math).

**الشروط المسبقة**

* `open_time <= now`.
* تسمح `pool_status` بالمبادلة.
* لم تتم إيقاف أي من الرموز أو تجميدها لهذه السلطة.
* `amount_in > 0`.

**الأخطاء الشائعة**

* `ExceededSlippage` — `amount_out < minimum_amount_out`.
* `ZeroTradingTokens` — تُقرب التجارة إلى صفر.
* `NotApproved` — يتم إيقاف التجمع للمبادلات عبر `UpdatePoolStatus`.
* `InvalidInput` — الرموز لا تطابق إما من خزانات التجمع.

## `SwapBaseOutput`

مبادلة دقيقة المخرجات.

**المعاملات**

```
max_amount_in:  u64
amount_out:     u64
```

**الحسابات** — نفسها كـ `SwapBaseInput`.

**الرياضيات** — منحنى عكسي مع سقف، انظر [`products/cpmm/math`](/ar/products/cpmm/math).

**الأخطاء الشائعة** — `ExceededSlippage` (`gross_in > max_amount_in`)، `ZeroTradingTokens`، `InvalidInput`، `NotApproved`.

## `CollectProtocolFee`

تجميع رسوم البروتوكول المتراكمة من الخزانات إلى وجهة البروتوكول.

**المعاملات** — لا توجد.

**الحسابات**

| #  | الاسم                       | W | S |                                           |
| -- | --------------------------- | - | - | ----------------------------------------- |
| 1  | `owner`                     |   | S | يجب أن يطابق `amm_config.protocol_owner`. |
| 2  | `authority`                 |   |   |                                           |
| 3  | `pool_state`                | W |   |                                           |
| 4  | `amm_config`                |   |   |                                           |
| 5  | `token_0_vault`             | W |   |                                           |
| 6  | `token_1_vault`             | W |   |                                           |
| 7  | `vault_0_mint`              |   |   |                                           |
| 8  | `vault_1_mint`              |   |   |                                           |
| 9  | `recipient_token_0_account` | W |   |                                           |
| 10 | `recipient_token_1_account` | W |   |                                           |
| 11 | `token_program`             |   |   |                                           |
| 12 | `token_program_2022`        |   |   |                                           |

**التأثير**

```
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
```

لا توجد تغييرات في أرصدة المنحنى الفعلية (تم استبعاد الرسوم المتراكمة بالفعل).

**الخطأ الشائع** — `NotApproved` إذا لم يكن الموقّع `protocol_owner`.

## `CollectFundFee`

نفس الشكل كـ `CollectProtocolFee` لكن يوقّع بواسطة `fund_owner` ويصفر عدادات `fund_fees_*`.

## `CollectCreatorFee`

نفس الشكل مرة أخرى، موقّع بواسطة `pool_state.pool_creator`. يُصدر النقل فقط إذا تم تهيئة التجمع بمعدل رسوم منشئ غير صفري.

## `UpdatePoolStatus`

إيقاف أو استئناف عمليات فردية على التجمع. حقل `status` هو قناع بت:

| البت | العلم               | التأثير عند التعيين                        |
| ---- | ------------------- | ------------------------------------------ |
| 0    | `DEPOSIT_DISABLED`  | `Deposit` ترفضها بـ `NotApproved`.         |
| 1    | `WITHDRAW_DISABLED` | `Withdraw` ترفضها.                         |
| 2    | `SWAP_DISABLED`     | `SwapBaseInput` / `SwapBaseOutput` ترفضها. |

**المعاملات**

```
status: u8      // new bitmask
```

**الحسابات**

| # | الاسم        | W | S |                                             |
| - | ------------ | - | - | ------------------------------------------- |
| 1 | `authority`  |   | S | يجب أن يطابق مفتاح الإدارة على برنامج CPMM. |
| 2 | `pool_state` | W |   |                                             |

مفتاح الإدارة هو سلطة الترقية على برنامج CPMM — في الممارسة العملية، مجموعة Raydium متعددة التوقيع. انظر [`security/admin-and-multisig`](/ar/security/admin-and-multisig).

## `CreateAmmConfig`

إنشاء طبقة رسوم جديدة.

**المعاملات**

```
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
```

**الحسابات**

| # | الاسم            | W | S |            |
| - | ---------------- | - | - | ---------- |
| 1 | `owner`          | W | S | إدارة.     |
| 2 | `amm_config`     | W |   | تُهيأ هنا. |
| 3 | `system_program` |   |   |            |

**الشروط المسبقة**

* لا توجد `AmmConfig` موجودة بنفس `index`.
* `protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE`.

## `UpdateAmmConfig`

تغيير معدلات الرسوم أو الملكية على `AmmConfig` موجودة. يأخذ `param: u8` (ممیز للحقل المراد تحديثه) و`value: u64`. دلالات القيمة لكل معامل موجودة في المصدر؛ عادة ما تكون:

* `param = 0` → `trade_fee_rate`
* `param = 1` → `protocol_fee_rate`
* `param = 2` → `fund_fee_rate`
* `param = 3` → `new_protocol_owner` (مرر بايتات `Pubkey` كإعادة تفسير)
* `param = 4` → `new_fund_owner`
* `param = 5` → `create_pool_fee`
* `param = 6` → `disable_create_pool`

يتم توقيع التغييرات بواسطة الإدارة وتؤثر على **كل تجمع مرتبط بـ `AmmConfig`** عند المبادلة التالية. لا توجد هجرة؛ التجمعات تقرأ ببساطة القيم الجديدة.

## مصفوفة تغيير الحالة

| التعليمة                   | `lp_supply` | أرصدة الخزانات             | حقول الرسوم المتراكمة                                                   | `observation`                |
| -------------------------- | ----------- | -------------------------- | ----------------------------------------------------------------------- | ---------------------------- |
| `Initialize`               | + init LP   | + `init_amount_{0,1}`      | 0                                                                       | init                         |
| `InitializeWithPermission` | + init LP   | + `init_amount_{0,1}`      | 0                                                                       | init                         |
| `Deposit`                  | +           | + كلاهما                   | —                                                                       | —                            |
| `Withdraw`                 | −           | − كلاهما                   | —                                                                       | —                            |
| `SwapBaseInput`            | —           | + في، − خارج               | + `trade_fee` منقسمة إلى بروتوكول/صندوق؛ + `creator_fee` إذا كانت مفعلة | + (إذا انقضت الفترة الزمنية) |
| `SwapBaseOutput`           | —           | + في، − خارج               | + `trade_fee` منقسمة إلى بروتوكول/صندوق؛ + `creator_fee` إذا كانت مفعلة | + (إذا انقضت الفترة الزمنية) |
| `CollectProtocolFee`       | —           | − (بواسطة سلات البروتوكول) | `protocol_*` → 0                                                        | —                            |
| `CollectFundFee`           | —           | − (بواسطة سلات الصندوق)    | `fund_*` → 0                                                            | —                            |
| `CollectCreatorFee`        | —           | − (بواسطة سلات المنشئ)     | `creator_*` → 0                                                         | —                            |
| `UpdatePoolStatus`         | —           | —                          | —                                                                       | —                            |

## إلى أين تذهب بعد ذلك

* [`products/cpmm/code-demos`](/ar/products/cpmm/code-demos) — عينات TypeScript قابلة للتشغيل للعناصر أعلاه.
* [`reference/error-codes`](/ar/reference/error-codes) — جدول خطأ Anchor الكامل.
* [`products/cpmm/fees`](/ar/products/cpmm/fees) — نموذج تراكم الرسوم الذي تصفيه `CollectProtocolFee` / `CollectFundFee` / `CollectCreatorFee`.

المصادر:

* [`raydium-io/raydium-cp-swap` — instructions](https://github.com/raydium-io/raydium-cp-swap/tree/master/programs/cp-swap/src/instructions)
* [Raydium SDK v2 — `@raydium-io/raydium-sdk-v2`](https://github.com/raydium-io/raydium-sdk-V2)
