Перейти к основному содержанию
`Ctrl`+`K`

# Подготовка и включение кросс-компиляции модуля для Scala 3

Кросс-компиляция в режиме `-Xsource:3` (обозначаемом как `x3-source`) позволяет постепенно адаптировать кодовую базу, написанную на Scala 2, к синтаксическим и семантическим требованиям Scala 3 — без немедленного полного перехода на новый компилятор.

Этот режим:

- выявляет несовместимости, которые будут критичны при будущем переходе на Scala 3;

- позволяет исправлять их итеративно, сохраняя работоспособность модуля на Scala 2;

- подготавливает экосистему модулей к плавной миграции, минимизируя риски при финальном переходе.

Включение `x3-source` — обязательный этап модернизации кодовой базы, обеспечивающий долгосрочную поддержку, совместимость с новыми версиями библиотек и возможность использования современных возможностей языка в будущем.

## Общий порядок актуализации модуля

1. Сгенерируйте исходный код по всему модулю.

2. Включите флаг `x3-source` на модуле.

3. Выполните сборку проекта.

МР с примером включения флага `x3-source` на модуле `bs`.

При возникновении ошибок во время сборки исправьте их в соответствии с данным разделом.
Некоторые ошибки нельзя исправить сразу из-за требований обратной совместимости. В таких случаях выполняется только подготовка. Если вы столкнулись с такими ошибками:

1. Внесите полные исправления по всему модулю, даже если они нарушают обратную совместимость — это необходимо, чтобы убедиться, что модуль полностью исправлен.

2. Если после этого сборка падает с ошибками в дочерних модулях — сделайте изменения обратно совместимыми.

3. Выключите флаг `x3-source`.

4. Выпустите новую версию модуля.

5. Дождитесь, пока модуль распространится по основным проектам (на это выделяется время для актуализации зависимых модулей).

6. После этого замените подготовительные конструкции на окончательные исправления.

7. Включите флаг `x3-source` и закоммитьте его.

## Порядок миграции модулей

Модули обрабатываются строго от базовых к прикладным (`gtkjpa` → `gtk` → `btk` → …). Это обязательно, чтобы:

- сначала обновить основу системы;

- избежать блокировок из-за неготовых зависимостей;

- обеспечить обратную совместимость, так как такое направление позволяет не тормозить процесс миграции: пока идёт подготовка прикладных модулей, базовые уже постепенно распространяются по проектам.

Детальная карта модулей.

Процедура:

- Первый проход: перепишите все `duplicate`-методы и отображения без флага.

- Второй проход (через ~1 месяц): действуйте согласно общему порядку.

- Третий проход — по оставшимся модулям через ещё ~1 месяц.

Примечание

На момент 04.12.2025: `gtk`, `btk`, `idm`, `vci` уже переведены; `bs` — подготовлен, но флаг не включён.

## Подготовка модуля к включению флага

### 1. Генерация исходного кода по всему модулю

Все модули уже частично подготовлены для перехода на Scala 3, так как был переписан генератор исходного кода.

Модуль `btk` уже переписан и корректно генерирует исходный код модуля в режиме частичной совместимости со Scala 3, минимально необходимой для работы режима `x3-source`. Поэтому необходимо сгенерировать исходный код модуля.

Генерация исходного кода по модулю актуализирует старые классы.

- Инструкция по генерации исходного кода.

- Пример в модуле `bs`.

### 2. Включение флага `x3-source`

Для этого необходимо в файле `application/<module_name>/build.sbt` добавить настройку:

    .settings(
      scalacOptions ++= {
        if ((Global / Build.gsfScalaFeatureRelease).value.equals(ScalaVersionNames.ver_3)) {
          Seq.empty[String]
        } else {
          Seq("-Wconf:cat=scala3-migration:e", "-Xsource:3")
        }
      }
    )

Пример в модуле `bs`.

### 3. Пересобрать проект и выполнить компиляцию

Выполните `reload sbt`, чтобы пересобрать структуру проекта с учётом нового флага.

После пересборки структуры проекта выполните компиляцию проекта через `rebuild project`.

## Основные ошибки

### 1. Наследование отображений

Из-за того, что в `Dvi` всем отображениям были добавлены префиксы `Dvi` (Было: `Default`, Стало: `DviDefault`), возникают ошибки в конструкторах отображений в `Avi`, так как они ссылаются на несуществующие отображения, потому что они не переопределены в `Avi`.

К примеру, существует конструктор:

    def card_ObjectAttr(): Card_ObjectAttr = {
      new Card_ObjectAttr {
        override def meta: TypeTag = this
      }
    }

Но само переопределение отсутствует в `Avi`. Для исправления необходимо добавить его:

    trait Card_ObjectAttr extends DviDefault with DviCard_ObjectAttr

Также в `Avi` некоторые отображения наследуются от старых определений в `Dvi`, например:

    trait CardInput extends super.Card

После генерации исходного кода `super.Card`, который ссылается на отображение в `Dvi`, не валиден. Для исправления необходимо заменить наследование:

    trait CardInput extends DviCard

Пример в модуле `bs`.

### 2. Синтаксис при переопределении

Если в классе-предке объявлен метод со скобками и возвращаемым типом, то при переопределении необходимо также указывать тип и скобки.

    class Default {
      def test(): Unit = ?
    }

    class List extends {
      // Так будет ошибка, так как отсутствуют скобки
      override test: Unit = ?
    }

### 3. Наследование переопределённых выборок

В Scala 3 запрещены переопределения с одинаковым наименованием, то есть конструкции: `trait Default extends super.Default`.
Для исправления необходимо переименовать трейт переопределения отображения, но оставить конструктор отображения и разметку в `Avm`, чтобы не сломать существующие `Jexl`-скрипты, проектный код и связанные модули.

Это необходимо, чтобы не сломать обратную совместимость. К примеру, у нас есть класс `Btk_FileAvi` и `Cnt_FileAvi`. Если мы переименуем отображение в `Btk_FileAvi`, то его нужно будет сразу менять и в `Cnt_FileAvi`, что ломает обратную совместимость между модулями.

После переименования отображения необходимо заменить его фабрику на следующую, где в `selFactoryName` указывается системное наименование отображения:

    override def list(): BsAcSubstitutionAviList = {
      new BsAcSubstitutionAviList {
        override def meta: TypeTag = this
        override def selFactoryName: String = "List"
      }
    }

В данном примере отображение `List` было переименовано в `BsAcSubstitutionAviList`, но наименование метода-конструктора остаётся прежним.

Учесть, что при переименовании отображения в переопределённой выборке (например, в `Bs_Application` `Default` в `BsApplicationAviDefault`) у этого отображения могут быть свои переопределения. В таких случаях необходимо создавать тип с новым наименованием для обратной совместимости:

    def default(): BsApplicationAviDefault = {
      new BsApplicationAviDefault {
        override def meta: TypeTag = this
        override def selFactoryName: String = "Default"
      }
    }

    /**
     * todo(x3-source) подождать пока распространится на проекты, переименовать в зависимых модулях наследование, подождать ещё недельку и удалить здесь Default
     */
    type BsApplicationAviDefault = Default

    @deprecated("Используйте BsApplicationAviDefault")
    trait Default extends super.Default {
      override def onLoadMeta(): Unit = {
        super.onLoadMeta()
        if (selection.attrs().exists("idGlobalBisObjHL")){
          selection.attrs("idGlobalBisObjHL").isVisible = Bs_SettingsApi().getbUseBisObj
        }
        addVar("sIdDepOwnerName#", "idGlobalDepOwner".ns, FieldType.ftString)
      }
    }

В таком случае `x3-source` сразу включить не получится, так как остаётся `trait Default extends super.Default`, и придётся ждать неделю, чтобы `bs` распространился по проектам. После этого измените наследование в зависимых модулях с `Default` на `BsApplicationAviDefault`, подождите ещё неделю и уже тогда в `Bs_Application` удалите тип, переименуйте `Default` в `BsApplicationAviDefault` и включите `x3-source`.

Комментарий оставляйте, как в примере выше (можно с указанием даты), чтобы потом было проще искать такие места и убирать обратную совместимость.

Пример в модуле `bs`.

## Карта модулей

Ниже приведены зависимости модулей в виде карты: `<модуль>` → отсортированный список от кого он зависит.
Карта отсортирована и поможет определить направление миграции.

    gtkjpa ->
    gtk -> gtkjpa
    btk -> gtk, gtkjpa
    bts -> btk, gtk, gtkjpa
    dit -> btk, gtk, gtkjpa
    msr -> btk, gtk, gtkjpa
    vci -> gtk, btk, gtkjpa
    btktst -> btk, gtk, gtkjpa
    clr -> btk, gtk, gtkjpa
    sur -> btk, gtk, bts, gtkjpa
    rpt -> gtk, btk, bts, gtkjpa
    rpl -> btk, bts, gtk, gtkjpa
    cur -> btk, bts, gtk, gtkjpa
    gar -> bts, btk, gtk, gtkjpa
    prm -> bts, gtkjpa, gtk, msr, btk
    rgn -> bts, gtkjpa, gtk, btk, cur
    tax -> bts, gtkjpa, gtk, btk, rgn, cur
    bwf -> bts, gtkjpa, gtk, tax, rpt, btk, rgn, cur
    bs -> bts, gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, prm, rpt
    est -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    bld -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    lti -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    bpm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    mpr -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    lic -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    kpi -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    bbb -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    rsm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    yms -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    gds -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    rss -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    idm -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    rcm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
    qj -> gtkjpa, gtk, msr, tax, bpm, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    tr -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, clr, bts, bs, prm, rpt
    pacs -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    wf -> gtkjpa, gtk, msr, tax, bpm, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
    csc -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
    prc -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
    eta -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
    rpltst -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
    bhr -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
    svd -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
    co -> gtkjpa, gtk, msr, tax, prc, btk, bbb, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
    qt -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, rss, bts, bs, prm, rpt, clr, gds
    eqp -> gtkjpa, gtk, msr, bpm, btk, cur, bwf, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
    chm -> gtkjpa, gtk, msr, tax, qt, btk, bbb, rgn, cur, bwf, rss, bts, bs, prm, rpt, clr, gds
    cnt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mdm -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, rgn, cur, bwf, bts, bs, prc, bpm, prm, rpt, clr, gds
    prt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    ccs -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    rzd -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    cpx -> est, gtkjpa, gtk, msr, eqp, bpm, btk, cur, bwf, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
    crm -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    bdg -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    ins -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    stk -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    prs -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    stm -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    wms -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    dct -> gtkjpa, gtk, msr, eqp, bpm, btk, cur, bwf, bhr, rss, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
    pro -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    act -> gtkjpa, gtk, tax, btk, bbb, cur, cnt, bwf, bts, bs, co, msr, prc, bpm, prm, rpt, wf, rgn, clr, gds
    edi -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    tpl -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    oil -> gtkjpa, gtk, rzd, msr, tax, btk, bbb, cur, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    proit -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    ppp -> gtkjpa, gtk, msr, eqp, btk, bbb, cur, cnt, bwf, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
    tsk -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    wmsstk -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mct -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, csc, gds
    procnt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    ppm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    oco -> gtkjpa, gtk, msr, tax, stm, rpl, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    pm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    rcr -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, bhr, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    proccs -> gtkjpa, gtk, ccs, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    demo -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    asf -> gtkjpa, gtk, tax, btk, bbb, cur, stk, bwf, bts, bs, co, msr, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
    tms -> gtkjpa, gtk, rzd, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    supint -> gtkjpa, gtk, msr, tax, proit, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
    wmsstm -> gtkjpa, gtk, msr, tax, stm, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mrt -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    ymsstm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, yms, stk, clr, gds
    wmsyms -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, yms, stk, clr, gds
    probdg -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, bdg, prm, rpt, wf, rgn, cnt, pro, clr, gds
    crmstm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, crm, prm, rpt, wf, rgn, clr, gds
    stmprs -> gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
    fin -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    sale -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    div -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mctqj -> gtkjpa, gtk, msr, tax, qj, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    ppmprs -> gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, ppm, bwf, clr, gds
    pdoc -> gtk, msr, tax, stm, btk, bbb, cur, stmprs, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mes -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    ddp -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
    aps -> gtkjpa, gtk, msr, eqp, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
    promct -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
    pmbdg -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, bdg, prm, rpt, wf, rgn, clr, gds
    stmasf -> gtkjpa, tax, stm, btk, bbb, cur, stk, bwf, bts, bs, gtk, asf, co, msr, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
    mctprs -> gtk, msr, tax, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    mnc -> gtk, tax, mpr, qt, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, co, msr, prc, bpm, prm, rpt, wf, rgn, clr, gds
    asfeqp -> gtkjpa, eqp, btk, bbb, cur, stk, bwf, bts, bs, gtk, asf, co, msr, tax, bld, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
    eam -> gtk, msr, eqp, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
    srm -> gtk, msr, tax, sur, stm, pdoc, btk, bbb, cur, stmprs, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
    qms -> gtkjpa, gtk, msr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    wmsmes -> gtkjpa, gtk, msr, wms, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    promes -> gtkjpa, gtk, msr, rpl, btk, bbb, cur, stk, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
    mncco -> gtk, tax, mpr, qt, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, co, msr, prc, bpm, mnc, prm, rpt, wf, rgn, clr, gds
    tls -> gtk, msr, eqp, eam, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mesprs -> gtk, msr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    fmea -> gtk, msr, eam, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, eqp, sur, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mmr -> gtk, msr, rpl, btk, mesprs, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    e1c -> pm, gtk, msr, tax, stm, rpl, pdoc, btk, bbb, cur, stmprs, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
    mnf -> gtkjpa, gtk, msr, eqp, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, rss, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
    dlv -> gtk, msr, stm, rpl, btk, mesprs, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    acteam -> gtk, eqp, eam, mpr, btk, bbb, cur, stk, bwf, rss, bts, bs, prs, gtkjpa, co, msr, tax, bld, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
    kpimnf -> gtkjpa, gtk, msr, eqp, mpr, aps, dct, kpi, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
    mnfprs -> gtk, msr, eqp, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
    eammct -> gtk, msr, eqp, eam, mpr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
    mnfeam -> gtk, msr, eqp, eam, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
    syp -> mctprs, gtk, msr, stm, rpl, pdoc, btk, bbb, cur, stmprs, stk, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds