HAL Id: inria-00070457
https://hal.inria.fr/inria-00070457
Submitted on 19 May 2006
HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci-
L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents
A Generative Programming Approach To Developing DSL Compilers
Charles Consel, Latry Fabien, Laurent Réveillère, Pierre Cointe
To cite this version:
Charles Consel, Latry Fabien, Laurent Réveillère, Pierre Cointe. A Generative Programming Approach
To Developing DSL Compilers. [Research Report] RR-5550, INRIA. 2005, pp.21. �inria-00070457�
ISRN INRIA/RR--5550--FR+ENG
a p p o r t
d e r e c h e r c h e
Thème COM
INSTITUT NATIONAL DE RECHERCHE EN INFORMATIQUE ET EN AUTOMATIQUE
A Generative Programming Approach To Developing DSL Compilers
Charles Consel — Latry Fabien — Laurent Réveillère — Pierre Cointe
N° 5550
Avril 2005
"
#$%&'#(*) +,-%.
/102436587:9;/1<>=9?7:5
∗ @BA 2DCE3?FHGB24IJK7L=
∗ @MA 24N367:=OCPRQLS>7LJK585KT:3?7
∗ @BU J87:363?7V/1<>JK=OC67
†
WXZY?[1\^]_a`$bdcfehgjikY?[1\6glmL[1[^nZoZpqlrsoLitg
uBvwmyxz\iuBXDm:\?oZp|{
}~ryZ4msvkih\&vk\6ltXZ\vtltXZ\o4Bsss Vbfvwp|s s :bZarys\6g
;?Zss
ms[rypohzcf4\?lp|lryoZLnDryL\?g&8achgw vk\?Zvw\?gk\o:i~rZvwms\?orsZZvwmLrsltXikm;vwrspgkp|oD*ikXZ\1ry¡Dgjikvtrsl
iwp|mLo¢|\?s\?£my¤ZvwmsLvwrs[*[1poZ¥WXZ\?e¦ms§4\?vXZpsXh¨\s\?£lmLoDgjikvwnDl©itgryoªoZmyitrikpmsogh\?Zpl?rik\6¦ikmVr
Zms[rypo¬«gjikvwnDl©iwnZvkpoZDvkmLsvtry[®Z\?gkp|Lo¬«\?rLgjpoZDvkmLsvtry[°¯vwp|ikpoZD«[rsgk±fp|oD¢ikXZ\²p|o:iwvkpqlrLlp\?gRms¤
nDoDh\vwe:poZgkmy¤³iz¯ryvw\~qrEes\vtg?«frsoDsnDrsvwrsoLiw\\?p|oZ*lvwp|ikpqlryODvkmL\?vjiwp|\6g¥
_o^ikXZ\mLoZ\´XDryoD¬«sacZg¤µrLlp|p|iwryik\rgjikvtrypsX:ik¤¶msvw¯´rsvw[ryDZp|oDa¡4\iz¯´\\?o1ralmLoDl\?hiknryh[*mhh\
rsoDr²gjmL|nhiwp|mLo\{hZvw\?gwgk\?¢po·r²gj4\?lp¸l;Zvwmssvtry[*[*poZ¹qryoZLnDryL\s¥ª_oikXZ\myiwXZ\v1XDryoO«£chg
lms[*Zpl?riw\iwXZ\lms[*ZpryikpmsoZvkmhl\?gwg¡\6lryngj\&ms¤iwXZ\LrspoºikXD\ry¡Dgjikvtrslikpmso|\?s\¡\iz¯»\?\oikXZ\
gkmsnDvwl\~ryoDiwryvws\i»qryoZLnDryL\s¥WXZ\~oDryiknZvw\~ms¤chg»[ry±s\~ikXZ\?p|vlmL[*Zp|qriwp|mLoRs\?vke*hp|§4\?vk\?o:i£¤¶vwms[
iwXZ\lmL[1Dp|qriwp|mLoVmy¤lmL[1[*mLoª¼a\?oZ\vtry|Ku£nZvk4mLgk\^ryoZLnDryL\?g18¼au£gw ¥^½¾o¦¤µrLl©i?«rch¿lmL[*Zp|\v
L\oZ\?vwrs|e&ZvwmhhnDl\6glmhh\¯vkp|ijiw\o*po*r&¼au££Àym¯K\L\flms[*Zpqrikpmso1pqg|\¤³iBikmaikXD\lms[*Zp\vmy¤4ikXZ\
itryvws\i´¼au£B¥h½¾o;\?gwgj\?oDl\L«fr^acZ²lms[*Zp|\?v´h\DoZ\6g»gkms[*\~[rsZZpoZ^ms¤OikXZ\aXZpsXh¨\s\?poh¤¶mLvk[riwp|mLo
rsoDa¤¶\?ryiknZvw\?g¬my¤DrchRpo:ikmiwXZ\Bitryvws\i¼au»;ryonZoDh\?vkefp|oZqrEes\?vwgMwÁ?ÂÄÃ:Â|Åf[1pqZh\¯ryvw\s«6Zvwmyiwmflmsqg«
mL¡hxz\?liwg?«O¥¥?¥w ©¥
WXZpqgDry4\vZvk\6gj\?o:iwgr[*\ikXZmhhmL|mLseRiwmh\?s\?|mLºch·lms[*Zp\vtg«4l\o:iw\vw\?ÆryvwmsnDoDikXZ\^nDgj\
ms¤s\?oZ\vtriwp|L\RZvwmssvtry[*[*poZºikmfmsqg?¥¢_nZv1ryZDvkm:rsltX¢\ory¡Z\?gikmªgziwvknDliknZvw\RiwXZ\Z\s\?|mLZ[*\o:i^ms¤
rVachÇlms[*Zp\vmLoª¤µrsl\iwgikXDryi^vw\Zvw\?gk\o:ihp[*\oDgkpmsoDgmy¤lmL[1Dp|qriwp|mLo¬¥ºÈ£rsltXª¤µrLl\i*lrso²iwXZ\o
¡4\1p|[*Z\[*\o:iw\?¹po²r[*mhhnZqryva¯´rEeL«nDgkpoZrLgj4\?liwg?«¬ryoZoZmsiwryikpmsoDgryoD²gj4\?lprs|pÉ?ryikpmso¬¥Ê´\?lrsnDgk\
iwXZ\?gk\1ikmfmsqgryvw\^XDp|LX²\L\K«>ikXZ\?e¹[riwltX²ikXD\1oD\\?Dgmy¤´rchB«O¤µrLlp|p|iwryikpoZikXZ\h\?s\?|mLZ[*\o:iams¤
iwXZ\ch¢lmL[1Dp|\v6«ZryoD[ry±fpoZ*p¸i[*mhhnZqryvrsoD;vw\KiwrsvkL\itry¡Z\s¥
˦\¹p|nDgjikvtrik\ÆmLnZvRryDZvkm:rsltX·¯p¸iwXÌr¢achͤ¶mLvik\?|\?ZXZmLo:e·gj\?vkfpql\?g?¥ÇWXZ\¹gjikvwnDliknZvw\ºmy¤ikXZ\
ch²lms[*Zp\v£pqg»Zvk\6gj\?o:ik\?¬«Lrsg»¯´\rsg£Zvtrsl©iwpl?rynDgj\6gBms¤¬s\oD\vtrikps\iwmfmsqgM¤¶msv´gjmL[*\lmL[*Zp|qriwp|mLo
¤µrLl\iwg?¥
ÎÆÏ:Ð>ÑwÒÓ Ôs ]»mL[*Zp|qriwp|mLo¬«Zms[rypohzcf\6lp|l&rsoZsnrys\6g«h¼a\oD\vtrikps\uBvwmsLvwrs[*[1poZ
∗ ÕÖ6×KØ6Ù©ÚjÛÜÝzÖEÚµÚµÞjß×BàtáEá6Ú8ÞzÜKÜjâ¬ã¶äå¬ã³Õæ´çhà©èOå¬ãOéOê4äë6êã¶åèìhí£àjîÞzßÖEÞ´á6Ö&ïÚMëݨØð>Þjñ×8òzÞzÚjì:ïÙ©óàtñÄßEÞ£ôß6ñîÞjÚ¶é ÜKñ×KàtñÄÚ8Þ©ìEõhé¶ö©öt÷ø©ùúZàtûÄÞzßEÝzÞ»ü>ÞzáEÞ¾ýLìõÚ8àtßEÝzÞ©þ
†ÕÖ6×8ØEÙ©ÚjÛÜ4ÝjÖ6Ú8ÚµÞzß׬àtá6áEÚ8ÞzÜ8ÜkâÿÝzÙ©ûÄÞ¬áEÞzÜñÄßEÞzÜDáEÞäàtß×KÞzÜkìçhàBü>Øàtß×8Ú8ÞzÚµñÄÞéf÷EìÚµÖEÞÕû|Ú8ÞzáMàtܵ×KûÄÞzÚzì?èþZþ©ø 6ì
÷©÷ö©øäÕäúê>ë~üOÞzáEÞ¾ýö6ìõDå¬ÕäüOê¬þ
#%&²^ +,^-% . # ()
\?gÆqryoZ:ryL\?gÆ6hp6gµchgw ¹vk\?Zv6gj\?o:ik\o:iÆnZoZ\·ryZZvwmhltXZ\¢rE?v?\¦4msnDv\L\vÆ\oZps\?rsn
rs¡DgziwvwrLl©iwp|mLoh\ZvkmLsvtry[*[riwp|mLo¬¥M½¾g~my§>vk\?o:i~h\?glmsoDgjikvwnDlikpmsoDgXrynhikKoZps\6ryn\iZ\?goDmyiwryikpmsoDg
?hp\6g¹nDo hms[rsp|oZ\L«MgziwvknDliknZvtryo:iqr¹lmsoDl\hiwp|mLo nZoZvwmsLvwrs[1[*\L«¤µrLlp|p|iwrsoLi1gjmLo?lvkp|iknZvw\s«
[rLg :nDrsoLiB\?g»lmL[1D|\{fp|i6g£h\6g£lmsnDltXZ\6gMmsspqlp\\?gBgkmsnDgjxjrsl\?o:ik\?g?«y\i£LrsvwrsoLiwpgwgwryo:iBl\vkiwrsp|oD\?gMZvwmy
Dvkpi!?glvwp|ikp" LnD\?ghnÆhmL[*rsp|oD\s¥
#
Zvw\[*pYvw\fnZ\L«h|\6gachg´¤µrslp|p¸iw\o:inZovwp|iwry¡D|\a[ryZZpoZ1\o:ikvw\anZo[*mhhY?|\&lmLoDl\?hiknD\O\i
nDoZ\&gjmL|nhiwp|mLo\{hZvkp[$\&ZrsoDgnZorsoZLrss\h\ZvkmLsvtry[*[riwp|mLo;gj%?lp¸% LnD\s¥'&(6ryoZ[*mLp|oDg?«h\?gchg
lms[*Zp :nZ\?o:i|\»Zvwmfl\?gwgjngh\£lms[*ZpryikpmsoZn&¤µryp|ihn¤¶mLgwg)£ZnoZps\?rsnry¡Dgjikvtrslikpmso :nZpLgryvw\B|\
qryoDLryL\gkmsnZvtl\\i\qryoZ:ryL\lp¡Z\s¥BroDryiknZvw\h\?gchgvw\oD\nZvlmL[*Zp|qriwp|mLoRiwvkY6g´Zp¸§*vw\o:ik\
Z\qrªlmL[1Dp|qriwp|mLo h\ºqryoZ:ryL\?g1?ovtrypgjik\6gK¼au£gt ©¥ÇÈBoH\§>\i?«´nZo¿lmL[*Zp|qriw\nZvh\ÆqryoDLryL\
?hpZvwmhhnZp|i?ovtry\[*\?oLi~Zn¹lmhh\6lvwp¸iaZryoDg~nZoÆqryoZ:rys\¼au»BÀ4rRlms[*ZpryikpmsoÆ¡DrLgz¨oZps\6ryn
\6gzi\?oDgknZp¸iw\qrypqgkg\&rynºoZps\6rynÆhn¹lms[*Zpryik\nDvhnV¼au£lp|¡Z\s¥´uMryv\6gkgk\ol\s«hnDo¹lms[*Zpqrik\?nZv~h\
ch²DoDp¸inZo;[rsZZpoZh\6g£poh¤¶msvw[riwp|mLoDgB\il?ryvtrsl©i!vwpgjikp" :nZ\?gBXDrynhikKoDp|L\?rynRnZoach+&qr&¤¶mLpg
DryoDg\¼au£¢lp¡Z\\i\?glmsnDltXZ\6ggjmLnDgzxjrsl\o:ik\6gkÁ6ÂÄÃÅO[*pDh|\?¯´rsvk\L«hZvwmyikmhlms\?g?«:mL¡hxz\itg«O¥?¥¥t ©¥
]»\DrsZp|\?v»Dv6gj\?oLiw\nDoZ\[$ikXZmhhmL|mLsp\4msnZv?s\?|mLZ\?v´Z\?glmL[1Dp|qriw\nZvtg»Z\ch£«Zl\o:iwv?\
rsnhikmLnZvh\º,nhiwp|pgwriwp|mLo mLnhikpgZ\DvkmLsvtry[*[rikpmso o-vtrikps\L¥.&msikvw\ÆryZZvwmhltXZ\\?vk[*\iRh\
gjikvwnDliknZvw\v|\ª?s\msD\?[1\?o:iºnZolmL[1Dp|qriw\nZvºh\¢acZ \?o̤µrLl\ikik\6g«/ :nZpvk\?Zv6gj\?o:ik\o:iºh\?g
Zp|[*\ogjpmsoDg^h\;lms[*Zpryikpmso¬¥²]»XDr0 :nZ\¤µrsl\ikik\R4\nhi*\ogjnZp|ik\21ikvw\Rp[*Z?[*\o:i?\nZoZ\[*rsoZpYvw\
[*mhhnZqrypvw\s«6\onhiwp|pqgkrsoLi|\6grLgj4\?liwg?«6\?gryoZoDmyiwryikpmsoDg?«6\iqrgk36lpqrypgwriwp|mLo¬¥]»\6g¬msnZikpg4itryo:iXDrsnhij
oDp|L\?ryn«Lpglmsvwvk\6gj4msoDZ\o:i´rsnR¡\6gjmLp|onZochB«f¤µrLlp|p|iwrso:i´\as\?|mLZ4\[*\o:i´nZoºlmL[*Zp|qriw\nZv
Z\ch£«D\i\&vk\?oDZrsoLi[*mhhnZqrypvk\\ivk\8itryvwitry¡Z\s¥
&~msnDgMp|nDgjikvwmsogoZmyiwvk\ryDZvkmhltXZ\rEs\6l£nDo*chº4msnZv£|\6gMgj\?vkfpql\?gh\i!ZXDmsoZp\s¥r&gjikvwnDl©iwnZvw\
Zn*lms[*Zpryik\?nZv£hnchÆ\?gjiBZv!?gk\o:i?\s«srsp|ogjp- :nZ\5nhikp|pqgwrikpmso*Zvtriwp :nZ\mLnhikpgBo-vtrikp|¤µg4msnZv
l\vkiwrsp|oZ\6g»¤µrsl\ijiw\?gh\&lms[*Zpryikpmso¬¥
6,Ó 6 Ñ 7 ]»ms[*Zpqrikpmso«ZryoDLryL\?g´86hp?g?«ZuBvwmssvtry[*[riwp|mLo¼9o-vtrikps\
+,.
-/.10
? Ó Ô4y2Ó 0 3
465
Z Ï87 Ô Ð 9
: 6 Ï <; Ó Ô Ó 7Ó>=Ð Ó@?ÏBAÏ 7Ó>CD?E7GF
5 Ó C 2,7Ï H
3 5 Ó C 2,7I2
0
=8J ; ÏLK ÓM= E- F£ÓM= 2µ N
O ¥| gj4\?lijj_vkp\o:iw\?uBvkmLsvtry[*[*p|oD ¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ 6
O ¥ ~oZoZmsiwriwp|mLoDgR¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ E
O ¥, u£vkmLsvtry[ cf4\?lprs|pÉ?ryikpmsoÆ¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ E
P65 Ó C 2,7I20 =8Q 0 s<2Ó 0 7R 0 2¶? -'4
Z¥| ÈB{f\6lnhiwp|mLoºÈBof:pvwmsoZ[*\o:iTSDrLl\i¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ ,
Z¥ ryoZLnDryL\USrsl\iV¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ ,
Z¥, u£vkmLsvtry[VSDrLl\i-¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ E
9 5 Ó C 2,7I2
0
=8WÆÓ
0
ÑXQ 0
y2Ó 0
7R
0
2µ?
-'P
Y
¥| ÈB{f\6lnhiwp|mLoºÈBof:pvwmsoZ[*\o:iTSDrLl\i¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ E
Y ¥ ryoZLnDryL\USrsl\iV¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ Y
Y ¥, u£vkmLsvtry[VSDrLl\i-¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥¥&¥¥&¥&¥¥&¥¥&¥a¥&¥¥&¥&¥¥&¥¥&¥¥&¥&¥a¥&¥ Z
[ ? 2µ6?2Ó 0 - H
H 5 Ó 0
07<2Ó 0 0 Ô Q Ï]\,Ó ^
- N
O
^ £
Á4Á`Á + `kÁsÁEÁ!" *Á `+] %#LÁ1!fà !|Á*Á:Ã@+
+¾Á1`!µÁ1+E
+L *ÃEÁ +
+¾Á tÁ ' `#`I`!!
Ã:Á1>Á1 ¨Á + Á1X I * ¾Á1
`>Á kÁ%¾Á`! ~à 'IX ! `#`"!+ Á1!"`fÃ#?ÃLÁ1+%$'&(*)µÂ
´iiwXZ\Æh\?gkp|Lo·\L\K«£L\oZ\?vwryikps\gkmy¤³iz¯ryvw\ºh\L\msZ[*\o:i*\[*ZXDrLgjpÉ\6g1ikXZ\ºvwms\ms¤ams[rypoh
ch\6lp|lÆrsoZsnDrss\6g8achgw Rrsgr¦¯´rEeikmª¡ZvwphL\ikXZ\Æ:ry ¡\iz¯»\?\oHXZpsXh¨|\?s\?[1mhh\?|poZ¢ryo
¼a\?oZ\vtry|¨uBnZvwm:gj\1ryoDsnDrss\?g18¼au»gt ©¥ &\?s\?vjiwXZ\\?gwg«>¤¶vwms[$ikXZ\*ZvwmsLvwrs[1[*poZ;qryoDsnDrss\fp\¯
4mspo:i?«£ikXZ\?vk\pgr²qrslt±ªmy¤a[1\ikXZmhhmL|mLse¢ryo·r²rLlt±¢my¤iwmfmsqgiwm¢gjnZDmLvji1ikXZ\Æh\?s\?|mLZ[*\o:i1ms¤
ch·lms[*Zp\vtg¥WXZ\ZnZvwm:gj\ms¤ikXZpqg~ry4\v~pqg~ikm;rsZZegkms[*\ms¤MikXZ\^[*rsp|ogziwvk\6ry[ iw\?ltXZoDp :nZ\6g«
DvkmL[1msik\6;¡feiwXZ\&s\?oZ\vtriwp|L\ZvwmsLvwrs[*[1poZ1lms[*[^nZoZp|izes«fikmRZ\s\?|mLch¢lmL[*Zp|\vtg?¥
\ ;h 28; ?]7 F,+ SDvkmL[r;Zvwmssvtry[*[*\vfp\¯4mspo:i?«>rRacZpqgizefZpqlrs|elvk\6riw\?ikm[*mfZ\r
DvkmLsvtry[ ¤µry[*p|e.-,/¨¥WXZ\lms[*[*msoryp¸iwp|\6gryoD²iwXZ\Rryvwprs¡Zp|p|ikp\?g¤¶mLnZoDªpoªikXZ\Riwryvws\iZvwmssvtry[
¤µrs[*p|e gknZsL\?gji*rs¡DgziwvwrLl©iwp|mLoDg^rsoD·oZmyitrikpmsogiwXDri;rsvk\ºhmL[*rsp|o gj4\?lp¸4l-Ä*/¨¥H½¾o lmso:ikvtrsgji^¯p|ikX
¼au»g10 !"32LrEr;msv]5464^«>racZ·Xrsgar;oDrsvkvwm¯ryZD|pqlryikpmsoVgwlmL\*ryoD¹[nDgjia¡4\*vk\6rsZrs¡Z\&¤¶msv
Zms[rypo\{h\?vjitg¥
½¾oÆL\oZ\?vwrs8«ZrhmL[rypoh¨gk4\?lp|laiw\{fiknDrsZvwmsLvwrs[ pg~rRlmLoDlpqgj\&gk\i~ms¤XDp|LXhK\L\Z\?lqryvtriwp|mLoDg?«
¤¶mhlnDgjpoZ^msoR¯XDryi£iwm^lmL[*Znhik\L«hrsgBmLZ4mLgk\?*iwmXZm¯Hiwm^lmL[*Znhik\p¸i6¥B~g´ryoRp|nDgjikvtriwp|mLo¬«flmsogjpqh\v
iwXZ\iw\\ZXDmsofeZms[rypo¬«>ryoDÆ[*mLvk\gk4\?lp|l?ry|eºgj\?vkfpql\lvk\6riwp|mLo¬¥a]»msol\ZiknDrs|es«ik\?|\?ZXZmsofeºgj\?vj
fpql\6g£vw\Zvw\?gk\o:i´Ersvkpqriwp|mLoDgBpoºlvw\?riwp|oDD«:[1mhhp|¤¶efp|oD1rsoDiw\vw[1poDryikpoZ^r1lmL[1[^nZoZpqlryikpmsoR¡4\iz¯´\\?o
ryvkikp\?g?¥MË¿XZp|\&iwXZpgZvkmLsvtry[ ¤µrs[1pe;po¹r*¼au»lmL\vtg£iwXZ\¤¶nZp[*Z|\?[*\o:iwryikpmsoºmy¤Mgj\?vkfpql\6g«hp|iwg
lmsnZo:iw\vwDryvki»por*chªlmLvkvw\?gkmLoDZg£ikm*ryvwpryikpmsoDg»my¤gj\?vkfpql\a|mLspqly«hry¡gziwvwrLl©ikpoZ1ms\?v»p[*Z|\?[*\oh
itriwp|mLoh\iwrsp|qg¥
SDvkmL[ r1rsoZsnrys\h\6gjpsoZ\?vfp|\?¯mLp|o:i?«Zrchª[ry±L\?ghmL[rypoh¨gk4\?lp|lapoh¤¶msvw[rikpmsoºryopoLiw\
LvwrsDrsvjiamy¤BiwXZ\1ZvkmLsvtry[*[*p|oDRDryvtrsZp|L[¥~gagknDltX¹iwXZ\^DvkmLsvtry[*[*\v~l?ryo¹¡4\*:p\¯´\?Vrsg¡\?p|oZ
DvkmL[1Zik\?¦¡fe¹iwXZ\RqryoZLnDryL\1ikmÆZvwmfph\hmL[rypoh¨gk4\?lp|l*poh¤¶msvw[riwp|mLo¬¥WXZpqg&poh¤¶msvw[riwp|mLo¦[rEe
itry±L\£iwXZ\´¤¶msvw[my¤4Zms[rypoh¾gj4\?lp¸l£izef\6g«ygkefo:iwrslikpql»lmsoDgjikvwnDliwgryoD^oZmsiwriwp|mLoDg?¥½¨iBgj\?vkL\?ghms[rsp|oh
gk4\?lp|lRlmsoDl\vwoDg?«gknDltXrsg|p¡ZvtryvweVpoLiw\vk¤µrslp|oZ«mLhikp[*p|É6riwp|mLo¬«poDgjikvwnZ[*\o:iwryikpmso¬«Zvwmy|poZ¹ryo
L\vwp¸4lriwp|mLoVms¤£ikXD\s\oD\vtrik\6VlmfZ\s¥~gms¤´oZm¯&«¬ikXZ\?vk\ryvw\1oZ\p|ikXZ\?vgk\6lp|l1[1\ikXZmhhmL|mLseL«¬oZmsv
Z\?hpqlryik\?gjnDZmLvji´ikmfmLg?«f¯»\?|OgknZp¸iw\?Rikm*XDryoh|\ikXD\alms[*Zpryikpmso;ms¤¡4myikXikXD\XZpsXZK\L\4oDriwnZvk\
ms¤r*chryoRiwXZ\&vkpqltXZoZ\6gkg´ms¤iwXZ\&¡ZnZp¸ikKpoÆhms[rsp|oh¾gk\6lp|lap|oh¤¶mLvk[ryikpmso¬¥
5
;77Ï 0
=4Ï 2
0
?]7GF Ó C 27µZ<2Ó
087
Ë¿XZ\?o;[ryZDp|oZ1rchÆiwm^r1¼au£B«:ikXD\~XZpsXZ\?v»\L\ikXZ\
ch¦pqg«fiwXZ\[1mLvk\aZvwmsLvwrs[ L\oZ\?vwryikpmsoRpqgoZ\\6h\?;ikm1¡ZvwpZs\ikXZ\Lrs;¯p|ikXikXD\itryvws\i»\{h\6lnhiwp|mLo
\?of:pvwmsoZ[*\o:i6¥M]»mLoDlvw\iw\es«:msoZ\DvkmLsvtry[ |poZ\~¯vwp|ijik\?oRporch²lms[*[*msoD|elmL[*Zp|\?g»poLiwm[ryofe
poZ\?g£p|o¼au»B¥ SZmsv£p|oDgjiwrsoDl\L«L¯´\XDrEL\h\L\ms4\?rch¹¤¶msvBiw\\ZXDmsofe^gk\vwfpl\?g?«soDrs[1\6Rcfu£9-|:/K«
iwXDri~lms[*Zp|\6gp|o:iwm;2:rErZ¥o¹cfu£ZvkmLsvtry[ pqgmsoºrEs\?vwrss\ O iwp|[*\?g[*mLvk\&lmLoDlpqgk\iwXDryoºp|iwg52:rEr
lmsnZo:iw\vwDryvki?¥
&~myi»gknZvwZvkpqgkp|oZL|eL«L¼au£¬8iwvwrsoDgjqriw\?1ZvwmsLvwrs[*gpoDlnDh\~vwryikXZ\?vBrsvkL\ZvkmLsvtry[iw\[*Zqrik\6g¥MWXZ\
Dvkmhl\6gkg~my¤£L\oZ\?vwryikpoZiwXZ\?gk\iw\[*Zqrik\6glryoV¡\$ :nZp¸iw\1lms[*Z\{O«4vk\?|efpoZ;mLo¹ryvwp|mLnDg~lmsoDhp|ikpmsog«
rsoD&vw\ :nZpvkpoZr~o:nD[¡4\vmy¤ZpoDgzitryo:ikpqriwp|mLoDg¬¡fe&lmL[*ZnhikpoZ~rsoD&poDgk\vkikpoZlmsoDgjiwrsoLitg¥Ë¿p¸iwXZmsnhiMryofe
Z\?hpqlryik\?ÆikmfmsgjnDZmLvji6«4ikXZpqg~Dvkmhl\6gkglrso¹¡\$ :nZp|ik\qry¡4msvwpmsnDgryoDÆ\?vkvwmsvk¨ZvkmLoZ\s¥WXZ\1vw\?gknZ¸iwp|oD
L\oZ\?vwryikmLvapqg&ms¤³ik\o¢lnZ[¡4\vtgjmL[*\RryoD¦XDrsvwVikm¹h\?¡ZnZ¥Zhp|ikpmsory|eL«¬ikXD\RrLlt±¹my¤´ikmfmL£gjnDZmLvji
[rs±s\?g~p¸ihplnZ|iiwm;XDrEL\rR[*mhhnZqryv~ikvw\?riw[*\o:ims¤MikXZ\*hms[rsp|oh¾gk\6lp|llmLoDl\?vkog\{h4mLgk\?º¡fe
r1ZvwmsLvwrs[º¥
J ; 28 C C»Ï 7
˦\Zvwms4mLgk\&r*[1\ikXZmhhmL|mLse;ikmRh\?s\msÆchlms[*Zp|\?vwg?¥»WXZ\&±L\eph\6r*my¤ikXDpg
[*\ikXZmhhmL|mLse&pqgikmvk\?|emso1s\oD\vtrikps\»Zvwmssvtry[*[*poZiwm:mLg,-/¨¥MWXZ\?gk\£iwmfmsqg\oDrs¡Z|\´iwma[*mhh\?hikXZ\
XDp|LXhK\L\oDryiknZvw\^ms¤´chg?«rsoDVikXZ\*vwpltXZoD\?gwgms¤£iwXZ\*¡ZnZp¸ikKpo¢hms[rypoh¾gj4\?lp¸4lpoh¤¶msvw[riwp|mLo¬«¬po
iw\vw[gms¤DZvwmsLvwrs[ L\oZ\?vwryikpmso¬¥WXZpg[*mhh\poZal?ryo^¡\hmLoZ\»po^ikXZ\lmLoLiw\{fimy¤rsvkpmsnDgs\?oZ\vtriwp|L\
DvkmLsvtry[*[*p|oZRrsZZvwmLrLltXZ\?g?¥~_nZv[*\ikXZmhhmL|mLse;pqgalms[*4mLgk\?Æms¤Miz¯»mgziw\Dglms[*Zpp|oZZvwmssvtry[
msLplaryo4\vk¤¶msvw[*p|oD1L\oZ\?vwryikps\ZvkmLsvtry[*[*p|oDD¥
Spvwgji?«ikXZ\Rch¿DvkmLsvtry[ |mLspql*pgaiwvwrsoDgkryik\?¦po:ikmÆryo¢ry¡gziwvwrLl©i¼au£¿vw\Zvw\?gk\o:itrikpmso¥*WXDpg
vw\Dvk\6gj\?oLitriwp|mLo¢pg*ry¡gziwvwrLl©i^¡4\?l?rynDgk\;p|ip|olnDh\?g1mL\?vwryikpmsoDg¯XZmLgk\po:ik\?vkZvw\itriwp|mLo¢pg1oZmsi1oZ\6l©
\6gkgwryvwp|eh\DoZ\6·eL\i6Àp¸iR[rEe¢iwXfnDgoZmsiR¡\¹\{h\?lnZiwry¡D|\L¥Ì|ikXZmLnZsX¿ry¡gziwvwrLl©i?«£ikXZpqg*iwvwrsoDgjqriwp|mLo
L\oZ\?vwryik\6gr*vk\?Zvk\6gj\?o:iwriwp|mLo;iwXDri\oDlmfZ\?ghmL[rypoh¨gk4\?lp|lpoh¤¶msvw[riwp|mLoºrsoDikXDryi~pqggziwvknl©iknDvk\6
mLo1lmhh\vk\?spmsoDgmy¤4p|o:iw\vw\?gji¤¶mLv¤¶nZvkikXZ\?vBlms[*Zpqrikpmso^ikvw\?ryik[*\o:i6¥½¾o*hmspoZ&gkmD«iwXZ\vk\?Zvw\?gk\o:iwryikpmso
pqgry[*\?oDry¡Z\aikmL\oZ\?vwryikps\iwmfmsqg´ikXDryivk\?Zvk\6gj\?o:i´iwXZ\&gj\6lmLoDgjik\?ºmy¤msnZv[*\iwXZmhhmsmsLes¥
¼a\?oZ\vtriwp|L\VZvwmsLvwrs[1[*poZ¢iwm:mLgryvw\Vngj\6¿ikmHh\DoZ\²ikXZ\¢lmL[*Zp|qriwp|mLoÌmy¤1hms[rypoh¾gj4\?lp¸4l
¤µrLl\iwgMms¤>rchÆpo^iw\vw[gMmy¤>Zvwmssvtry[L\oZ\?vwryikpmso^Zvkmhl\?gwgj\6g¥¿lriw\Lmsvwe&my¤4¤µrsl\iwgBrLZhvw\?gwgj\6gikXZ\
[rsZZpoZms¤4rchZvkmLsvtry[poLiwm&ritryvws\i\{h\6lnhiwp|mLo^\?o:fpvkmLoZ[*\o:i?¥Hgj\6lmsolryik\?smsvwemy¤¤µrsl\iwg
pqg&h\?smyiw\?VikmikXD\Rlms[*Zpqrikpmso¦my¤qryoZLnDryL\^ry¡gziwvwrLl©ikpmsog¥* ikXZpvt¦l?riw\smLvkeºms¤»¤µrLl\itg&h\oZ\?g
lmhh\ºs\oD\vtrikpmso·Zvwmfl\?gwgj\6g^ikXDryirsvk\Ægk\6lp|likm¦ikXD\¹gjnZ¡Zxz\?l©i;chÍZvwmsLvwrs[¥HWXZpqgryZDvkm:rsltX
\?oDry¡D|\6giwm²[*mhhnZqryvwpÉ\ikXZ\ºZvwmsLvwrs[ L\oZ\?vwryikpmsoDvkmhl\6gkg1ms¤r²chlms[*Zp|\?v?¥ SDnZvkikXZ\?vk[*msvw\s«
\6rsltX¢L\oZ\?vwryikps\ZvwmsLvwrs[1[*poZ¹ryDZvkm:rsltXªZvwmfph\6gr¹ryvtrshps[º«rsgwgjmhlpqriw\?¢rs¡DgziwvwrLl©iwp|mLoDgryo
iwmfmsqg£h\6hpl?riw\?*iwm^rgk4\?lp|l¤µry[*p|e*my¤¬ZvwmsLvwrs[,L\oZ\?vwryikpmso¬¥WXZ\lms[*Zp|\?v»h\?s\ms4\v´lrsoikXfnDg
ltXDm:m:gj\ikXD\&[1m:gzirsZZvwmsZvwpryik\as\?oZ\vtriwp|L\ZvwmsLvwrs[*[1poZ1ryZZvwmLrLltXR¤¶mLvr^Lp|L\o¤µrsl\i?¥
_nZvryZZvwmLrLltX~pqg¬p|nDgjikvtriw\?a¡feikXDvk\?\Ms\oD\vtrikps\ZvwmsLvwrs[1[*poZryZZvwmLrLltXZ\?g?«oDrs[*\e~_u-6 /¨«
rsoZoZmsiwriwp|mLoDg -Ä /¨«ErsoDZvwmsLvwrs[Çgj4\?lprs|pÉ?ryikpmso;-O «#/KÀylmsoDl\hiwnDry|emyiwXZ\vtg¬ryDZvkm:rsltXZ\6gOlrsoa¡4\»lmsoh
gkpqh\vw\?O¥~_u¹pg¯´\¸¾gjnDp¸iw\?aikmp|o:iwvkmhhnDl\£lvwmLgwgj¨lnhijiwp|oZ¡4\XrE:pmsvtgOpo^¼au£¬8iwvwrsoDgjqriw\?ZvwmsLvwrs[g
wÁ?ÂÄÃ:Â|ÅBZvwmsmsLnZ\1rsoD²\Zp|mLsnZ\lmfZ\1ms¤´~uB½pofsmhlryikpmsoDgt ©¥*oDoZmyitrikpmsog\oDrs¡Z|\1oZmLoh8¤¶nDoDl©iwp|mLoDry
lmsoDl\vwoDgikm&¡4\po:ikvwmfZnDl\6^po1ikXZ\lms[*Zpqrikpmso1Zvwmhl\?gwgkÁ6ÂÄÃ:Â|Åvw\?gkmsnZvtl\´[ryoDrss\[*\?oLi© ©¥uBvwmssvtry[
gk4\?lpqrypÉ?riwp|mLo;lrsorLZhvw\?gwg£mLhikp[*p|É6rikpmsoZKmLvkp\o:ik\6ZvwmsLvwrs[ L\oZ\?vwryikpmsoVwÁ?ÂÄÃ:Â|Å>lnDgjikms[*pÉ?ryikpmso;ms¤
gkmy¤³iz¯ryvw\lms[*4msoZ\?o:iwgt ©¥
}\DoZpoZ¢¤µrLl\itg*¤¶nZvkikXZ\?v;\?rLZgnDg*iwmhpqgziwp|oZLnZpqgjX¿¡4\iz¯´\\?o·¤¶nDoDl©iwp|mLoDryaryoD oZmLoh8¤¶nDoDl©iwp|mLoDry
¤µrLl\iwg?¥·_oikXD\mLoZ\;XryoDO«£ikXZ\¤¶nZoDlikpmsoDrs´¤µrsl\iwg*h\DoZ\ºZvwmssvtry[ s\?oZ\vtriwp|mLo¢Zvwmfl\?gwgj\6giwXDri
[rs±s\iwXZ\º¼au»OKikvtryoDgkryik\6¢Zvwmssvtry[ \{h\?lnhiwrs¡Z\s¥_o¢ikXZ\myiwXZ\v1XDryoO«MoZmsoZ8¤¶nZol©ikpmsory»¤µrsl\iwg
\?oZvwpltX ikXD\¹rsoZsnrys\º\{f\6lnhiwp|mLoHp|oHiw\vw[*g;my¤vk\ :nZp|vw\[*\?oLitgp|±L\Æ\?vj¤¶mLvk[ryol\s«´vw\prs¡Zp|p|ize·ryo
gk\?lnZvwp¸izeL¥
5 Ó 0 `2¶ <2Ó 0 7
Y
Ï
<;
Ó Ô Ó 7 Ó>=Ð
Ó Ô
ÏA4Ï
7
Ó>C ?E7GF
Ó C 27Ï
7 ˦\£h\DoZ\»r[1\ikXZmhhmL|mLse~ikm~h\?s\?|mLr
acZ¹lmL[1Dp|\v6¥Ë¦\poLiwvkmhhnl\r&¼au£OKikvtryogjqriw\?1ry¡Dgjikvtrslivw\Dvk\6gj\?oLitriwp|mLo^ms¤iwXZ\Zvwmssvtry[
|mLspqly¥ÌWXZpqgvw\Zvw\?gk\o:itrikpmso·pggjikvwnDliknZvw\?Hgkm²iwXDri¤¶nDvjiwXZ\v;lms[*ZpryikpmsoHlrso·ZvwmhhnDl\ºr
gj4\?likvwnZ[ ms¤p[*Z\[*\o:iwryikpmsoryvwpryikpmsoDg?¥
0 Ó A4Ï 7 Ï¿Ó =4Ï
0 Ï h2AÏ C ÓM= 20 = ÓÓ 78
7
_nZv*[*\ikXDmfZmsmsse¢vw\p\?g^mso·r
oZms\?hnDgk\my¤Os\?oZ\vtriwp|L\»ZvwmsLvwrs[*[1poZ¥WXZpqgM[*\ikXDmfZmsmsse¤µrslpp¸itrik\6gikXD\s\?oZ\vtriwp|L\»Zvwmy
svtry[*[*p|oDDvkmhl\6gkgvw\ :nZpvw\?²¡:e²achÇlms[*Zpqrikpmso &XZp|LXh¨|\?s\ML\oZ\?vwryikps\1Zvwmssvtry[*[*poZ
DryvtrsZp|L[*g£lryo¡4\~ngj\6*ikm[*mhhnZqryvwe^Zvwmhl\6gkgBZms[rypoh¾gj4\?lp¸lp|oh¤¶mLvk[ryikpmsoryoD;ry¡Dgjikvtrsl
ikpmsoDg?¥
sZ Ï ?Ô Ð 7
˦\nDgk\msnZv£[1\ikXZmhhmL|mLse&iwmh\L\msr&lmL[*Zp|\vB¤¶msv£r&ch¹h\6hpqlriw\?^ikm
ikXZ\&lvk\6rikpmsoms¤¬ik\?|\?ZXZmLo:eRgk\vwfpl\?g?¥Ë¦\aZvk\6gj\?o:i´rsgk4\?l©itg«hrsoZoZmyitriwp|mLoDg»rsoD;gk4\?lpqrypÉ?riwp|mLo
msZ4msvkiknDoZp¸iwp|\6gikXri[*mfZ\¬ryvwpmsnDglmL[*Zp|qriwp|mLoZp|[*\ogjpmsoDgms¤iwXZpqgacZB¥
7I20 Ï 7 WXZ\ºvk\6gzimy¤ikXZpqg*Drs\?vpg*mLvk:ryoZpÉ\6rsg^¤¶msm¯g¥¿cf\?likpmso¿¹po:ikvwmhhnDl\6g*msnZvl?rsgk\
gjiknhes«Drchª¤¶mLvik\?|\?ZXZmsofegj\?vkfpql\?g?¥£cf\6l©ikpmso],*Zvw\?gk\o:itgmsnZv[*\iwXZmhhmsmsLeikmRZ\s\?|mLÆr1ch
lms[*Zp|\?v?¥1cf\?likpmso
O
¤¶mhlngj\6gmso²lms[*Zp|poZikXZ\*ZvwmsLvwrs[ |mLspqly¥^cf\6l©iwp|mLoªryoD
Y
Zvk\6gj\?o:iwgikXZ\
lms[*Zpryikpmso¢ms¤¤¶nZoDlikpmsoDrs´rsoD¢oZmLoh8¤¶nDoDl©iwp|mLoDry´rsoZsnrys\nDoZp¸itg¥@SpoDry|eL«£cf\?likpmso ¹hpqgklnDgkgk\?g
mLnZvryDZvkm:rsltX¬«fryoºch\?l©iwp|mLo Z*lmsoDl|nDZ\?g?¥
+, .°(14
_nDvryDZvkm:rsltX·ikm h\L\msZpoZ ch,lms[*Zp|\?vwgRpgp|nDgziwvwryik\6H¡:e¿rch ikm·lvk\6riw\ºik\\DXZmsofe
gk\vwfpl\?g?¥Ë¦\ltXZmfmLgk\£iwXZ\cf\6gkgkpmso1½¾oZp¸iwpryikpmso*uBvwmyiwmflms¬Kcf½¾u» ,-<,h«D
O
/rLgikXZ\nDoDh\vwe:poZ&gkp|LoDryp|oD
DvkmsikmhlmL8¥WXZpgDvkmsikmhlmL:pqgnDgk\?^¤¶msvMmLpl\ms\v½¾u¿ MmL½¾u» MryoiwXZp|vt^s\oD\vtrikpmso^[*ms¡Zp|\ZXDmsoZ\6g¥
½¨ipqggjiwryoZryvthpÉ\?¡feikXD\&½¾È£W SaryoDºrsZmshiw\?¡:eRikXZ\&½zW¥
cf½¾u pgrvtryDpheH\[*\vwspoZDvkmsikmhlmLikXriºZrLl\6gik\?|\?ZXZmLo:eHpo:ikm [rsp|oDgjikvw\?rs[-lms[*Znhiw\v
gwlp\ol\s¥²½¨i1pqg1lms[^¡ZpoZ\?¢¯p|ikX r¹ofnZ[^¡\?v^ms¤\{hpgjikpoZ²ZvkmsikmhlmLgikm²XDryoDZ|\Ersvkpmsngrsgk4\?l©itgms¤
lms[*[nDoZpl?riwp|mLoDgVwÁ?ÂÄÃ:Â|Åikvtryogj4msvkiryoÌvw\?ry|Kikp[1\²gziwvk\6ry[*p|oD: ©¥ ½¨iºvk\?|p\?g;mso¿iwXZ\¦l|p\o:ik¨gk\vws\?v
[*mhh\?8¥~cf½¾uÇZryij¤¶mLvk[gZvwmfpZ\&vkpqltXÆZvwmssvtry[*[*poZ*p|o:ik\?vj¤µrLl\6gp|oVrsoZsnDrss\6g|p±s\1] ryo 2LrErZ¥
WXD\Vs\?oZ\vtry|¨ZnZvwm:gj\ÆoDryiknZvw\¹ms¤&ikXZ\6gj\²ZvkmLsvtry[*[*p|oD¢p|o:ik\?vj¤µrLl\6g;[ry±L\ÆikXD\[s\?vke rsvkL\Vryo
po:ikvwpl?riw\ikm*nDgk\s¥MWXZpqggjp|iknrikpmsopgh\?[*msoDgjikvtriw\?R¡fe 2:½&cf½¾u«Dr1gzitryoDZrsvwZp|É?\? 2:rErpoLiw\vk¤µrsl\
iwmRcf½¾u -ZD«¬6 /¨¥ 2:½& cf½¾u¿lmLoDgkpgjiwgms¤»<,L ^lrLgkgk\?grsoD[1mLvk\aiwXDryoE,s L s ^[1\ikXZmhZg?¥
WXZ\oZ\\6¤¶msvrch p|oºiwXZpghms[rsp|oÆgjik\[g¤¶vkmL[ iwXZvk\?\&[rypoÆvk\6rsgkmsoDg?¥Spvwgji?«[1mhh\?vkoºiw\\
DXZmsofe&pqgMrgkmy¤³iz¯ryvw\£po:ik\ogjps\ryvw\?r~¡\6lryngj\´my¤ikXZ\XZm:gziMmy¤oZ\¯ ¤¶nZoDl©iwp|mLoDryp|ikp\?gp|ims§4\?vwg?¥ch\?lmLoDO«
DvkmLsvtry[*[*p|oZik\\DXZmsofe;gk\vwfpl\?g´oZm¯Ìvw\ :nZpvk\6g£\{fik\ogjps\\{h4\vkikpqgj\apoºcf½¾u¿rsoD;p|iwglms[*DrsoZp|mLo
DvkmsikmhlmLg?«¬hpqgziwvkp¡Znhiw\?²ZvkmLsvtry[*[*p|oDD«>oZ\iz¯´msvw±fp|oDD«¬ryo¦cf½¾uZvwmsLvwrs[*[1poZRpo:ik\?vj¤µrLl\?g?¥*WXZp|vtO«
r²gziwnDheªmy¤\{hpgjikpoZ¹iw\\ZXDmsofe¢gj\?vkfpql\?g^gjXDm¯g&ikXri^DvkmLsvtry[*[*p|oZ¹r²gj\?vkfpql\RmsLplRp|o r¹sps\?o
ã¶êDúõOâ6ã³ß×8ÞzÚ8ßEÞ¾×BêDß©ñÄßEÞzÞzÚ8ñÄßúZàtÜõÙ©Ú8ÝzÞ©þ
ã³úô£â6ã³ß×8ÞzÚ8ßEàw×KñÄÙ©ßàtûZúhÞzûÄÞzÝzÙ©óó´ÖEßEñÄÝjàw×8ñÄÙ©ßEÜôßEñÄÙ©ßLþ
1 service Counter { 2 processing {
3 localvoid log (int);
4
5 registration {
6 int count;
7
8 response outgoing REGISTERREGISTER() {
9 count = 0;
10 returnforward;
11 }
12
13 void unregisterunregister() {
14 log (count);
15 }
16
17 dialog {
18 response incomingINVITE() {INVITE 19 response resp = forward;
20 if (resp != /SUCCESS) {
21 return forward 'sip:secretary@company.com';
22 } else {
23 count++;
24 return resp;
25 }
26 }}}}}
Sp|LnZvk\* WXD\lmsnDoLiw\vgk\vw:pql\po¹cfu£
Dryij¤¶msvw[,¯p|ikXRr^¼au£Æpqg :nZp|ik\~rqry¡4msvwp|mLnDgMryo*\vwvkmLvj¨ZvwmsoZ\»Zvkmhl\?gwg¥½¨i£vw\ :nZpvk\6gvk\6lnZvwvkpoZ&lmhh\
rijiw\vwoDgrsg´iwXZ\&ZvwmsmsLnZ\arsoD\Zp|mLsnZ\ms¤po:Lmhlriwp|mLoDg´my¤ikXZ\ch½¾u DvkmLsvtry[*[*p|oZ^p|o:iw\vk¤µrsl\L¥
˦\&XDrEs\ah\L\ms4\?r1ch¦oDrs[1\6ch\?gwgjpmsouBvkmhl\?gwgjpoZ*ryoDsnDrss\^Kcfu£ »ikXDryi\?oDry¡D|\6g£iw\\
DXZmsofeÆgj\?vkfpql\6giwm¡4\1Z\DoZ\lmsoDlpgk\es«>nDgkp|oDXZpsXZK\L\ry¡DgjikvtrslikpmsoDgryoDVoZmyitrikpmsog - /¨¥cfu£
\?oDry¡D|\6gBiwXZ\DvkmLsvtry[*[*\vMiwm^lmLoDl\?o:ikvtrik\msoiwXZ\gj\?vkfpql\msLpls«frs¡Dgjikvtrsl©iwp|oDms\?v£m¯K\L\Zpo:ikvwp¸
l?rslp|\6g´gknDltXÆrsg´iwXZ\Zvwmyikmhlms¬h\iwrypqgryoD;ikXZ\&nDoDh\vwe:poZ*Zqrik¤¶msvw[ ZvwmsLvwrs[1[*poZpo:ik\?vj¤µrLl\s¥
~o;cfu£ºZvwmsLvwrs[ h\DoD\?gBrik\?|\?ZXZmLo:e1gj\?vkfpql\´ikm¯XZpqltX*nDgk\vtgMlryogknZ¡Dgwlvwp|¡4\s¥WXZ\ +Á1+X+ I &pg
r±L\e^oZmyiwp|mLop|o;cfu»BÀsp|i»gjikvwnDl©iwnZvw\?giwXZ\~h\?s\msD[1\?o:iBmy¤¬raik\?|\?ZXZmsofe*gj\?vkfpql\L¥Ìgk\?gwgjpmsolmsoDgkpgjiwg
ms¤rÆgj\imy¤XDrsoDh\vtgryoDªr¹gjiwryik\L¥ XryoDh\v1h\oZ\?grÆikvw\?riw[*\o:i&¤¶msv1rºZvkmsikmhlmLBvw\ :nZ\?gjimsv
rºDryij¤¶msvw[ \s\?o:i?¥Æ XDrsoDh\v[rEe²¡\ms[*p¸ikik\6O«p¸¤oZm¹gk\vwfpl\|mLspqlpqgrsgwgjmhlpryik\?¦¯p|ikXp|i?¥¹
gjiwryik\ry|m¯ggkms[*\Zritriwm1¡4\[rypoLitrypoZ\?rslvkm:gkg´r*gj\i´ms¤XDrsoDh\vtg¥Bcfu£¦ms§4\?vwghp|§4\?vk\?o:i±fpoDZg
ms¤£gj\6gkgkpmsoDgiwXDria¤¶msvw[rXZp\vtryvtltXfes¥~ gjp[*Z|\1lmLnZo:ik\vagj\?vkfpql\¯vwp|ijik\?o¹po¦cfu££«>\{hXZp¡Zp¸iwp|oDRikXDpg
XDp|\?vwrsvwltXfes«:pqghpqgjZqrEes\6Rpo]SpsnDvk\*s¥
WXZ\p|oDoZ\vw[*mLgjigj\6gkgkp|mLo¢pgikXZ\ `I`!kà Rp|i[ryoDrss\?gr¹lmL[1[^nZoZpqlryikpmsoª¡\iz¯»\?\o¢Drsvjiwp|\6g¥¹
Zprs|mLRpglvk\6rik\6Æ¡feikXZ\ ;vw\ :nZ\6gzi6«>lmsohvk[*\?¹¡:eiwXZ\ºvk\ :nZ\?gji?«>ryoD¹ik\?vk[*poDriw\?Æ¡fe
iwXZ\vw\ :nZ\6gzi6¥Mhprs|mL1gk\?gwgkp|mLoh\DoZ\?gXryoDh\vtg´¤¶msv´iwXZ\cf½¾uHvk\ :nZ\?gjiwgryo;Zqrik¤¶msvw[ \L\o:iwg
4\vkiwrsp|oDp|oZikmiwXZ\lms[*[nDoZpl?riwp|mLo[*rsoDryL\[*\o:i6¥½¾oiwXZ\lmsnZo:ik\?v»gk\vwfpl\s«Lrso XDrsoDh\v»pg
Z\DoZ\6ikmRDvkmhl\6gkgpoDlms[*p|oDRlryqg¥WXZpqgXDrsoDh\v~gkehgziw\[riwpl?ry|e31` ` + µÂ³Á6Â|Åvwmsnhiw\?gt rlrs|
iwmRiwXZ\nDgk\va¯XZmgjnZ¡gklvkp¡\6ºikm;ikXZpqgagj\?vkfpql\s¥½¨¤MikXZpqg¤¶msvw¯´rsvwºhmf\6g~oZmsiagknDll\\6kÁ6ÂÄÃLÂ|ÅikXD\^nDgk\v
pqga¡ZnDgkeZ ©«OiwXZ\lrypg¤¶mLvk¯ryvth\?ÆikmÆrgk\?lvk\iwrsvkeL¥^_~ikXZ\?vk¯pqgj\L«>ikXZ\*lrs|Mpqgrsl?l\Zik\?¬«¬rlmsnZo:ik\?vpg
poDlvk\?[1\?o:ik\?¬«ZryoD;ikXZ\&vw\?gk4msoDgk\pqgvw\iknDvkoZ\6Riwm*ikXZ\&l?ry|\?v?¥MWXZ\&gk\?gwgjpmsoryvwprs¡Z|\*nDgk\?po
iwXZpqg~XDrsoDh\vpgah\oZ\?Æpo¹iwXZ\^gk\?gwgkp|mLo¹gjnZvwvwmsnZoDZp|oZRrhpqrymsD«oDry[*\?|eikXD\ kÁ¨Ã+ I gk\?gwgjpmso¬¥
chnDltXÇrgk\?gwgjpmso¿pqg;lvk\6riw\? ¤¶msv\?rLltX¿nDgj\?v;ms¤&ikXZ\¦lmsnDoLiw\vgj\?vkfpql\ÆiwXDrivk\?spqgziw\vtgmsoHiwXZ\¦cf½¾u
Dryij¤¶msvw[$¡fe²gk\ohp|oDiwXZ\ vw\ :nZ\6gzi6¥RWXZpggj\6gkgkp|mLo²h\DoZ\6grºgzitrik\*iwXDrilmsoDgkpqgzitgmy¤´r
nDoZp :nZ\^ryvwprs¡Z|\Z ©«p|oDp¸iwprs|pÉ\6Æp|o¹ikXZ\ RXryoDh\v6¥~,nDgj\?vpqgnZoZvw\spqgjik\vw\?\?p¸iwXZ\v
¯XD\o1XZpgvw\Lpgjikvtriwp|mLo\?rsgk\´\{hZpvk\6gmsv¯XZ\o^ikXD\ vk\ LnD\?gjiMlmso:iwrsp|ograÉ?\vwmy¨|\6rsgk\s¥¬Ê´myiwX
gkp|iknDryikpmsoDgBrsvk\fp\¯´\?*¡fecfu£¹rLg£rnZoZp" :nZ\~\?s\?oLiBory[*\? >«6¤¶msv£¯XZpltXRrXDryoDZ|\?v£lrso
¡4\Z\DoZ\6po*ikXZ\cfu£¹DvkmLsvtry[º¥½¾oRmLnZv£\{Zry[*Z\s«yiwXZ\ &XDryoDZ|\?v£po:Lms±L\?gMr¤¶nZol©ikpmso
iwXDrims:gBiwXZ\&lmsnDoLiw\v6«f¯XZ\o;ikXZ\&gk\?gwgjpmsopg»ik\?vk[*poDriw\?O¥B´i´ikXD\iwmsmy¤¬iwXZ\&gj\6gkgkpmso;XDp|\?vwrsvwltXfe1pg
iwXZ\ +Á <ItÁagk\?gwgjpmso¬¥cfnDltXVrgj\6gkgkpmsoÆpqglvk\6rik\6º¯XZ\o¹ikXZ\*gj\?vkfpql\pqgah\Zmes\6ºmsoÆiwXZ\Dryij¤¶msvw[
rsoDh\\iw\?¯XZ\oºp|ipgnDoDh\D|meL\?O¥
cfu»ry¡DgjikvtrsliwgmL\vr*ofnZ[¡4\vms¤DvkmsikmhlmL¬ryoDZqrik¤¶msvw[ pgwgknZ\?grs[*msoZ*¯XZpqltXºpgiwXZ\gjiwryik\
¤¶nD|oZ\?gwg^my¤rºikvtryogkrLl©ikpmso¥¹¬\i^nDg\{hZrsp|oªiwXZpqgpqgkgknZ\R¡4\?l?rynDgk\Rp|i^p|nDgjikvtriw\?g&iwXZ\;:ry¢¡4\iz¯´\\?o
chu£ rsoDÆrRcf½¾uÌZqrik¤¶msvw[º¥WXZpg~pgwgknZ\¯p|ryik\v¡\^nDgk\?ºpoÆ\{Zry[*Z\?g?¥ikvtryogkrLl©ikpmsoÆlmsoDgkpgjiwg
ms¤r1vw\ :nZ\6gzi~rsoDikXZ\&vw\?gkmLoDgk\ap|iiwvkpsL\vtg¥ÈM{hpqgziwp|oZ;ch½¾u¿Zryij¤¶mLvk[gZvwmfph\&gk\Drsvwryik\poLiw\vk¤µrsl\
\?o:ikvwp|\6g¤¶msvZvwmfl\?gwgjpoZvw\ :nZ\6gzitg~ryoÆvk\6gj4msogj\6g¥ ik\\DXZmsofeZvkmLsvtry[ [*rEeZvwmhl\?gwgr;vk\ LnD\?gji
rsoDp|iwg1vw\?gkmLoDgk\poDh\?\?oDh\o:iw|e>ÀgjnltX·rVikvtryoDgwrslikpmsopqg*gkrspikm¦¡\8+ ¨Á!|Á1+X+©¥ |ik\vwoDryikps\es«
riw\\ZXZmLofe¹Zvwmssvtry[ [rEe¹oZ\?\?²ikmº[ritltX¢rvw\?gk4msoDgk\^¯p|ikX¦iwXZ\msvwp|Lp|oryvk\ :nZ\?gjiikm¹lmLo:ikpo:nD\
gkms[*\&iwvk\6riw[1\?o:ipoZp¸iwpryik\6¹¯XZ\?oÆikXZ\^vk\ :nZ\?gjiLmyi~Zvwmhl\6gkgk\?O¥acfnDltX²rikvtryoDgwrslikpmsoÆpqggwrypqºikm¡\
+ `¾Á'!!¡\6lryngj\Rp|i^vw\ :nZpvw\?giwXZ\RZqrik¤¶msvw[ iwmVvw\iwrsp|o¢\?oZmsnDsXªp|oZ¤¶msvw[*ryikpmsoªiwm¹|poZ±¢rÆvw\?gkmLoDgk\
iwmikXD\^mLvkpspoDryvk\ LnD\?gji?¥cfu» ry¡gziwvwrLl©iwg~ms\?vikXZ\6gj\p|[*Z\[*\o:itrikpmso²h\itrypg?¥g~gkXZm¯oÆp|oVikXZ\
XDryoh|\?v?«>¯XZ\?o¹iwXZ\ vk\ :nZ\?gjipqg¤¶mLvk¯ryvth\6O«DiwXZ\1vk\6gj4msoDgk\pqg~ikvw\?riw\?Ưp|ikXDp|o²ikXZ\
gwry[*\*XDrsoDh\v6¥c:iwryik\¤¶nZ|oZ\6gkg&ms¤»iwXZ\*ikvtryogkrLl©ikpmso¦pqgh\iw\vw[*p|oZ\6¦¡:e¦ryoDrs|efÉ?p|oZikXD\;gj\?vkfpql\L¥½¾o
¤µrLl©i6«cfu£ my§>\vtggjiwryik\¤¶nZ|oZ\6gkgikXDvkmLnZsXZmLnhi~iwXZ\*gj\6gkgkp|mLo¹XZp\vtryvtltXfes¥a½¾o²mLnZv\{Zry[*Z\s«>ikXD\
rsvkpqry¡Z\1pgnDgk\?²po²¡4myiwX²iwXZ\*vk\?spqgziwvwryikpmsoVrsoD¦hprs|mLgk\?gwgkp|mLoDg¥^Ë¿XZ\o¢rÆcf½¾uÍ[*\?gwgkrss\1pgZvwmy
l\?gwgj\6¦¡:eªryocfu»ÌZvwmsLvwrs[«p¸itg^¼au£¬8iwvwrsoDgjqriw\?¦s\?vwgkpmso¦\{h\?lnhik\6ggkms[*\Rlmhh\iwmºikvwp|Ls\?v&ikXZ\
lmsvwvk\6gj4msohp|oDXDrsoDh\vryo;iwm*\{fikvtrsli´iwXZ\ryDZvkmLZvwpryik\gzitrik\L¥
´! % '#$%& # () +,-%.
_nDv£gzitryvkikpoZmLp|o:iBiwmh\L\msr&ch¹lmL[*Zp|\v£pgBikmh\DoZ\~r&hpvw\?l©iMiwvwrsoDgkryikpmso*my¤4ikXZ\ wà X`
!kÃIp|o:iwm rH¼au£ vk\?Zvk\6gj\?o:iwriwp|mLo¬¥ WXZpqg;iwvwrsoDgkryikpmsoÌpqgºhp|vw\?lipoÌiwXDriºp|iÆrsp|[g;ikm s\?oZ\vtriw\
rs¡Dgjikvtrsl©i¼au£lmhh\s«oZmsioD\?l\6gkgwryvwp|ea\{h\?lnhiwrs¡Z\s«E¯XZ\vw\»ch[*\?ltXDrsoZpgk[grsvk\£oZmyies\i\{hDrsoDh\6
¡Dnhi&vwryikXZ\?va\¤³inDoZp|o:iw\vwZvk\ik\6O¥1~¸iwXZmsnDsXªry¡Dgjikvtrsli?«>ikXDpgaiwvwrsoDgjqriwp|mLoV\?oDlmhh\6g&hms[rypoh¾gj4\?lp¸4l
poh¤¶mLvk[riwp|mLopo:ikm1ikXD\¼au£ªvk\?Zvw\?gk\o:iwryikpmso¬«fpoºr*lmso:ik\{:i¯XZ\?vk\aiwXZ\elryoqrik\?v¡\&po:ik\?vkZvw\iw\?O¥
½¾o¹mLnZviw\\ZXZmLofel?rsgk\gziwnDheL«D¤¶mLv~\{Zrs[1D|\L«D¯XZp|\ikXZ\^vkmLnhikpoZRms¤Mrcf½¾uÌ[*\?gwgkrss\&poVcfu£ pg
oDmyilmsoDl\vwoZ\?¯p|ikXVgjiwryik\¤¶nD|oZ\?gwg?«DiwXZpg~Zvwms4\vkizepqg\{fD|pqlp|ike\?oDlmhh\6ºp|o¹ikXZ\*¼au£OKikvtryoDgkqrik\6
L\vtgjpmso¥
WXZ\~¼au»OKikvtryoDgkryik\6ZvwmsLvwrs[|mLspqllryo^ikXD\o*¡\iwXZ\poZZnhiBiwm&ryvwp|mLnDgp|o:ik\?vkDvk\iwriwp|mLoDgsnZpqf
poZ*iz¯´mRlmL[1Dp|qriwp|mLohp[*\oDgkpmsoDg 'MI`M !Dryo8 `"!'MI M`!G!"`fÃ#?ÃLÁ3'>I+©¥´_oºiwXZ\&msoZ\
XryoDO«fiwXZ\&¤¶nZol©ikpmsoryOnZoZp|iwgmy¤ikXZ\&qryoZLnDryL\arsvk\po:ik\oh\?ikmlms[*Z\[*\o:iikXD\¼au£OKikvtryoDgkqrik\6
DvkmLsvtry[msspql1ikmV[*rs±s\*p|i\{h\?lnhiwrs¡Z\s¥¹_oªikXZ\RmsikXZ\?vXDrsoDO«ikXZ\RoDmsohK¤¶nZoDlikpmsoDrsBnZoZp|iwgmy¤ikXZ\
qryoDsnDrss\»rLZhvw\?gwgp|[*Z\[*\o:itrikpmso*vw\DoD\[*\o:iwgmLv\oZvwpltXD[1\?o:iwg?¥WXZ\lms[*Zpryikpmso1my¤D¤¶nDoDl©iwp|mLoDry
nDoZp¸itgryvwp|\6g´¯p¸iwXvw\?gk4\?l©iiwm*¡msikXikXZ\itryvws\i¼au»¢ryoD;ikXZ\itryvws\i\{h\?lnZikpmso\offp|vwmsoZ[*\?oLi6¥½¾o
rLZhp|ikpmso*iwm&ikXZ\6gj\hp|[*\?oDgjpmsog«sikXZ\alms[*Zpqrikpmso*ms¤>oDmsohK¤¶nZoDlikpmsoDrsDnZoZp|iwg£[rEeryvwe^¯p|ikXvw\?gk4\?l©i
iwm*vk\ LnDp|vw\[*\o:itg|p±s\4\vk¤¶msvw[*rsoDl\L«fvk\?|pqry¡Zpp¸ize;rsoDgj\6lnZvwp¸izeL¥
Ë¿XZ\ikXZ\?vmsvoZmsi´¤¶nDoDl©iwp|mLoDryK«fikXZ\&lms[*Zpryikpmso;ms¤ch¦nZoZp|iwgl?ryo¡\&h\6lms[*4mLgk\?;p|o:ikm1iwvk\6rij
[*\?oLitg^ikXDryirsvk\poZXZ\vw\o:i1ikm¦\p|ikXZ\?v*ikXZ\itryvws\i1\{h\?lnhikpmso·\offp|vwmsoD[1\?o:i?«MiwXZ\ºrsoZsnDrss\msv1ikXZ\
DvkmLsvtry[º¥WXD\?gk\iwXZvw\\&lryik\Lmsvwp|\6g´my¤iwvk\6riw[1\?o:irsvk\oDrs[*\?31tÁ1+©¥
WXZ\^sm:ryOmy¤MiwXZ\ÁfÁX:'I`¢Á1>< Á1> 1tÁ1pqgikm;¡ZvkpqhL\ikXZ\^Lryº¡4\iz¯´\\?oºikXZ\1ach \{h\
lnhikpmsoº[*mhh\K«Z4mLgwgjp¡ZeRp[1D|pqlp|i?«4ryoDikXD\iwryvws\i\{h\?lnhikpmso\offp|vwmsoD[1\?o:i?¥BWXZ\chª\{h\6lnhiwp|mLo
[*mhh\?OpggknZZ4mLgk\?;ikm¡4\&XZpsX|\?s\?¬ryoDmLvjitry¡Z\s«Zrs¡Dgjikvtrsl©iwp|oD^mL\v´ikXZ\&po:ikvwpl?rslp|\6g»ms¤iwXZ\iwrsvj
L\i1\{h\?lnhikpmso¢\?o:fpvkmLoZ[*\o:i?¥²WXZ\;\{f\6lnhiwp|mLo\offpvkmLoZ[*\o:i¤µrsl\i1pg^p|o:iw\oDh\6ªikm²s\?oZ\vtriw\ikXZ\
oD\?l\6gkgwryvweVlmfZ\ikm¹po:ik\?vj¤µrLl\iwXZ\¼au£¬8iwvwrsoDgjqriw\?ªZvwmsLvwrs[$msspql*¯p|ikX¢iwXZ\RnZoDZ\vw|efpoZ¹qrEes\vtg?¥
]»mLoDgkph\?vkpoZ&iwXZ\&cfu£¦lrsgk\s«:iwXZ\\{h\?lnZikpmsoR\?o:fpvkmLoZ[*\o:i£¤µrLl\i»¡ZvwpZs\?g£ikXD\:ryR¡4\iz¯´\\?oikXZ\a\{f
D|pqlp|i£\L\o:ij¨XDrsoDhp|oZrsvwltXDp¸iw\?l©iwnZvw\´ms¤ 2L~½ &Çcf½¾uryo1ikXZ\p[*Zplp¸icfu£Æ[*mhh\¡Drsgk\?1mLovk\ LnD\?gji
XryoDh\vtg?¥ SDmsv\{hrs[*Z|\L«Zh\¤µrsnZ|ivk\ LnD\?gjiXryoDh\vtgoZ\?\?ikm¡4\&p|o:iwvkmhhnDl\?;ikmRlvk\6rik\ryoZ\\ik\
gk\?gwgkp|mLogzitrik\6g«M¯XD\oZ\?s\v*ryo cfu£ ZvkmLsvtry[ hmf\?g^oZmyih\oZ\XryoDh\vtg&¤¶mLviwXZ\ºlmsvwvw\?gkmLoDhpoZ
vw\ :nZ\6gzitg¥
WXZ\!`:Ã Ã:Á 1tÁZpg£lmsol\vwoZ\6¯p|ikX1ikXD\p|o:ik\?vkDvk\iwriwp|mLo1rsoD^\{hDryogjpmso1my¤4rsoZsnDrss\´[*\?ltXh
rsoZpqgj[g?«s¯XZ\ikXZ\?vBmsvBoDmyiB\{hZpqlp|i£p|o*iwXZ\¼au£¬8iwvwrsoDgkryik\?^ZvwmsLvwrs[ |mLspqly¥cfnDltXRra¤µrsl\i£L\oZ\?vwryik\6g
vw\?lnZvwvkpoZVlmfZ\;Dryijik\?vkogpo:ikvwp|oDgkpqlikm²ikXD\qryoZLnDryL\s¥ SZmsv1\{Zrs[1D|\L«MvkmLnhikpoZVmL\?vwryikpmsoDgmy¤~rs|
chu£Vgk\vwfpl\?gMoZ\?\?*iwm¡4\rsoDryefÉ\?^iwm^h\ik\vw[*p|oD\ikXD\pv»gjiwriw\¤¶nZoZ\?gwg¥MWXZpqg»p|oh¤¶mLvk[ryikpmsopqgB[rsh\
\{hZ|pqlp|i£po1ikXZ\¼au»OKikvtryoDgkryik\6^DvkmLsvtry[ msLpl´¡fe1rLZhpoZgkms[*\p|oZ¤¶msvw[*ryikpmso*po\?rsltX1po:Lmhlriwp|mLo
ms¤iwXZ\&vkmLnhikpoZ*ms4\vtriwp|mLoDg?¥
rsgjikes«MiwXZ\ wà 1tÁp|ofsmL±s\6glmL[*Zp|\v^ikvw\?ryik[*\o:itgiwXDriryvw\;gk\6lp|lRiwmViwXZ\ºgjnZ¡Zxz\?l©i
DvkmLsvtry[º¥ SZmLv&p|oDgjiwrsoDl\L«po¦ikXZ\lrsgk\*my¤~cfu££«OikXD\Rvk\ :nZ\?gjiXDryoh|\?v&oZ\?l\?gwgjp|iwryik\6ggj4\?lp¸4lgzitrik\
\{fikvtrsl©iwp|mLoÌms4\vtriwp|mLoDg?«~h\4\ohp|oD·mLoǯXDryiºgk\?gwgjpmsoÇErsvkpqry¡D|\6g;mhllnZv6¥ chnDltXÍrikvw\?ryik[*\o:iºpg
gk4\?lp|likmRr1Lp|L\oÆcfu£¢gk\vw:pql\ryo;iwXfnDgDryvkimy¤ikXZ\&DvkmLsvtry[ ¤µrsl\i?¥
+,-º%
"
! )ª
WXD\sm:ry¬ms¤£lmL[1Dp|p|oDikXZ\1msspql&ms¤£rZvwmssvtry[ pg~ikm;Zvkmhhnl\^rRvk\?Zvk\6gj\?o:iwriwp|mLoikXDryiary¡gziwvwrLl©iwg
mL\vp[*Z|\?[*\o:iwryikpmsoÆh\itrypg¯XZp|\¡4\poZ;rs[1\?oDry¡D|\iwms\oD\vtrikps\ZvwmsLvwrs[*[1poZ^ikmfmsqg?¥»WmR¡\
rsZZp|\6ºgjnDl?l\6gkgj¤¶nZ|eL«Zs\?oZ\vtriwp|L\ZvwmsLvwrs[*[1poZ^ikmfmsqgL\oZ\?vwrs|ep|o:iwvkmhhnDl\gjmL[*\lmsogziwvwrsp|o:iwg´mLo
iwXZ\aZvkmLsvtry[ gziwvknl©iknDvk\aryoD[rEe*vw\ :nZpvk\ZvkmLsvtry[ s\?oZ\vtriwp|mLoDryvtry[*\iw\vtg¥uBvwmssvtry[ gjikvwnDl©iwnZvw\
pqgRoD\\?Z\?Hiwm [ry±L\ÆikXZ\ª¼au£OKikvtryogjqriw\?HZvwmsLvwrs[°msspqlÆ[ritltX¿ikXD\VsvtryofnZqryvwp|izemy¤&iwXZ\VZvwmy
Lvwrs[ \o:ikp|ikp\?ga[ryoZpZnZqriw\?V¡:eºiwXZ\*s\?oZ\vtriwp|L\ZvwmsLvwrs[1[*poZiwm:mLg?¥WXZ\1Zvwmssvtry[ L\oZ\?vwryikpmso
ryvtry[*\iw\vtg&ryvw\*ize:Dpl?ry|e²oZ\\6h\?ªiwmVlngziwms[*p|É?\*ikXZ\Zvwmssvtry[ s\oD\vtrikpmso¦Zvwmhl\?gwg&mLv&ikXZ\\{h\
lnhikpmsoºL\oZ\?vwryik\?;Zvwmssvtry[º¥MWXZ\6gj\&Drsvwrs[*\ik\?vwg´[rEe;lmsvwvk\6gj4msoDRikmRlms[*ZpryikpmsoºZritr1ikXDryi~ryvw\
Zms[rypoh¾gj4\?lp¸l´poh¤¶msvw[riwp|mLo^ryo1rsvk\´\olmhh\?1po1ikXZ\iwvwrsoDgjqriw\?ZvkmLsvtry[mLvyryoDp|o*s\?oZ\vtriwp|L\
DvkmLsvtry[*[*p|oZ1h\?lrsvwryikpmsoDgwÁ?ÂÄÃ:Â|Åryoºrsgk\6l©ih\6lqryvtrikpmso4 ©¥
_nZvaryZDvkm:rsltX\oDrs¡Z|\6giwXZ\ZvwmsLvwrs[ s\?oZ\vtriwp|mLoºZvkmhl\?gwgikmR¡4\[*mhhnZqryvwpÉ\? £\?rLltXÆ[*mfZnZ|\
pqgvk\6gj4msoDgkp¡Z|\V¤¶msvºrkgjpql\Vms¤Zvwmssvtry[-s\?oZ\vtriwp|mLo¿oZ\\6h\?¿ikmHlms[*Zp\²rLp|L\oÇch£¥WXDpg
[*mhhnZqryvwpÉ?riwp|mLo^pqgBryvkikpqlnZqryvw|e^¯»\?||KZijiw\?1ikm&\{hZ|mLvk\iwXZ\p[*Z|\?[*\o:iwryikpmsoRgwlms4\ms§4\?vk\6^¡fe^ikXZ\
XDp|LXhK\L\>oDryiknZvw\my¤Mr1ch£¥
~o²\{hrs[*Z|\1my¤´r¼au£¬8iwvwrsoDgjqriw\?VZvkmLsvtry[|mLspqlpqghpgkZqrEes\6Æp|o Sp|LnZvw\1h¥&½¨i&pqgikXZ\cfu£
DvkmLsvtry[µgkXZm¯´\?RpoESpsnDvk\*6 ´lms[*Zp|\6;po:ikm12LrEr¤¶msvr;2L~½ &cf½¾uHp|o:ik\?vj¤µrLl\;-6 /¨¥BWXZpqgp|o:ik\?vj
¤µrLl\pg»izefZpqlry4my¤r^lp|\?o:ij¾gj\?vkL\v£[*mhh\?poRiwXDrip¸ivw\ :nZpvk\6g£r&iw\\ZXDmsofegj\?vkfpql\iwmp[*Z|\?[*\o:ir
*po:ik\vk¤µrsl\s«4Zvwm:pqhpoZ *ryo &[*\ikXZmhZg?¥ZZp¸
iwp|mLoDryes«OrR[*\iwXZmh¹pqgZ\?lqryvw\?ÆikmXDryoDZ|\^ErsvkpmsngZqrik¤¶msvw[ iwp|[*\?msnhitg¥&qgkmD«OZvwp|ryik\[*\ikXZmhZg
XrEs\¡4\\o¢po:ikvwmhhnDl\6¦ikm¹XryoDh\iwXZ\Rvw\spqgjikvtrikpmso¢rsoDªnZoh¨vk\?spqgziwvwryikpmso¦my¤ikXD\;gj\?vkfpql\m¯oZ\?v?«
rLg¯´\´rLg&iwXZ\R¤¶mLvk¯ryvthpoZÆmy¤~l?ry£po:fp|iwryikpmsoDg¶vw\?gkmLoDgk\?grsvk\iwvk\6riw\?¢po f ©¥
gl?ryo¹¡4\1oZmyiwpl\?¹po 4«L¤¶msva\{Zrs[1D|\L«iwXZ\*gj\?vkfpql\msLpl&Xrsg¡\?\o²gjikvtrypsX:ik¤¶msvk
¯ryvtheºikvtryoDgkqrik\6Vpo:ikm 2:rEEr \{hZvw\?gwgjpmsoDga[ryoDp|ZnDryikpoZºErsvkpqry¡D|\6garsvk\*vw\ZvwmhhnDl\?²s\vw¡Dryikp[À
[*\6gkgwryL\RvkmLnhikpoZ²pg^ikvtryogjqriw\?¢po:ikmVpofsmhlryikpmsoDgmy¤ º¤¶mLv1ikXZ\Æcfu£ Vryo
a¤¶mLvikXZ\&vw\iwnZvwoZp|oD1vw\?gk4msoDgk\?g?¥
\ing~oZm¯\{hrs[*p|oZ\^XZm¯Íikmlms[*Zp\&ikXZ\1ZvwmsLvwrs[ msspqla¤¶msvas\?oZ\vtriwp|L\&Zvwmssvtry[*[*poZRryh
Dvkm:rsltXZ\6g¥
! #"$&% ')(*!+,"!-/.0'1324'576869(:+;2
WXD\~_uÇryDZvkm:rsltXºlmLoDgjpqgjiwgms¤£rxzmspo:i~mLp|o:i~qryoDsnDrss\s«Zikm;pqh\?oLiwp¸¤¶emfl?riwp|mLoDgpoºikXZ\^Zvwmssvtry[
\{h\?lnZikpmso¬«ZrsoDrsoÆrshfpql\rsoZsnrys\L«:ikmh\oZ\rsZZp¸iwp|mLoDryO¡4\XDrEfpmsvriiwXZ\?gk\&|mhl?rikpmsog -? #/K¥
_nZvLmLry4pqg£iwm^DvkmhhnDl\ar*¼au£¬8iwvwrsoDgjqriw\?DvkmLsvtry[ |mLspqliwXDri[riwltXD\?g»ikXZ\a\{hZvw\?gwgkp|fp|ize1ms¤
iwXZ\xzmspo:i&mLp|o:iqryoZLnDryL\s¥^WXri&pg?«¬iwmÆgziwvknDliknZvw\1ikXZ\*iwvwrsoDgkryik\?VZvwmssvtry[gkmikXDryip¸i[ritltXZ\?g
iwXZ\LvwrsofnZrsvkp|izemy¤MiwXZ\xzmLp|o:i~4mspo:ipqh\o:iwp¸l?riwp|mLo¹ryoDiwXZ\^gk\[ryo:iwpl?gmy¤MiwXZ\^rLgkgkmhlpqrik\6ºrshfpql\s¥
]»mLoDl\?hiknry|eL«ikmaZiMiwXZ\~_u¢ryZZvwmLrLltX¬«ychÆlmL[1Dp|qriwp|mLo^[^nDgziMpo:ikvwmfZnDl\gk\6lp|llmhh\gjikvwnDl©
iwnZvwp|oZrsoDlms[*[nDoZpl?riw\lms[*ZpryikpmsoºZritrZ¥
WXZ\ª¼au£OKikvtryogjqriw\? Zvwmssvtry[®|mLspqlºoZ\\6Zg;gkms[*\VgjikvwnDliknZvwp|oD¯XZ\oÌgkms[*\Vlmhh\¹pqgikm·¡\
poDgk\vkik\6 rigkms[*\DvkmLsvtry[ mLp|o:i?¥·½zh\o:iwp¸¤¶efpoZViwXZ\iwrsvkL\i*ZvkmLsvtry[ mLp|o:ivw\ :nZpvk\6gqryoZLnDryL\
\?o:ikp|ikp\?ggknDltX¢rsg&rº[*\iwXZmh¢h\oZp¸iwp|mLoªmsv&po:Lmhlriwp|mLo¬«rsvkpqry¡Z\*mhllnDvkvw\oDl\?g?«ryo¦Z\?lqryvtriwp|mLoDg?¥
g~rvw\?gknZ|i?«4rgj\ LnD\oDl\my¤BlmL[*[*rsoDZg[rEeoZ\\6ikmR¡4\Zqrsl\?ºpo:ikm;r*[*\iwXZmhÆpo¹r*ikvtryoDgkqrik\6
DvkmLsvtry[iwm¹\oDrs¡Z\;lmhh\iwm¹¡4\Rp|ogj\?vjiw\?ª¡4\¤¶msvw\s«Mry¤³ik\v6«msv^rsvkmLnZoD¦p|iwg\{h\?lnZikpmso¬¥¹WXZ\Rikms¢ms¤
SpsnZvw\;gkXZm¯gZvkpriw\^[*\iwXZmhZgaikXriXDrEs\1¡\?\o¦p|o:iwvkmhhnDl\?V¡:eºiwXZ\acZ lms[*Zp|\?v~iwmº\?rsgkp|e
poDgk\vkilmhh\&rsg´iwXZ\&ZvwmsmssnD\arsoD;\?Zp|mLsnZ\my¤po:Lmhlriwp|mLoDg´my¤Mcfu£ªvw\ :nZ\?gjiXDryoh|\?vwg?¥
]»mL[1Dp|p|oD²iwXZ\ºZvwmssvtry[ msLplryqgjm¦po:Lmss\6g^lms|\6l©ikpoZ¦msvlmL[*ZnhikpoZªpoh¤¶msvw[rikpmso ry¡4msnhi
iwXZ\chDvkmLsvtry[ iwXDriaoZ\\6ZgiwmR¡\^[rsh\\{hZ|pqlp|ipoºikXD\ikvtryogjqriw\?Zvwmssvtry[º¥WXZpqg~gjikvtrik\?se
gk\ryvtrik\6giwXZ\^DvkmhhnDlikpmso²my¤MikXD\1poh¤¶mLvk[riwp|mLoVryoÆp¸itga\{hZmsp|iwriwp|mLo¬«>|\6rEfp|oZp¸itgap|o:ik\?vkDvk\iwriwp|mLo
iwmmyiwXZ\v´lmL[1Dp|qriwp|mLoDrsgwgj\6g¥½¾oikXD\~lmLoLiw\{fi£ms¤~_u«LDrsgwgkp|oZp|oh¤¶mLvk[ryikpmsolrso\p|ikXZ\?v£¡4\~[rsh\
¡fersDhp|oD\{fiwvwr^ryvwsnZ[*\o:itgMikm1ms4\vtriwp|mLoDgBmLv»¡fe*poLiwvkmhhnlpoZ^gk\6lp|lp|oDgjiwrsoDl\ryvwprs¡Z|\6g~¥MWXZ\
qrikik\?vlrsgk\pg´¤¶nDvjiwXZ\v~ZpgwlnDgwgk\?p|oÆcf\?likpmso¹h¥Äh¥
½¾oªZvwp|olpZ|\L«¬¤¶nZol©ikpmsoryBchHnZoZp|iwglmsvwvk\6gj4msoÆikmÆrLgj4\?liwgaikXrilrso²4\vk¤¶msvw[*\?¦gzitriwpl?ry|e
gkpoDl\L«~poLiwnZp|ikps\es«ikXD\?gk\¦rLgj4\?liwgvk\DoZ\²ikXZ\¢gjiwryikpql²lms[*ZpryikpmsoÌZvwmhl\6gkg?¥ ½¾o lmso:ikvtrsgji?«oDmsoh
¤¶nDoDl©iwp|mLoDrynZoZp|iwg[*rEelmL[1Dp|\poLiwmR¡4myikX¹gjiwryikpqlryoÆhefoDry[*pqlrsgk\6l©itg¥c:itrikpqlrLgj4\?liwg[rEe¡\
ngj\6ªikm¦\{hDrsoD¢iwXZ\p[*Z\[*\o:iwryikpmsoms¤gk\6lp|l;mL\?vwryikpmsoDg?«¯XZ\vw\?rLg^Ze:ory[*plrsgk\6l©itg^[rEe
Z\DoZ\lmsoDZp¸iwp|mLoDry>[*msoZp|ikmLvkpoZrslikpmsoDg?¥
1 public class Counter public class Counter implements implements SipListener {SipListener { 2 [...]
3 private void handler_REGISTER (Request rq, String method) {handler_REGISTER 4 count = 0;
5 sendRequest (false, rq_request); /** SPL, line 10 **/
6 }
7 private void handler_unregister (Request rq, String method) {handler_unregister 8 local.log (count); /** SPL, line 14 **/
9 sendRequest (false, rq_request); /** SPL: default behavior **/
10 }
11 private void handler_INVITEhandler_INVITE (Request rq, String method) { 12 sendRequest (true, rq_request); /** SPL, line 19 **/
13 } 14
15 public void processRequest (RequestEvent requestEvent) { 16 String method = rq_request.getMethod();
17 if (method.equals (Request.REGISTER)) { /** SPL, line 5 **/
18 if (!registrar.hasExpiresZero (rq_request)) {
19 if (!registrar.hasRegistration (rq_request)) { /** SPL, line 8 **/
20 handler_REGISTER (rq_request, method);
21 } else { /** SPL: default behavior **/
22 sendRequest (false, rq_request);
23 }
24 } else if (registrar.hasRegistration (rq_request)) { /** SPL, line 13 **/
25 handler_unregister (rq_request, method);
26 } else { /** SPL: default behavior **/
27 sendRequest (false, rq_request);
28 }
29 } else if (method.equals (Request.INVITE)) { /** SPL, line 18 **/
30 handler_INVITE (rq_request, method);
31 } else { /** SPL: default behavior **/
32 sendRequest (false, rq_request);
33 }
34 } 35
36 public void processResponse (ResponseEvent responseEvent) { 37 String method = rs_request.getMethod();
38 rs_responseCode = rs_response.getStatusCode();
39 if (method.equals (Request.INVITE)) { /** SPL, line 18 **/
40 if (rs_responseCode >= 300) { /** SPL, line 20 **/
41 AddressFactory addressFactory = getAddressFactory();
42 SipURI sipURI = addressFactory.createSipURI ("secretary", "company.com");
43 rs_request.setRequestURI (sipURI);
44 sendRequest (false, rs_request); /** SPL, line 21 **/
45 } else {
46 count++;
47 sendResponse (true, rs_response); /** SPL, line 24 **/
48 }
49 } else { /** SPL: default behavior **/
50 sendResponse (false, rs_response);
51 }
52 } 53
54 public void processTimeout (TimeoutEvent timeoutEvent) {[...]}
55 }}
! "$#%&#'(
ͱs\?eRrshrsoLitryL\my¤msnZvryZDvkm:rsltXpqg´ikm1\?vk[*p|ir^acZ¦lms[*Zp|\?v´ikm1¡\&h\6gjpsoZ\6;rsoD;gjikvwnDl©
iwnZvw\?ªpo¢ik\?vk[gms¤[1mhhnD|\6g«ikXri^pqg?«rLgj4\?liwg?¥ÆÈ£rsltXrLgj4\?li1h\DoZ\6gr¹gk\6lp|lRchÌ¡4\XrE:pmsv
¯XDmLgk\lvkm:gkgj¾lnhikikpoZ^oriknDvk\pqgs\ofnZpoZ\?|eR[rsoDryL\?R¡fe~_u¥
+ +;17"5 "(*13+
~oZoZmsiwriwp|mLoDg~l?ryo¹¡4\1p|oDl|nh\?Æpo¹iwXZ\iwvwrsoDgkryik\?ºDvkmLsvtry[ iwm;[ry±L\^gkms[*\poh¤¶msvw[riwp|mLo¹\{hZplp¸i
rLgikXD\^ch¢ZvwmsLvwrs[ s\iwg[rsZ\6ºp|o:iwm;r*|m¯´\vk¨|\?s\Ovw\Dvk\6gj\?oLitriwp|mLo¬¥»~oZoZmyitriwp|mLoDg~rsvk\iwvwrLhp¸
iwp|mLoDryeRnDgk\?rsg\{fiwvwr1poh¤¶msvw[rikpmsoºh\6gklvkp¡ZpoZ^oDmsohK¤¶nZoDlikpmsoDrsOrsoZsnDrss\apgwgknZ\?g?¥
p|±L\rsgk\6l©iwg?«LrsoZoZmsiwriwp|mLoDg\ory¡Z\ikm[*mhhnZqryvwpÉ\´ikXZ\lms[*Zpqrikpmso*ms¤>r&chÆpo*ikXDryiBp¸i»p|o:ikvwmy
ZnDl\6gp|oh¤¶mLvk[ryikpmsoikXDryi~ryvw\qriw\vpoLiw\vwZvw\ik\6;¯p|ikXºvw\?gk\6l©iiwm*r1Lp|L\oºryoZoZmsiwryikpmsoZvkmhl\?gwgjmLv?¥
p¸§>\vw\o:i*gj\iwgms¤ryoZoZmsiwryikpmsoDg&XrEs\Rhp|§4\?vk\?o:ism:ryqg¥ÆWXZ\?vk\[rEe¦¡\ryoZoZmsiwryikpmsoDgiwm¹[ry±L\
vw\?gkmsnDvwl\R[ryoDrss\[*\?oLi^\{hZplp¸i6«£msv*ryoDoZmyitrikpmsogpoLiw\oDZ\?¢iwmViwvkpsL\v1ltXZ\?lt±ª4mspoLiwp|oD²ms¤gjmL[*\
gjiwryik\L¥;Ë¿XZ\?oªlms[*Zp|poZºiwXZ\RZvwmsLvwrs[|mLspqly«¬iwXZ\Rryp[ pgiwmÆs\?oZ\vtriw\*rsoZoZmsiwriwp|mLoDgaikXriryvw\Rrsg
gk\|¤³¾lmso:itrypoZ\?ÆrLg~4mLgwgjp¡Z\iwm[*poZp|[*pÉ\^ikXZ\1¯´msvw±ms¤MikXZ\*ryoZoDmyiwryikpmso¹Dvkmhl\6gkgkmsv~mfl?lnZvwvwp|oZriar
qriw\v´ZXDrLgj\L¥Wm*hm1gkmD«LikXD\amhlryikpmsoRms¤ryoryoZoZmsiwryikpmsoRpqgr±L\e*Dryvtry[*\ik\v6¥qgjm«frsvkLnZ[*\o:iwg£ikm
iwXZ\ryoDoZmyitrikpmso[rEeR¡\&oD\\?Z\?ºrsgrLZhp|ikpmsoDrsOp|oZDnhiikm1ikXD\ryoZoZmsiwryikpmsoZvkmhl\?gwg¥
. '1424'5 6 ! (*5:( 5 "(*13+
u£vkmLsvtry[gj4\?lprs|pÉ?ryikpmso²pg&rsoZmyiwXZ\vnDgk\^ms¤´rs\?oZ\vtriwp|L\ZvwmsLvwrs[*[1poZiwmfms¤¶msvchHlmL[*Zp|qr
iwp|mLo¬¥¢½¨iRrsZZvk\6gkgk\?gikXZ\ºmsZikp[1pÉ?ryikpmsoms¤chÍp|[*Z\[*\o:itrikpmso·¡ZnZpZp|oZ¦¡Zmhlt±fg?¥WXZ\pZ\?r²pg
iwXDri&Drsvji&ms¤´rach¿l?ryo¦my¤³iw\o¦¡\gk\\oªrsg&rqryoZLnDryL\^L|nZpoZºgjms¤³iz¯´rsvk\1lmL[14msoD\o:iwgaiwmss\ikXZ\?v?¥
Ê´\6lryngj\´ikXD\?gk\lms[*4msoZ\?o:iwgBl?ryo*¡\~snZ\?1poRrErsvkp\izemy¤Olmso:iw\{fiwgiwXZ\e1[ngziB¡4\XZpsXZeL\oZ\?vkpqly¥
Ë¿XDp|\aikXZpqgryZDvkm:rsltXXDrLg»mL¡f:pmsng´gkmy¤³iz¯ryvw\\?oZspoZ\\?vkpoZ*rshrsoLitryL\?g?«Lpo;Zvtrslikpql\L«:p|i[rEe\o:iwrsp|
rgjpsoZp|l?ryo:i£4\vk¤¶msvw[*rsoDl\~\?oDry|izes¥MWmry|\?fpryik\iwXZpg»Zvwms¡Z\[º«:Zvwmssvtry[ gj4\?lprs|pÉ?ryikpmso\?oDry¡Z\?g
L\oZ\?vkpqlgkmy¤³iz¯ryvw\lms[*4msoZ\?o:iwgiwm¡\alnDgjikmL[*p|É?\?*¯p|ikXRvw\?gk\6l©iBiwm&ikXD\lmLo:ik\{fi£po¯XZpqltX*ikXZ\?eryvw\
ngj\6O¥Ê´\6lryngj\gkmy¤³iz¯ryvw\lmL[14msoD\o:iwgBrsvk\~p|ofsmL±s\6¡fe*lms[*Zp\vkKL\oZ\?vwryik\?1lmhh\L«siwXZ\~lnDgziwms[*pÉ?r
iwp|mLo¿lmso:iw\{fiwgl?ryoH¡\¹Z\ik\?vk[*poZ\?H¡fe Z\DoZp|ikpmso¿ms¤iwXZ\¹ch lmL[*Zp|\v6¥ SDnZvjiwXZ\vw[*msvw\s«´gjpoDl\
lms[*4msoZ\?oLitg~rsvk\Z{h\6O«mLvgk|m¯e;\?smL|fpoZD«DikXZ\?p|v + Á1I ! !
l?ryoÆ¡4\^h\ik\vw[*p|oD\?ÆZvw\?lpgk\es¥
grºvw\?gknZ|i?«ikXZpqgZvwmsLvwrs[ikvtryogz¤¶mLvk[riwp|mLo¦l?ryoª¡4\R[rsh\¤¶nD|e²Dvk\6hpliwrs¡Z|\L«¯XDpltXªpqgoZmsiikXZ\
l?rsgk\~¤¶mLvryvw¡Zp|ikvtryvwe¯vkp|ijiw\oºZvwmssvtry[º«frsgp|±L\[1m:gziDvkmLsvtry[ mshiwp|[*pÉ?ryikpmsoDg?¥
+,-º%2 £ % ©.
]»mL[*Zp|qriwp|mLo;ms¤¬¤¶nZoDlikpmsoDrsOnZoZp|iwg´ZitgDryvkikpqlnZqryvwe1¯´\>¯p¸iwX~_u hp¸ipoDlvw\[*\o:itry|evw\DoD\?g»ikXZ\
gk\[rsoLiwpl?g~ms¤»qryoZLnDryL\[*\?ltXDrsoZpqgj[g?«O¯XZ\iwXZ\vmsvaoZmsi\{hZ|pqlp|ip|o²ikXZ\*gkmsnZvtl\1Zvwmssvtry[º¥Ë¦\1hm
rsvkpmsnDg»¤¶mLvk[gmy¤Mlmhh\\{fryoDgkp|mLoRiwvkpsL\vw\?R¡fe[1\ikXZmhoDrs[1\6gryoDpoDgzitryoDl\Ersvkpqry¡D|\6g¥
˦\£nDgk\»r¯ph\¨gkZvw\?rLarsoD&¯´\¸Kik\6gziw\?&~_uÆiwmfmsK«Egj4\?li2 -|L/¨«?iwmh\DoZ\£ikXZ\´lms[*Zpqrikpmso&ms¤
rsvkpmsnDg¤¶nDoDl©iwp|mLoDrynZoZp|iwgBoD\\?Z\?^¤¶msv»chu£B¥f¬p[*p¸itrikpmsogBhpqgklnDgkgk\?1po*ikXZ\¤¶ms|m¯poZ\{Zry[*Z\?g£ryvw\
oDmyi£po:ikvwp|oDgkpql´ikmikXD\~_u¢ryZDvkm:rsltX1¡Znhi´rsvk\vtriwXZ\v£gk4\?lp|liwm~gk\6l©i2&ikmfmL8¥MWXZ\6gj\p|[*p|iwryikpmsoDg
rsvk\¤¶nZvkikXZ\?v~hpqgklnDgwgj\6;po¹cf\?likpmso f¥