Posts Tagged with "ISO 26262"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on February 3, 2021 #356

積分公式に引き続き、次の(356.1)及び(356.2)について、あらかじめ結果を導出しておき、積分公式として使用します。 $$ \frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}R_\text{SM}(t)dt\tag{356.1} $$ 及び $$ \frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}R_\text{SM}(u)dt,\ \ s.t.\ \ u:=t\bmod\tau\tag{356.2} $$ まず、(356.1)式に、$R_\text{SM}(t)=e^{-\lambda_\text{SM}t}$を代入し、 $$ \require{cancel} \begin{eqnarray} (356.1)&=&\frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}e^{-\lambda_\text{SM}t}dt=\frac{1}{T_\text{lifetime}}\left[-\frac{e^{-\lambda_\text{SM}t}}{\lambda_\text{SM}}\right]^{T_\text{lifetime}}_0\\ &=&\frac{1}{T_\text{lifetime}\lambda_\text{SM}}\left(1-e^{-\lambda_\text{SM}T_\text{lifetime}}\right)\\ \end{eqnarray}\tag{356.3} $$ ここで$\lambda t\ll 1$の条件で$e^{-\lambda t}$のMaclaurin展開は $$e^{-\lambda t}=1-\lambda t + \frac{1}{2}\lambda^2 t^2-O((\lambda t)^3)$$であるから、$O((\lambda t)^3)\approx 0$と近似し、これを(356.3)に代入すると(356.3)は、 $$ \begin{eqnarray} (356.3)&\approx&\frac{1}{\bcancel{T_\text{lifetime}\lambda_\text{SM}}}\left(\bcancel{\lambda_\text{SM}}\bcancel{T_\text{lifetime}}-\frac{1}{2}\lambda_\text{SM}^\bcancel{2}T_\text{lifetime}^\bcancel{2}\right)\\ &=&1-\frac{1}{2}\lambda_\text{SM}T_\text{lifetime} \end{eqnarray}\tag{356.4} $$ 以上から次のように(356.1)の値が求められました。

$$ \frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}R_\text{SM}(t)dt\approx1-\frac{1}{2}\lambda_\text{SM}T_\text{lifetime}\tag{356.5} $$ 次に(356.2)は、 $$ \begin{eqnarray} (356.2)&=&\frac{1}{T_\text{lifetime}}\sum_{i=0}^{n-1}\int_{i\tau}^{(i+1)\tau}e^{-\lambda_\text{SM}u}du =\frac{n}{T_\text{lifetime}}\int_0^\tau e^{-\lambda_\text{SM}u}du\\ &=&\frac{\bcancel{n}1}{\bcancel{T_\text{lifetime}}\tau}\left[\frac{e^{-\lambda_\text{SM}u}}{-\lambda_\text{SM}}\right]^{\tau}_0 =\frac{1}{\tau\lambda_\text{SM}}\left(1-e^{-\lambda_\text{SM}\tau}\right) \end{eqnarray}\tag{356.6} $$ ここで同様に、$$e^{-\lambda t}\approx1-\lambda t + \frac{1}{2}\lambda^2 t^2$$を用いて、 $$ \begin{eqnarray} (356.3)&\approx&\frac{1}{\bcancel{\tau\lambda_\text{SM}}}\left(\bcancel{\lambda_\text{SM}}\bcancel{\tau}-\frac{1}{2}\lambda_\text{SM}^\bcancel{2}\tau^\bcancel{2}\right)\\ &=&1-\frac{1}{2}\lambda_\text{SM}\tau \end{eqnarray}\tag{356.7} $$ 以上から次のように(356.2)の値が求められました。 $$ \frac{1}{T_\text{lifetime}}\int_0^{T_\text{lifetime}}R_\text{SM}(u)dt\approx1-\frac{1}{2}\lambda_\text{SM}\tau,\ \ s.t.\ \ u:=t\bmod\tau\tag{356.8} $$


左矢前のブログ 次のブログ右矢

PMHF導出法の変更

posted by sakurai on February 2, 2021 #355

動機

長い間MPF detectedの扱いに疑問が潜在していました。弊社では、MPF detectedは結局修理されないので、いつの日か2つ目のSMのフォールトによりDPFとなると考えます。従って、MPF detectedは結局MPF latent (=LF)となるとした上でPMHF式を導出しています。しかしながら、この考え方には、次の2点の問題があります。

  • 規格のフォールト分類フローでは、MPF detectedとMPF latentが分離されているにも関わらず、弊社ではどちらもMPF latentと扱っているため、規格のフォールト分類と矛盾する。
  • 規格LFMの計算式にMPF detectedが入っていない。これは、規格はMPF detectedは安全側だと考えているためだと推測されるが、弊社では上記の理由から危険側としている。

そこで、これらを満足する方法を検討します。最初の論文で導入された、SM1による検出率を意味する次の条件付き確率$K_\text{det}$を、ここで再び使用します。 $$ K_\text{det}:=\Pr\{\text{Fault detected}\ |\ \text{Fault prevented}\}\tag{355.1} $$

これはFMCというよりも、アーキテクチャ的に次のように0または1の値をとります。

  • 検出系(非冗長系):1st SMはIFのフォールトを検出することによりVSG抑止を行う場合。この場合は検出するから抑止されるのであり、抑止される部分に対する検出される割合は100%です。すなわち$K_\text{det}=1$となります。
  • 冗長系:1st SMはIFの代替機能を持つことによりVSG抑止を行う場合。この場合はVSG抑止はしますが、1st SMは一切検出を行いません。従って、抑止される部分の検出される割合は0%です。すなわち$K_\text{det}=0$となります。また、両チャネルが同時にフォールトすることは無いため、VSG抑止率は100%、すなわち$K_\text{IF,RF}=1$となります。

さて、MPF detectedの考え方ですが、主機能のVSGが抑止されているので、運転はできないかもしれないものの、とりあえず安全状態は保たれます。従ってSPFもDPFも発生しません。しかるべき時間後に(レッカー車で)修理工場へ持っていき、修理が行われ、その後に運転が継続できると考えます。

主機能は動作しないので、通電はされず、運転時間は増大しません。従って、故障から修理までの時間は無視することができるので、1st SMにより検出された故障は瞬間的に修理された=故障が起きなかったのと等価です。

やや無理がある解釈の感がありますが、今回このように仮定してPMHF式の導出を進めることにします。 ブログ記事#361に続きます。

RAMS 2022においてMPF detectedの再考に基づくPMHF式の論文発表が終了したため、秘匿部分を開示します。


左矢前のブログ 次のブログ右矢

posted by sakurai on February 1, 2021 #354

引き続き、お客様との会話をシェアします。

Q. ソフトエラーはどう考えたら良いでしょうか?

A. ソフトエラーには、例えばメモリ化けのようなものが有ります。ハードウェアが恒久的に故障するのではなく、α線や中性子線等の放射線、もしくはノイズ等の原因により、記憶していた論理が反転することを指します。従って、正しいデータに再記憶すれば問題なく運用することが可能です。

メモリには、しばしば1bitの反転が起こりますが、この故障モードはSBU(Single Bit Upset)と呼ばれます。

元々ソフトエラーはダイナミックなメモリにのみ顕著に起こり、そのためにDRAMにはソフトエラーの検出・訂正のためにECCが設けられていました。近年のようにプロセステクノロジが進んでくると、従来は問題にならなかったロジックのソフトエラーも見えてくるようになったため、ロジックのソフトエラー対策が必要になります。

具体的なエレメントとしてはバスがあります。バスは昔は単なるアルミ配線でしたが、近年のAXI4になると巨大なマルチプレクサで構成されます。そのためバスマトリクスのソフトエラー対策として、end-to-endのECCを設けることがしばしば見られます。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 29, 2021 #353

引き続き、お客様との会話をシェアします。

Q. ISO 26262規格ではエレメントの独立とはどの程度やれば良いのでしょうか。規格では何か特定の定められた方策があるのでしょうか?

A. ISO 26262では具体的な技術的方策は規定していません。その理由は、技術は時間的に変わっていくものだからです。規格では変わらない根本の考え方を規定しています。

規格での「独立」の定義は、「エレメント間に従属故障が無いこと」です。ここで「従属故障」とは「カスケード故障」及び「共通原因故障」の2種を意味します。ここで故障は、基本的には同時に起こらないことが前提となっています。その例外が以下に述べる2つの従属故障です。

まず「カスケード故障」とは、あるエレメントが故障し、その結果として他のエレメントが故障する場合を指します。

図%%.1(Part1-1.13)
図353.1 カスケード故障

一方、「共通原因故障」はそれぞれのエレメントには関連が無いものの、同じIPを使用していたり、同じソフトウェアを使用していたりすることで、故障が同時に起こることを指します。

図%%.2(Part1-1.14)
図353.2 共通原因故障

従って、独立性はこのような観点から確認することになります。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 28, 2021 #352

お客様との会話において、コンサルティングが必要な理由を説明する機会がありましたので、シェアします。

Q. 社内標準プロセスがしっかりしていれば、スムーズに機能安全活動が可能でしょうか?

A. 機能安全活動のポイントのひとつに、ワークプロダクトを何十種類も、効率的に作成することがあります。社内で、どのワークプロダクトを、どのようなフェーズにおいて作成するかが定められていなければなりません。これは社内標準がきちんと整備されていることを要求しますが、それだけにとどまりません。なぜなら実際にはそれ以外に手順書が必要だからです。

抽象度の高い順に、規格(ISO 26262)⇒標準(社内)⇒手順書(部署内)となります。

弊社の経験では、強力な品質保証部隊を持つお客様において、社内標準はしっかり整備されていましたが、それには具体的な手順までは書かれていないため、現場では苦労がありました。標準には「何を記述するか」は書かれているものの、「どのように手を動かして導出するか」が書かれていないためです。初めてのエンジニアにとって、「どのように」がなければ実際には実施することはできません。二度目であれば暗黙知、もしくは手順書の執筆による形式知により、初めてのエンジニアでも実施可能になるのですが。

以上から逆説的ですが、標準プロセスがしっかりしていても、何らかの手助け(=手順書)が無ければ機能安全活動が満足には実施できません。従って、これは弊社のようなコンサルティングが必要になる理由のひとつです。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 26, 2021 #351

前稿の式を評価します。

$$ A_\text{SM}(t)=R_\text{SM}(t)+K_\text{SM,FMC,MPF}\left[-R_\text{SM}(t)+R_\text{SM}(u)\right]\\ =R_\text{SM}(t)+K_\text{SM,FMC,MPF}\left[F_\text{SM}(t)-F_\text{SM}(u)\right]\ \text{s.t. }u:=t-n\tau=t-\lfloor\frac{t}{\tau}\rfloor\tau\tag{351.1} $$ 教科書等のとおり、稼働度は信頼度と修理度の和で表され、(351.1)式の$$ K_\text{SM,FMC,MPF}\left[F_\text{SM}(t)-F_\text{SM}(u)\right] $$ は修理度を意味します。この式は、最期の区間を除いた全ての区間において起きた検出可能フォールトは、その検査周期の最後で完全に修理され、最後の区間のみが修理が行われないことを表しています。

このように、修理度は故障した部分に基づき不信頼度で表すのが便利なので、(351.1)のように、稼働度は信頼度と不信頼度で表されます。

一方、不稼働度は、 $$ Q_\text{SM}(t)=1-A_\text{SM}(t)=F_\text{SM}(t)-K_\text{SM,FMC,MPF}\left[F_\text{SM}(t)-F_\text{SM}(u)\right]\\ \ \text{s.t. }u:=t-n\tau=t-\lfloor\frac{t}{\tau}\rfloor\tau\tag{351.2} $$ のように、不信頼度とマイナスの修理度の和で表されるので、結果として不稼働度は(351.2)のように不信頼度のみで表されます。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 25, 2021 #350

3. 稼働度の定義からの導出

ついでに既出ですが、リペアラブルエレメントの不稼働度$Q(t)$の数式的な求め方を示します。基本的にはブログ記事に示す導出方法です。

$$ Q_\text{SM}(t):=\Pr\{\text{(repairable)SM down at }t\}=1-A_\text{SM}(t)\tag{350.1} $$ 一方、稼働度は、 $$ A_\text{SM}(t):=\Pr\{\text{(repairable)SM up at }t\}\\ =R(t)+\int_0^t m(x)R(t-x)dx\tag{350.2} $$ ここで、$A(t)$は時刻tにおけるポイントアベイラビリティ、$R(t)$は時刻tにおけるリライアビリティ(信頼度)、$m(t)$は時刻tにおけるリニューアル密度(修理密度)です。

規格に従えば、修理周期は教科書一般にあるように指数関数分布はとらず、定期的に$\tau$毎に行われるため、稼働度として(350.2)は(350.3)と表せます。ここで、$i$は$i$番目の定期検査・修理を意味し、時刻$t$までに$n$回の定期検査・修理が行われるものとします。 $$ A_\text{SM}(t)=R_\text{SM}(t)+K_\text{SM,FMC,MPF}F_\text{SM}(\tau)\sum_{i=1}^n R_\text{SM}(t-i\tau)\tag{350.3} $$ ここで、$K_\text{SM,FMC,MPF}$は少々長いので、以降は$K_\text{SM,MPF}$と省略します。PMHFの議論中のKはFMC(Failure Mode Coverage)に決まっているためです。

修理分$K_\text{SM,MPF}F_\text{SM}(\tau)$が時刻$t$の関数でないのは、検出能力$K_\text{MPF}$は一定で、かつ毎回の故障確率も一定で、検出した分は全て修理されるため、修理分が一定となるためです。(350.3)式の総和を展開すれば、 $$ \require{cancel} A_\text{SM}(t)=R_\text{SM}(t)+K_\text{SM,MPF}\left[1-R_\text{SM}(\tau)\right]\cdot\\ \left[R_\text{SM}(t-\tau)+R_\text{SM}(t-2\tau)+...+R_\text{SM}(t-(n-1)\tau)\right]\\ =R_\text{SM}(t)+K_\text{SM,MPF}\left[\bcancel{R_\text{SM}(t-\tau)}-R_\text{SM}(t)\\ +\bcancel{R_\text{SM}(t-2\tau)}-\bcancel{R_\text{SM}(t-\tau)}\\ ...\\ +R_\text{SM}(t-n\tau)-\bcancel{R_\text{SM}(t-(n-1)\tau)}\right]\\ =R_\text{SM}(t)+K_\text{SM,MPF}\left[-R_\text{SM}(t)+R_\text{SM}(t-n\tau)\right] \tag{350.4} $$ ここで、$u:=t-n\tau$とパラメータ$u$を定義し、(350.1)に(350.4)を代入すれば、 $$ Q_\text{SM}(t)=1-A_\text{SM}(t)=F_\text{SM}(t)-K_\text{SM,MPF}\left[F_\text{SM}(t)\bcancel{-1}+\bcancel{1}-F_\text{SM}(u)\right]\\ =\img[-1.35em]{/images/withinseminar.png} \tag{350.5} $$ 以上から、(348.1)(349.3)、(350.5)で示されたように、導出手法は異なっても同一のPUA方程式が導出されることがわかります。

このリペアラブルエレメントの不稼働度$Q(t)$(350.5)及び、それを時間微分した不稼働密度$q(t)$の方程式(350.6)は、PMHF方程式の導出の根幹です。

$$ q_\text{SM}(t)=\frac{dQ_\text{SM}(t)}{dt}=(1-K_\text{SM,MPF})\frac{dF_\text{SM}(t)}{dt}+K_\text{SM,MPF}\frac{dF_\text{SM}(u)}{du}\frac{du}{dt}\\ =\img[-1.35em]{/images/withinseminar.png} \tag{350.6} $$

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 22, 2021 #349

2. 愚直に場合分けする導出法

前稿のようにエレガントに導出するのではなく、全ての場合を愚直に場合分けすることを行います。そのほうが抜け漏れが防止でき、確実そうです。

図347.1
図347.1 定期検査と時刻$t$の関係

ただし、任意の検査時刻$\tau_i,\ i=1,...,n$で考えると、区間がn+1個、検査がn回であるため、区間$[\tau_{i-1}, \tau_i)$でのフォールトの生起有/無が$2^{(n+1)}$とおり、検査時点$\tau_i$でのフォールト検出可/不可が$2^n$とおりあるので、検討の組み合わせが$2^{(2n+1)}$とおりと膨大になります。

ところが幸いなことに、フォールト検出は確率的に行われるのではなく、アーキテクチャ的に行われる前提です(ブログ記事の前提の2項を参照)。従って、いつフォールトが起きてもその次の周期での検査(時刻=$\tau_i$)ではなく、最近の検査(時刻=$\tau_n$)まで検査を遅延させても、時刻$t$での不稼働確率は同じはずです。

従って、フォールトの生起を単に「生起」、フォールトの検出を単に「検出」と省略して書けば、最近の検査までの生起の有/無最近の検査での検出の可/不可その後の生起の有/無の$2^3$とおりを考えれば良いわけです。この絞り込みは愚直とは言えず、むしろエレガントかもしれませんが。

この絞り込みを表現するために、3つ組記法を考え、

 (($0$から$\tau_n$までの生起の有/無),($\tau_n$での検出の可/不可),($\tau_n$からtまでの生起の有/無))

の全ての組み合わせを考えます。有/無や可/不可をYes(有)/No(無)で表せば、全ての場合は$2^3$とおりあり、

 1. (Yes, Yes, Yes)
 2. (Yes, No, Yes)
 3. (Yes, Yes, No)
 4. (Yes, No, No)
 5. (No, Yes, Yes)
 6. (No, No, Yes)
 7. (No, Yes, No)
 8. (No, No, No)

の8とおりです。このうち、時刻$t$でSMが不稼働状態になるのは、

 1. (Yes, Yes, Yes)⇒不稼働
 2. (Yes, No, Yes)⇒不稼働
 3. (Yes, Yes, No)
 4. (Yes, No, No)⇒不稼働
 5. (No, Yes, Yes)⇒不稼働
 6. (No, No, Yes)⇒不稼働
 7. (No, Yes, No)
 8. (No, No, No)

の1, 2, 4, 5, 6の5とおりです。これらの不稼働になる場合を、真ん中の検出可(=Yes)でまとめれば、

 1. (Yes, Yes, Yes)⇒不稼働
 5. (No, Yes, Yes)⇒不稼働

の2とおりとなります。検出可の条件で不稼働となる確率は、上記の2とおりであり、検出可かつ時間$(\tau_n, t]$でのフォールトとなるので、この条件での時刻$t$での不稼働確率は、次の確率式 $$ \Pr\{\text{fault detected at }\tau_n\ \cap\ \text{SM recieves a fault in }(\tau_n, t]\}\tag{349.1} $$ で表されます。

一方、真ん中の検出不可(=No)でまとめれば、

 2. (Yes, No, Yes)⇒不稼働
 4. (Yes, No, No)⇒不稼働
 6. (No, No, Yes)⇒不稼働

の2, 4, 6の3とおりとなります。検出不可の条件で不稼働となる確率は、上記の3とおりであり、検出不可かつ$(0, t]$でのフォールトとなるので、この条件での時刻$t$での不稼働確率は、次の確率式 $$ \Pr\{\text{fault not detected at }\tau_n\ \cap \text{SM recieves a fault in }(0, t]\}\tag{349.2} $$ で表されます。

以上から、検出の可不可は排他であるため確率は足すことができ、生起と検出は独立事象であるため、不稼働度は、(349.1)と(349.2)を用いて $$ Q_\text{SM}(t)\equiv\Pr\{\text{SM is down at }t\}\\ =\Pr\{\text{fault not detected at }\tau_n\ \cap \text{SM recieves a fault in }(0, t]\ \cup\\ \text{fault detected at }\tau_n\ \cap\ \text{SM recieves a fault in }(\tau_n, t]\}\\ =\Pr\{\text{fault not detected at }\tau_n\}\Pr\{\text{SM recieves a fault in }(0, t]\}\\ +\Pr\{\text{fault detected at }\tau_n\}\Pr\{\text{SM recieves a fault in }(\tau_n, t]\}\\ =\img[-1.35em]{/images/withinseminar.png} \tag{349.3} $$ と導出されます。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

posted by sakurai on January 21, 2021 #348

1. エレガントな導出法

図347.1において、SMが$t$においてダウンしている確率を考えます。SMに起こったフォールトが、任意の$\tau_i$で2nd SMにより検出可能か不可能かで分類します。

  • 検出可能な場合:時刻$0$から$\tau_n$未満の間にフォールトが起きる場合、次の定期検査$\tau_i\ (i=1,...,n)$の時点で検出され修理されるので、最近の検査時刻$\tau_n$でフォールトはありません。あるいは、フォールトが起きない場合も$\tau_n$の時点ではフォールトはありません。従って、時刻$t$でダウンしている確率は$\tau_n$から$t$までの間にフォールトが起きる場合に限られます。
  • 検出不可能な場合:2nd SMが無いのと同じことであるため、全ての時間=時刻$0$から$t$までの間にフォールトが起きる確率が、時刻$t$でダウンしている確率となります。

以上を合わせ、SMが時刻$t$でダウンしている確率を求めます。不稼働事象は上記事象のORであり、検出の可不可は排他であるため確率は足すことができ、フォールトの生起と検出可不可は独立事象であるため、不稼働度は、

$$ Q_\text{SM}(t)\equiv\Pr\{\text{SM is down at }t\}\\ =\Pr\{\text{fault not detected at }\tau_n\ \cap \text{SM recieves a fault in }(0, t]\ \cup\\ \text{fault detected at }\tau_n\ \cap\ \text{SM recieves a fault in }(\tau_n, t]\}\\ =\Pr\{\text{fault not detected at }\tau_n\}\Pr\{\text{SM recieves a fault in }(0, t]\}\\ +\Pr\{\text{fault detected at }\tau_n\}\Pr\{\text{SM recieves a fault in }(\tau_n, t]\}\\ =\img[-1.35em]{/images/withinseminar.png} \tag{348.1} $$ と導出されます。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

不稼働度$Q(t)$について

posted by sakurai on January 20, 2021 #347

不稼働度$Q(t)$の導出準備

定期検査を持つリペアラブルエレメントの不稼働度(Unavailability, PUA)$Q(t)$の方程式は、世界で初めて弊社が導出したものです。このリペアラブルエレメントの不稼働度$Q(t)$の導出について解説します。

定義

不稼働度の定義は(66.10)に示します。

前提

一般にはSMにフォールトが起きても直ちにVSGとならないため、意図機能が動作している間に修理が可能であり、これをリペアラブルエレメントと言います。

図%%.1
図347.1 定期検査と時刻$t$の関係

図347.1のように、2nd SMによるSMに対する定期検査が、周期$\tau$で行われます。$i$番目の検査時刻は$\tau_i,\ i=1, ..., n$です。このときのSMの、時刻$t$での不稼働度を考えます。最近の検査時刻を$\tau_n$とすれば、 $$ \tau_n=n\tau=\lfloor\frac{t}{\tau}\rfloor\tau\tag{347.1} $$

前提をまとめると以下のようになります。

  • 定期検査・修理を実施する。検査周期は$\tau$(定数)とする。ただし、ISO 26262においてはフォールト発生からドライバーが警告ランプに気づいて修理工場へ運び、修理が完了するまでの時間間隔となります。従って厳密には検査周期ではなく、これら時間間隔の総和であり、規格ではこれらを合わせたものを露出時間と呼びます。
  • 2nd SMには診断カバレージ(DC)があるものの、フォールト検出は確率的に行われるのではなく、被検査対象のうちSMにより検出できる部分のフォールトは必ず検出され、非検出部分のフォールトは必ず非検出となるものとする。このDCを$K_\text{FMC,MPF}$で表す。

なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢


ページ: