From be86219e04a1b0ffbb06edb1532aa529726896c3 Mon Sep 17 00:00:00 2001 From: "Achim D. Brucker" Date: Sat, 30 May 2015 16:12:48 +0200 Subject: [PATCH] Re-added examples for SecureBPMN designer (modelling and validation examples). --- .../examples/CaseStudyC/Get Civil.activiti | 739 +++++++++++ designer/examples/CaseStudyC/Get Civil.png | Bin 0 -> 26009 bytes .../CaseStudyC/Get Legal Info.activiti | 470 +++++++ .../examples/CaseStudyC/Get Legal Info.png | Bin 0 -> 15562 bytes .../examples/CaseStudyC/Get Lots.activiti | 223 ++++ designer/examples/CaseStudyC/Get Lots.png | Bin 0 -> 9184 bytes .../CaseStudyC/Get Solicitor.activiti | 739 +++++++++++ .../examples/CaseStudyC/Get Solicitor.png | Bin 0 -> 25562 bytes .../examples/CaseStudyC/PublishLot.activiti | 482 +++++++ designer/examples/CaseStudyC/PublishLot.png | Bin 0 -> 17740 bytes .../examples/CaseStudyC/RequestLot.activiti | 546 ++++++++ designer/examples/CaseStudyC/RequestLot.png | Bin 0 -> 24490 bytes .../examples/CaseStudyC/Select Lot.activiti | 541 ++++++++ designer/examples/CaseStudyC/Select Lot.png | Bin 0 -> 18193 bytes .../JobApplication/JobApplication.activiti | 950 ++++++++++++++ .../JobApplication/JobApplication.png | Bin 0 -> 85670 bytes .../generated/JobApplication.aslan | 101 ++ .../generated/JobApplication.res | 455 +++++++ .../generated/JobApplication.result | 77 ++ .../generated/JobApplication.sate | 727 +++++++++++ .../CreditWorthinessService.java | 59 + .../LoanOrigination/LoanOrigination.activiti | 1129 +++++++++++++++++ .../LoanOrigination/LoanOrigination.png | Bin 0 -> 67909 bytes .../generated/LoanOrigination.aslan | 105 ++ .../generated/LoanOrigination.res | 476 +++++++ .../generated/LoanOrigination.result | 80 ++ .../generated/LoanOrigination.sate | 757 +++++++++++ designer/examples/OrderPlacement/.access^ | 0 .../OrderPlacementProcess.activiti | 625 +++++++++ .../OrderPlacementProcess.bpmn20.xml | 121 ++ .../OrderPlacement/OrderPlacementProcess.png | Bin 0 -> 16036 bytes .../examples/TravelApproval/ResultSender.java | 27 + .../TravelApproval/TravelApproval.activiti | 609 +++++++++ .../TravelApproval/TravelApproval.png | Bin 0 -> 33651 bytes .../generated/TravelApproval.aslan | 74 ++ .../generated/TravelApproval.res | 266 ++++ .../generated/TravelApproval.result | 50 + .../generated/TravelApproval.sate | 427 +++++++ designer/examples/misc/ASLanSoDDemo.activiti | 197 +++ .../examples/misc/AdvancedSoDDemo.activiti | 771 +++++++++++ 40 files changed, 11823 insertions(+) create mode 100644 designer/examples/CaseStudyC/Get Civil.activiti create mode 100644 designer/examples/CaseStudyC/Get Civil.png create mode 100644 designer/examples/CaseStudyC/Get Legal Info.activiti create mode 100644 designer/examples/CaseStudyC/Get Legal Info.png create mode 100644 designer/examples/CaseStudyC/Get Lots.activiti create mode 100644 designer/examples/CaseStudyC/Get Lots.png create mode 100644 designer/examples/CaseStudyC/Get Solicitor.activiti create mode 100644 designer/examples/CaseStudyC/Get Solicitor.png create mode 100644 designer/examples/CaseStudyC/PublishLot.activiti create mode 100644 designer/examples/CaseStudyC/PublishLot.png create mode 100644 designer/examples/CaseStudyC/RequestLot.activiti create mode 100644 designer/examples/CaseStudyC/RequestLot.png create mode 100644 designer/examples/CaseStudyC/Select Lot.activiti create mode 100644 designer/examples/CaseStudyC/Select Lot.png create mode 100644 designer/examples/JobApplication/JobApplication.activiti create mode 100644 designer/examples/JobApplication/JobApplication.png create mode 100644 designer/examples/JobApplication/generated/JobApplication.aslan create mode 100644 designer/examples/JobApplication/generated/JobApplication.res create mode 100644 designer/examples/JobApplication/generated/JobApplication.result create mode 100644 designer/examples/JobApplication/generated/JobApplication.sate create mode 100644 designer/examples/LoanOrigination/CreditWorthinessService.java create mode 100644 designer/examples/LoanOrigination/LoanOrigination.activiti create mode 100644 designer/examples/LoanOrigination/LoanOrigination.png create mode 100644 designer/examples/LoanOrigination/generated/LoanOrigination.aslan create mode 100644 designer/examples/LoanOrigination/generated/LoanOrigination.res create mode 100644 designer/examples/LoanOrigination/generated/LoanOrigination.result create mode 100644 designer/examples/LoanOrigination/generated/LoanOrigination.sate create mode 100644 designer/examples/OrderPlacement/.access^ create mode 100644 designer/examples/OrderPlacement/OrderPlacementProcess.activiti create mode 100644 designer/examples/OrderPlacement/OrderPlacementProcess.bpmn20.xml create mode 100644 designer/examples/OrderPlacement/OrderPlacementProcess.png create mode 100644 designer/examples/TravelApproval/ResultSender.java create mode 100644 designer/examples/TravelApproval/TravelApproval.activiti create mode 100644 designer/examples/TravelApproval/TravelApproval.png create mode 100644 designer/examples/TravelApproval/generated/TravelApproval.aslan create mode 100644 designer/examples/TravelApproval/generated/TravelApproval.res create mode 100644 designer/examples/TravelApproval/generated/TravelApproval.result create mode 100644 designer/examples/TravelApproval/generated/TravelApproval.sate create mode 100644 designer/examples/misc/ASLanSoDDemo.activiti create mode 100644 designer/examples/misc/AdvancedSoDDemo.activiti diff --git a/designer/examples/CaseStudyC/Get Civil.activiti b/designer/examples/CaseStudyC/Get Civil.activiti new file mode 100644 index 0000000..e7d2acd --- /dev/null +++ b/designer/examples/CaseStudyC/Get Civil.activiti @@ -0,0 +1,739 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/Get Civil.png b/designer/examples/CaseStudyC/Get Civil.png new file mode 100644 index 0000000000000000000000000000000000000000..a10711b725054fd49c099b15a336952eea11bbf3 GIT binary patch literal 26009 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/Get Legal Info.png b/designer/examples/CaseStudyC/Get Legal Info.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfde91b64ca9fa55e1c1adfd2b6e579070215a9 GIT binary patch literal 15562 zcmeHuXH=8f{;o3~bu7TlID&}EC;}qQ5do<=XB1JY(jh=Znh+pJfDlUJ97P5Y5Tw^p zdP$Iy1V};@M5GG=LQ5jOClE>qA>_X3%sF%J|J)Dv!~JsCuvl3xdD-u8Kl@joXA^zL z%uwXWsU!RL?Gw3u>xRX?efwqi?fW|Yo3DZYnHYFO+qX|Q@%D{>ScPOS(~tU`=0?c- z7d`aG)%~blAW zBeUYPCv)|`Bn`zR4eB|cD*XCB)!RplqgEzeeWq2^*COV=ed&E;(TG$Z2i0x?!lT}i zmDCZnHQUKT>2Ezg+1>4mK&=UT5NREB?BDi1N^jsa?%%i1*NpM?zF&?1`uGcj|K#Hjh`y85$R5jc-=A z{Xn990B;1d#w5MP&BjJy6hW>N@#f~T4syZD6TdRl{M}Gv1pldsRMSs~J^dLi8M#R~ z$Gru7Esav2Ia4o@Z!$7}m{@rqCq=8Uhp)6emN(Do_a5yqbQbmWzjiH3OuCzR=S6bG zw2{W~LZ2*)YPa>w!3A}Wjls2tVWFXZqoIp!mh!b3BWDndhvShFXRrDH$PP$Ru)fVBo|NdNcjt&BAzxIn|acgaTEoiqB zO_?tODVw#Of{Do7-P~+5M{!=n5oS>PbZXqxdif(o$x4#sq7z|pB!rK>-zQU2Ndjsb~k7cN(6uN^24_WB*ubh-RSVC#IVWfAK{Z0fOfM#?J8Vs^yt6$99WLPnF5WbzTZysaDUVam%(E`J`gA3khd*=t4{w1wJ=mXeKATma2Ot zRd*{ifSc6@(cfAxDo261)Qf4GTMRwm3)pBneD34R%gJLATs_11(}$0zIRy`Q7{+Jo z26;C>HGcvTI~%@=qs2!?16auBWD+>a!zSyEcm;Q#Vd2DymFp>~xz5yAfM*!lU>$j# zYUbJ65xUUvvT&u_@d@&kxn|B<8Bbz)XyWz=HjnQq5pj?H(z5OC@wT^`FZR2(eVCtO zH*&4E1II%S;ayu3RKWO(A7wi{82-&7v$uaP@dN*yo$P`G!pTIKYp^b-Nr zAD)djiT4d`E;AcEX=HoiWcOPrwjNI)Xl6@FI0fGA)t|xHgzl1Ue8*{%#V_(<7vy`a z#J`E)A0>p(n+s{mhtL+gL$#KZZEfq>sIArFg~8>L)XDl$yK0kb=Mqk9osz>+cDH@n zq+q0`CZ)E`E&?mmqozVO~hP= z2i8^(4cJ0*_%9dVBz4_jL$fSY8Zw#&zc<9bzn;T?OM^Pp(mG+>bC)(YH~knSr1R}^ zykJ0ra#H*D!^WPArP;*%0dZ7>t1i;LV#jfOTJwcdf~bIK%@!7-SFs2s;Vfi(n@P^N z&}w#}GVfyL)~8&<#k~VUFfvKQJB**w%^5*_CnC(EK$s5@l~wKsgoz|{D;bRkw5tq|H$-A zE|_J_Q$gkUiVNfG5gS&Vniu1e&81O!`mYxvBpf+9!ui7EZRV{>Y44Nr<&*q3^|wCc z2Q3C$b!fr{7%wE8LtG-Z&kq{sw>Du2egf}wXM!KyP@j`{`Qc=orrfmHT&SSWST$l+ zhgpwcGseW64yArcSpna5$@(a}Pi1PrtRXg)kDAP zIV_Q-9bB<9gMp#evg)N9M3uhev+4U8VM7kvAFQSD9t{f7!c*y=F~t%oyqTiOv!tx#qijF5kU6SoXME?>=X{wREZsEN zwEg$B;FXr^Y!m{)LR%{VQ62wa%~xv{lNn}_gP!Tkh*fErqwLVkh5P}^aXG*G=~RdS z$9kD45NL$l07> zMR3^WlBB87wn|Y@y#Ul?8;K6V$Dn&a+rq_}D)hXsb%737yN|m(ot=tHR6Gi{XFFGa zutsz)?xtT`&c3ytDZZ>;!`9DkToaUFkmPr``zTP|J9qd*F!DV%j6)meJ?&2#0o8du- z-~76p92#<704X!Gujo(xlElP&dNOKwX6m0QN0fL<#;f`aIjntm)%3)nfL
  • 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/Get Lots.png b/designer/examples/CaseStudyC/Get Lots.png new file mode 100644 index 0000000000000000000000000000000000000000..e65e8e3ded8d67268334412ee67020dd43d90df6 GIT binary patch literal 9184 zcmeI2X;_n4vVfWCR%S${yHQaQ=x#?55Ym8vtm#%8Y!^`3WQ{FKK$ai`17sVAMh6g3 z*<_7~fDlNOEkYn^L7^c+1PozIB4CIKCV}h;S#I=RXYPIO@B8CEkAJ`C`_6Z&>QvQR zRVU|+pYN7UyEhpa7;O3F__1>a247ei82tI(U;eCrvi$8=JOhKhjlUfGDKNc?&)9Oi zSdN^&I`|~sGoUcGDr~p>XAbw!#lgg5m+F6PG#N{beiRW7efu>yZlhD(x7c6o;@x-M z92pP)Vqf`eA2cERZyPalXEU$ex*0r?bN+}=*O`AteUz>j4Gg{xG&T6~ zOWFp5uYOAVlfkjikN$sag65c&mBnB%%+1aDe12kLV!(bZlr_2c2eej=!{M%9zaCt; z@1NW?HaC3@X7+&zKxFZ`WH!j;Q^**)~k|8)W>! a-Mkky;9AMST>m;MmvmT9xU?H=w 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 literal 0 HcmV?d00001 diff --git a/designer/examples/CaseStudyC/Get Solicitor.activiti b/designer/examples/CaseStudyC/Get Solicitor.activiti new file mode 100644 index 0000000..05ce04f --- /dev/null +++ b/designer/examples/CaseStudyC/Get Solicitor.activiti @@ -0,0 +1,739 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/Get Solicitor.png b/designer/examples/CaseStudyC/Get Solicitor.png new file mode 100644 index 0000000000000000000000000000000000000000..dd7eda5864153c1e643f926f3e21a768f56a9e90 GIT binary patch literal 25562 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 f__%@Sfp-mk2{?=&M(#I!68js{W + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/PublishLot.png b/designer/examples/CaseStudyC/PublishLot.png new file mode 100644 index 0000000000000000000000000000000000000000..501c3c33d10c0d56d50e6d6432b39ce57bff6847 GIT binary patch literal 17740 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 z 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 literal 0 HcmV?d00001 diff --git a/designer/examples/CaseStudyC/RequestLot.activiti b/designer/examples/CaseStudyC/RequestLot.activiti new file mode 100644 index 0000000..f3da29c --- /dev/null +++ b/designer/examples/CaseStudyC/RequestLot.activiti @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/RequestLot.png b/designer/examples/CaseStudyC/RequestLot.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f58d2075f0d20c0f1e04e92d523cb45aaa3d41 GIT binary patch literal 24490 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 xAm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/CaseStudyC/Select Lot.png b/designer/examples/CaseStudyC/Select Lot.png new file mode 100644 index 0000000000000000000000000000000000000000..65762a3f38d6d07d1c5b145b0a0179e6490159a5 GIT binary patch literal 18193 zcmeIac{tQ>`|z(-C6tn~q*5tDlD*6)vJ|qL7(*qy8T)Q1CD~IUge1Em+hB%~WGP#g zF&Min%^3Sw#xl=EeU|(Fe!tIeIiA0sJXWUNu~SN%^UijZ>jz4j=W-c##B$y%To~ZFEdsQ~9<3Vb% zQVz$>tGnJB*grlfrDHz|IbQSltiYv&eXuJN#)YkPT-AiTRt{mn-)08qftw*-OO-`W zFD)g_D6}q=zjB3s*ulhfYB{7&0Z7MWcFGO>Q|&*0|3?FVYG5o&?QDBzr#=h@Gcr1{ zZ+FQ0?d$G@U6PWL;o;%Kj@{J4eJS+4`G(1K?h0eGQ+srw3bqJ@!9rC0>tz4U)qVs5 z-rp~fn!0IEF334)jYOIjJP0Hok(9^5-@Z+y59BG(Xzr-Tooet^8FqJEpk)Pj6RUF$*Sazpn<(E=e9tLzqt9E`cF*L-W>Wc(YYlt%|4H{YUURhHx)vb-u}+&iqIK;sLyu^8gVyoD)dz?FV_XgHb($l1_s++9 z89plYqHR}fo+u@YnRvo39CgOIvVAld?8D!$c{V<7={B5)o9-KwRf2YHe?yo0G%ChqK1i68sZ~{mozwV>uYF1xOc> zh=a>9cW38g4zjYw(GU&}P_sdA3i_3x&qPyPM{jR79${yvXV#i1pP{T5yH@g!e(^H4 z5^i=%_(NWWww_+cdOJfy^V_n)#+?p@6GS=HlI5V1)SBMv>VjvnrvB8$)eV7O2Z7$r z=a}X97)s$%QDwa$dNZA(_d%GNsKjSsVS$Wo*?}SFh-7Fb8wyY7!EtMAYlOfw_1Glp z4F3r}c)^G`5Nsxkg=;S%aC#cqoS&8RD7$rX$sJ|Yw32K%klEw_6qiz5ytpz~lWMM{ zqQ^phm(HqbJyBomA`ovJ#PDmzz8CW?U&qIHq#DnB?D8?91Y5(+d-MHV^!*jD{iuR*}=% z_+-o2aWEOx?(D&?E(~hTeUvMdOU%^PemxC4`)L<@ruci&^+{C--gmVSd+6ZaQUqz~ zGmBW6>7MLl?o<+qmbgQ}na_9Pd&A@#I=ONv`hkUmz5U`UtgzhOIOk<1cczs@woo=l zbF&x~>C$E#>S1=XSMV`?`nH8DMcJH^it}|Nn8N;D@GxW3$i|e zu1r>GCARHH+)U0N^qa_}V(_*DZ(>Jt9JI|pRQdk_@BVoIiBq#?f>f3R4vWQVz5TfU zGjc8Pw=E6Y8wtd=RUED8%(b`%(Lm?sYFxL`A8w+Kx;ZP`>22Y>msBNd(8 za8uKyO~}nlJ0Cx~ZG+@5yZW=kyD>&YND*l0I%1$OF^a4Kuk8aj*8 zrpj-?Q#0I6=*l%3_2&F-Skf+E&p=a{#Y#jIW-eNzBq_MTjU-y>-E1@*mzSOW&AmB3 zK3>tcQ{udban9$?t}bwyt)feFsS~Z&Qt#Z>+Pr-?8CGMdH)tCFy+!$b>$6tVu3omM zc+6}|{`w}3*s@k>wqBnvYS%mT(cMYLyQY$l*}jx!uuxZFpYyIj=X$-20yr@|~BbTVVxJZ>-jsJ8eyM zbswPGC=F2pNXXICiWwy#CfS!YH8mw7Ovc4{34RsJ7vbb$9-g&6`#RUu^znt%-U$J+ z?A#=&-uu{q6LBP;L5RCgEqd;L{ypnKJ6p>E9OKb%`$BMD^P2zRys-x@F$`R&mB%%! zYka4H%+tpaCoAeLr)>G zw}jF}I>yE2;p$qp@#yTn#IBN(lA=hH@mpB|vGslg>jaoE*Wku9b0TwOpj^b$CB6ex z`Smu^jC)l9V`GqaZKYX>ztU~81{DOElA*U1w7hCvCq<++#$Xj7SHxPMq3QJze4)s; z;?~bx@&jHT);E0+T0!FCi84+P9w?GZ9R^zx<(ZjN{X1zRp<>v-uCAu=LW9BG>PAoT z+Ay#&hotI&&GiLF+I-AvNUWfLtc8G+G1!2GRMp)u2XKM2GB$UrimD{Xwi=O2t2Ub7 zAH23WTZ7@DXM35OVhqd>Mn#t4I%bktSq*6%cUMLlR#PS=!fTf|EsTtM(4_;}e)N^m z$Q+TsHKx}n<;uGdKN;Q=^76#Td_z~YD8;hkS z$)OrWcC@Z1i33Nl+);=)`6jlcjGREKudi=xY-Ef(B-0nZ<>#=#N|BX6$N$KreBs}i z3wZo^$AazOdwdlfX(9x>bXPlmN-Vi$iT#pEnd4dn-=4!2o!^j8Kak0`s$H%N4i&d= z-@aBx*U~F|V`31(i(Wk-gp|Y6@}OoY!kb_@Il0ethQzU- z{HW_7IGZ-pgnkES2gUsYv2)BCrF|UF*-ce`T-ocn$()~_etuM&AV9wE)*H2F$KM-cJUx*ALE>kbEMMoZ{#sigAZ>{Rvkx~DkwE#I2SAI-~XBVjHW#|*$bO3 zRM}D<*)wd^cmC^)Oj&x4Dq_lgpu!6Y`NI2c*aqFgLGX|bF;RgPTSrN667`c~A*mLm z10JTBzaE7c5s0N3yj>aMchsTe8Ubp>Q4StX-hOyS5rbI!)DBy) zFh4(U0?{Z1(&y#nwftB>TXkTuI6_BY-}T+h%4ed)e1}=;R$U1O(2bwTn_0BDrwU?> zh!{j;j+gA7>=`Oq&&+`cRfj$h8D(D&W;Z>dBKmbGnqHk9-M^wE+T~G_&Lhvh`+&Jc z@?+klE?Mu^eRjCZG9T`AfahEF_?0kf#r)>x>iMNNl?_qy3Y!;2NHNd_XIuS25+MUW zke44*_{9h{q*XW+E#-V`Z~jsCF5lMYyy%(n#PP))*b71I8qv*jkP`K~rxzF(54?6- zA05rG>A{@Io*6aN-?#k?hbX@nLe3VOgLH@DnezE>!U*~Dkq}|`DNoUw>&N|#M{iGL z%1iDt8s{&6V<54djB^~x<5l?B-rl|(!Ox`zFZbEkf?evhYj!DB$!HnUzVM+oi8cAX z1t}As3^O(O^Emlsop0{RFWT5;!EQ)v1aiR-V2*O32^Vn@#Nmka^^( z_h(-Qn`H6lu5!bGc42|B7tBuNEYEj%-~D8M2uhKf`;B{DXiX9ULljo zf1J`bGjmu&S15=jf3P6U+nU~aO!mRiJBcJ3p*_0$g`DTPFcYYWlk#}AFsZ?U@~LS} zg7(Bf80VA;@gF}?Ph145kajmUG>jQ;JN6bFB`Ygy3*HIgtCxkW4XJltKJ=CV6xQAS zW>!=CN_?z55qej3;+xsHXV==;w-8$5Qn-WEBy+))H$8Vc#Ra=>o%hi91m|3Y_S;N8 zDVyh(1ce0A5>0zFf|B$!D{@zj%tS1LHNOTx3riI@dKjemSyTmw-$QLozViv6B0oyQ zlm0@B&;qNH6*+vmLvKY-w-*9|7*~be1$(9Q!2lOWpTul?7ED zP6~GzMWf$QOR1KR6~5o0B;)@4emCWsq$~%KWf_GOOWzuS>fof7XY!Yb($iy6(VPXz z=dW3&YF4GtBJAs5z_4j_LXUBZfVOZZELrd%`2p0}->G^&} zdv@*^l}Si2b9U5}9?Vt$`YICgEwB$<=#6uuT7GoBl7(MRcvD7`VhqzMz(_1nUD`4# z;2lzA7HWN4Pe=EAKm895ao9UJ1?u^7LiWV@<=k;6QhzOP-8 z+C*^kczem`#8~u|>@DjsBJ>6uUf4Pg+HFno1NZrma~t+Cx`?bYbK9o#Jl1oZvD}|e zW;!Td1lGd7F8(A|AWB{RWhw71IE_ZDOA$3G`(7Q3!_N&psYBY?+FH8b+jF`!!|g1G zPKpfIOmCVH2%L}cc>M1`5|yr*>?_PY@EmzHIpq$rQ?R*P^Fge+%lqE>X9`?`WrWTa zDD@2%*Nsl+e^MYWS2?ZbEEb&SfH^8126^U+em7yEr$T6DbO_`a%eNg!qZgrPitmt8 zm=k~UjIMc&+_b9UYx}&1zb*7+au6r<|ls6ink#q#-e&q z8D6PDgT}1ZJ-xUY#KOTQ8pH-GJdxoB>dkhGM$Z&sNtEgIoer#@w$9v>mPrfqaf0+- zJKBCE*_M7yX2W@%brdP-#znsc*)R-_s4fgD^SR~O^h$)viU#JQbpT~5^-zCf9dg}L zo6=LFn6+t7k+1CFSbXRU(Haoyc2r#?-9sqXuwB;`%(5&Dnef}^^A3OU3v+(w%*5uv z+~^%;Q4!I5vTv|gH@J-I6bvHXZot%B-8>S+ksww{C}anmax(TGt!7T#pyta-hI2{n zVKaTEAm))~1J{D;U+cFq70qU?6YU%Lo+gEn)X%iZ6P6RK%fp~7qVVT7zd4nX?aL~y z3GSm2of^h%-=(P2Bazj8R*RI{1wj9}3d3ww$Po{B#z)YhBNThkn{DhBIqLcvC$;rvb z2S;KTo_KnP0wPxcaSDRDl^8MTIa>`iW&OsBId0X}Uv|ty5^-$F6y&IHQ^`J?ix*y# zaR!5m4uQIZ8V_kvH})JZKPYrI?y-qQy8WQE8;CJz{-XZx--niVy*vf#t`0S2V?raS zW@h*xdG8aJ&%~y;HXb>`FFVj#h!vV#M=oT5q`O6jcHQ6m=xthmwnIv(VwS_RE9(vK zc7~Wdi-|c#A(>_xDD+gZbeoPCW9^Ni0=3S>o{s~j1q~+`!$1{|srmu@>*A~A&CV6c zv>!V{+a|`?ZF;0YCHZH%;4t0}VnnsFsM3X_S0EguCR5v#NJh~aPK@7XlLUwdUBWrv z$Aio+#edMEsGWTuQgH7^)@_{=_}2O*KKV{sGRR@cAC4**i_B!?%)csKCz@geyO zS^BP_1)|i{)kB4J*RAxkM1-6HA@o`?-;vw7@JKzDO-rLft8uHMN&hqLv--qcaqURC zhOGtEuGF}v@!L0hVV_fnGPAOJFo=Xf)4{^|DI56R&hnMH`g~0d-V6)EKes7izB@l} z8X2i9`eAIW1N%rH3Z1d0y`w7 zxiI~S7v*^dHbsOu-v3yAfa)agr@{d}tV-}Rfx)N%9xBl);V3eNN^d!y)fjZa3;+D) zndoQ_H`n!ybiTASBnpK{ODla=c-V?CcuY%>5_al$ZD*$`95~OHEbMY=&X3rPu`7%%Ri9GSbo>FD?0d;Iw6L{3Qd^ zwhRNoH_y;$Za@qvDdZ%Dlx7oTJv^I~p6(Co#q6vs{n&m{9X6dm^Z%YR+rsEksZ=*N z_SdgXVuv$?JxLW_#LljPjC9M=#xqaJFt2=&qkZ$CHJcpHYV^M#%fuvlYU_KN~zExVj zKm4fG+(<1bqmlgFXJ25Mm=19S-yCmAv#{I@n@{L zj5mqv5litjG@b5U%6>p`>sim^A^!No{mdz4iJsuu|%-#}{bhVC z393clON51m2@PTX{#?o0k#O1{027&;3owjW9qzgE^l|quRz2<^aDK@1?F3l5?n(U7 zr2lO@pbXA?&+vHvbOe$<*uTk~C0vy$$m{0j2ApAKhPSGUs&$t;hLIc3r$4bsqm{!i zoU#i;dZ&o7AE0Gd!pLz8y7Bp%gF~`FEb;fp6a~A=$)?7xvGD_H*@yAbYk|FAl>5bD zl~P!zW%IdhDY94DHS6rRa$|YJ6 zUW&c3X}%=_V#5JB`0>6HsDrVNM7RgFuZK?BSes}~&c~xx$6^h3@|-v!o;U98aMYVo z^Q<$Pi<^gsuz+qW2(^TnY!FXuF6Yw>@wN%l3<3TVq3iXN?jEirx*6gGH}@5vvP$4@ zP!x3OousKm39CDHb~$tm8m)=C?lJxLm?nIBS>?tu#D0sur>Cc{rZL1@S8D&i_X3nU zqnBDzA_@zyl&Viy)G>VLR1}K7{3(enie7xc0OwAfo|%Di#fZYaF;)H#U0p%>)md6u znIUR&T%QYz!%0@9i&_%f-f{JXko;@;x^@Jwt$_?66dqsIjdLmC-=e4fj^ITFOEC|T~X z=HN^GuClmFr+P&60=QmR@q(qR!QyHF(f%^FpRa#z!$I3l+n@0W`|*Cw-qH93DTMBz zJGgzxGWSvaWiMr-^ztjPky=U-c-R_+`Bo%+K8-yuf7_IhgUS1~hK00gm z+B}5fsNv!EJuD$1d6$HQ{8pkkyLe7sbM4-O>EnCqYgI)9h?m5FtqPHG{kq=v@|=2I zz4ei!ds?p0N1=21St9yq}Gc$nIycJ={YB7{cBo$*`t`Q7fYwoGkb^cVs-yXB+k{E!5{=elI^qqm++^~#_^H|>h0V2jQqx;IJjuH3&ik>y3mWcKeIrYNtJ<#amp$-v^FZ@WQA3}q7ltP*?f)yu zA7u}P|FVL8ZgwD#KA>UgnVpw+C$ZGN$Bx?THjW4l4V9OZd&mY0^ENRzPflo-=_hph z`suIv-n=e&618@>^|So6@j9(aP9hg|tgYo{@#FiN%}qYb{J#ad7A{h&PfoiYNB4={VIQV`qkV~d*HIyO|aUB`IyiE$A-pUqWIR5SBT>}U_2fbIwZMk%lDU}8IgSQ$NJyfBnOJQS1e3_f4ooG^%TtWQAU;vvgN;pvkx8lLGIOouKTyfIFVKbtodU}rwn#sly-|&CDHF{JR#U2) z^lb{y)$;EYURG7Ei3(^}dO92JvEGtQtW3SJzB{Tx|$HFDr zhc{=g78d@k$Y$#3=;+wknEyhl)`r&@kr0T6l@7SNoa%HNiQM$8{`BdQmn3m54jCt#?YJ zy{*CJrM`iIq;0&$r2v>Y(8nnSXCpI61iR@Rz}W=504Qi-{FzLEFZXtLTWfr`m2;PJ z&cfIlOeH@eQz%CUeDw76w6wIQPbL;EdZk3hAk?MAjvCU=rLBD8U*La=uBLn+uGud@ z6wco}y8Hq(m+#yB&S-iz>o1Lcgn_$_XlmP{+AA0w)y;eYXuM0_;1z!EhVeI6=|1fX z3-SvA0t; zuOmsA=5^9hx0DYbK4=eU7$kG~sWxJaCIUaB@nHucvw{kq7RSqVcZ(&*K5L^+Po^`h z1{sdpY&ZhI)p3YhFZLX@6l2Q{klQkJNPO?*m3o|YfjE36W_;UXR$T^n3IQRR{`FJLRvXJvu zGqxs*rm~hKoL|w7c_o}z_Mkpu;!58WZ2s*;9(L)fZNIa~u%|;j=03H8eWs#1 z)>rPrGS*C?d8Ne0Ac|U80%52Val7-6MhVvpS%jOM|935xfab*U)7vOokLXh$$s=ES z{ilwS6R5+b2Yrir^YFcvjEb~Y7C~@9NEI&_gi^kbvlTJ_0T|;~ezsc=&$$ z%bW}9$67QVGmqcurPu2b)0-2*6Nz12b%Soe8qLkk)z#IvY|>d$YW_mV(H~*yNFHIm!jn=M zikZvCb2Yf^%NitWpkkfP2TLl;6Q!1P(Gut5@=$@x9_%;56vTW-94RJHo#JaUZmWQ4 zpM~b!CB_Z2A&5;sFmW@GHABaR0H;sm_hDk)JB_9Rx_cPaxDr|W(BYl!TEn~IsK!!D z1*`$txaZA18LR%V&auh9murt_IvpFnPQ_;i0Sx+9$fWSWxyfS`1P}ClLguLZOA51r zW074-1EO^A&K>3vNTlD_>IMtEQS3-K`|02omLu2MN<~qg^$zR`92A^Ect@Tk3Aug& z^D}DbOHy}{I7Q(|zcPTJbqFEur7#$BY<<_;$%|!Pr|*-6IQ(hC3ZCe@b9X;CSQM`e zfilHHA^MDSn$$uY`q>BBB?-P23+=y?^JaB!0BoOkE^b=9-efg;-Z{_B4La;;F`I|yq8tPc%WTX`~%rdolDxu`nbd90E5jN~kzCR{eoe=04Qp;NdjZ3$JkInR$j?G%(TgWhT*4C7CB7;x@MQTa^Q7 z&>b2-GTBoVcoXVTdScWt-!zf(WGjI6%OdC%vvkjohWx`Z{B9fX-j6URe#KbfY76;M z^O~-F6UNoeESN`QNOC*J9>AH+wj9*WJo{!}S1tbNf*sLw+N|743N(ZScX>V~OWk`& zJ|63Qg`wfI(!pd$SXy_cPzhBIvf2 zp-*8CJmkC?6PViHgHH?Fhlqr)4b%fZP`hT!@Y3a{{IckDHPIh@?q zU;s_(s~Y;`an)_?;buXx)P~py>3o&u!0>)-tv6|sH8nP43wJA{ZEx7MZe96z2axU} zM>+a?J37oam7m{Mmsq=7H=vi%++bj00^+UcHgrzunCt3s#EsQb`wOVm76qDZ`zu|X zJ?jzDen&~gmyY*yBpwb46DH+fc2ioo1Kk^*Q;UoaWp1b#dT#%OD@s^cg1>+KMVM}= zN8i#zB{yenEw(z6u+aH>^L4~%dT6&~bKLz0rAgRJ&|@c7BGN@C1d~@RH<4}a`{(#h zN{7btppVe>Cn&g*W8OmG;D;~c#-D4KX1{ot6d@#Gv4+p`S*}EEKG3nTwtgXNFaBU5 zpdM5RdWH0cQ)hl>WLr2Q2%r~Caq(Tos_*dUz^|Lu#3c@5yG56v@5wNecm**H4d0uM z7;!O~3pJ4k&p2Cz{&L>^RR8Yh?sk7NUQo7#GCb}774jAU$h+t@thANRR2$hqt~_t} zmEHa#8!A{>&G0OpMgeJkD96@-VjYxa>-4WxMQc^}9xk{19nrT|E$cuF zLE^RuZ9D~3117R}04bi`Awt@!{Pu4zV*Yo=Q`d|Pzj+3D5h1_m=;)r8hJRt$AhW?j zAyHAh>(ALQU)G9qxfc{8?t+7{i}{_{0Nt?m$8+g_TVEL^ot)Afs);Am=w9O^QyT6XX(m=Oc zFn@T~v@~=a^+8niS9-FwBjNPUYoMR{?c1@ZiX!puPh)bkZr#v)N2Ru6;i6!YS~l=6 zD|qupcR^iMH7K4NWACNd!PYSXQ*Q(;c^8$+n08ND59k~_^|z?^Za2$EseQoX^9tu% z>grfgDBM-*Aranzj?P7`k`e<+$!KyR>D>Hb-PoePk3og}4fYR8J8|CYFG{<&v~fgU z`9mJ>Jy+P*NC4PEdJK;13AGQwVe7fi0pDx6e_L5-ZFvStL2j|dKZe)<1C)7wku$5$ zccIy~e*;&wCSS_Fdm2myKYH>;H>$I0lTyW9wNf?wjA!Mtg8!M{Kff!(D=I1~rAq{< zJ!&G+1B3B#_h(q4_hZ?AprOKzX8`pVK*`u&bpKfSmsXcKcwq`19 zZ_?)DH2nmDd0Q0LE;uBW&NOr?UH?NhmSUyPzb*UKyB-^1F~M7OtE#$i`j1(@#s{!YRTa{G#%HGM=z(&SHIsJtUG1p7S&a^U8x%9HTB8b2r>#y$&|ap%@I9P1FR<(9If9!K z<%!(oNE{XO^5siMnW?3e9e><6zoE zRW}yWoD3O!ZUUw;S$6M?Qu{&`*!d`+J|N_(8hmqcJi)=#jbM;X-=@*P>;kqI^ra;E zOpEKrl9+cgovhyeES^9lW@NYWs4zX!1LCTjI^?)^Xox$Tor&#?+rP}IXBpyGmbK>h z)4C1VJ3BkK30@*gCcZkEz&v#SH?|pq04{8q( z1Z`<%zQg3f35lm#;Y|RIXfLpdTug?Xpf4mu;-$mKT*NiZ8 zmHNsF?V|7Fe^*{Emyeg%&hsaYcqe%f@_s|=JvGwWN6Z!{Y6l_t*b~SOSp05m`+#hx zj-lcBuc7Z=XZoTIXSO@Fw|{UjU-S|jyJ+vvXqcP~;f&03@bS@tmtD>jb@lMD^V5VU zWhpS3{TpZ&$$Szobu}fCzoRAG+Lmu~O_CCVpB?oVmU9^oqq}>0-h~eoSw%W&5?OB0cAQcI zO@Yh*m?O6%|3A)=mwZg8%FX5_VfSwIgj}0D5rrZD_m~*8SjnFw{T4^TTyzdg^*u+x ziNz{r11JXD_K=RQcqf>_0%nTY!fkfN7Dvr>bABG4t+L;!WoLNV&1AHdKIh%y!dI7; z}G$Q!+2HG7}}08E)I#Fzfg;V2`pg z^cW{6WWC`4g_ZrJoISv<@zP!WD`a*y_!a+RFyuQocb9I+6(eSbRInY*$C>2sBrrcZ zD2^E0gQ8w@kQ$W^1LA6lSzC$PF-Io9f%tDmyX0+-l$d3~6-3j3A=aK#k1_G+cMD?UbFMr9;?k8b#nD{$6y(?l7&U*l zFjSyjAN3utlmZ5tz1RAurI)H03FiD&UX!V%Y^buC*&seuh+LP~e4Ib2z_mx0NQ89t z_k1*9bQhSniNr4%tvslgpJ5BP&Zqvo?3e60@+CNUKj=-MfR*#|hHdH)L&fluVBQ^E z=jS%UVw03Dnfxl>&*2LlLdeXgExjF|Js)*aclCJ$z7FeH(S!;t@51iJ73M35-|^(FkA zO<484k5yG>q3NQ3TjOc$bi~#)@xWaV1VOqqGBPqYHkQ#ms6d;DHiL3ukp12r&5yN- z!4UfBo?W|kjT8Q9b^X`X8!_7lKG>J1OU%i~+g5xdw6z`XVk8%+F(xTdQHOtxAMg6( z*&ED!0Dd|t1c7Trp>I3Z?QN>UQ||AsEd z@l1RXu=a{t@Y}l{d`2EM!yo6w1ApPa>QJ)0F0dy5UmEe>f_KDz1PKFJD^HaAR?}Eq z;j$n@XQKzo&valXFm7OUzt~*C^fSejd_P)Fmvp3vm>A%JNT{TqzP}V$ZRampmamGC z(&=c>xqBr&*9xnf!wtL&><$6#;sdO|?uj0Ndi;I0eGnLZ)uCGp5Dfl>UpSSGcO?-MceW2)GxhU zztxE8>4I|>b>*A+gZwWxIyx&~HGJU>{!0W|Q6Qa-Qq^(L|=e$88I zjOL`sqhWGHXg8)Q_gt@*qlJ!gO~Tg*cZNrU%eLLez549>dymbi)B7yTI2#(uEn-=!YsQu zroG0n&qAK6KKPJlG-&f}JlswC30W{Z&}-*SvB9?QaYkPYh4S<~hC5G8){=M4asmf? z2<{>1ty?lAplsV;Xum%Xo0?)bulmd&eDsLVgZv<){Jyk&uQ~a**l4##0ajLz+=D8m zu2OyCR5_=${dv0OLf(?2bd}Kl?2+v`NyDpC;{Hb~?Wa}Y&-<$dsvoLG7Xq`?G}~B- z`ItV(XKgBiH_veMtIG%<%Y7bAC^IgMS1DC(-R&|Fj6|9YN7>6)^MD*j_?P`a?zAmd zv?mRz!tI2Gy4=aJw1Za>>g#SV2W&^mqm_l~PH@?;>A*S z<=11W=XNfC`%755_@jFoECksr^HaA z2iZ*hid0BdrH21L`*-;`_(fR4CUFt*Y7j~EXYZCApt&lyQCZ;y!e203bAy$L&mtI@ zvWK;OT%U{Un0w|`iA)FOS<)PQM8F}+!AtBvSj*NPjeA!3Ma*3;;LYs{*^N2 z*UK(pE^$el(5CtTuf^MXV{yw?)@pu}%Gyl+WCB72b=2Es)48dVBX!Jz6z zymU7EC+L)0un&K>!2qZAL=;5D!LV{{1)q zEvEppWWT=J8O?>U@6k15lu?9@?w3q(OM}X#9K4sQ{VNoJ#9k3_d7Gc;*fY$6#pcBa zVVcd?x8`}ko0Iy3ty^jVB}jpSE$!)&sK~3OK}|>=8tsm=j!4}@AgL8QKyeYP#g`V;VCt73|_QBQz&rgBHb_m`3-li82j|C$kV zq3u}N4d!TEU0pNNJQ`yJuTn3I;7f|vi;J&*AK0Av*OEn$Be;`DG%y_K=`KsjcZf~r zdmmWi6Cb~s1v2{dbX~YR?xyU`?ZB3#O8)luKp6Dt`}bZ8d0FU6Es;uOtnxlW={$_K z!}B;O` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/JobApplication/JobApplication.png b/designer/examples/JobApplication/JobApplication.png new file mode 100644 index 0000000000000000000000000000000000000000..aa9bb98576d9c1cbffa6373af187e853bf6e1dd1 GIT binary patch literal 85670 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 literal 0 HcmV?d00001 diff --git a/designer/examples/JobApplication/generated/JobApplication.aslan b/designer/examples/JobApplication/generated/JobApplication.aslan new file mode 100644 index 0000000..ba4d307 --- /dev/null +++ b/designer/examples/JobApplication/generated/JobApplication.aslan @@ -0,0 +1,101 @@ +section signature: + + user_to_role : user * role -> fact + poto : userORrole * taskName -> fact + task_to_data : taskName * set * set -> fact + aknows : entity * data -> fact + mc_pair : data * data -> data + contains : set * data -> fact + task : taskName * nat -> taskInstance + canExecute : user * role * humanTaskName -> fact + granted : user * role * taskInstance -> fact + executed : user * taskInstance -> fact + ready : taskInstance -> fact + done : taskInstance -> fact + entity > organization + entity > user + data > object + data > set + userORrole > user + userORrole > role + taskName > automatedTaskName + taskName > humanTaskName + +section types: + + parallelgateway1_to_usertask7,parallelgateway1_to_servicetask3,parallelgateway2_to_servicetask4,start_event_startevent2: fact + HT,usertask1,usertask2,usertask3,usertask4,usertask5,usertask6,usertask7,usertask8,usertask9: humanTaskName + IN,OUT,in_usertask1,out_usertask1,in_servicetask1,out_servicetask1,in_usertask2,out_usertask2,in_servicetask2,out_servicetask2,in_usertask3,out_usertask3,in_usertask4,out_usertask4,in_usertask5,out_usertask5,in_usertask6,out_usertask6,in_usertask7,out_usertask7,in_servicetask3,out_servicetask3,in_servicetask4,out_servicetask4,in_usertask8,out_usertask8,in_usertask9,out_usertask9,in_servicetask5,out_servicetask5: set + manager,supervisor,clerk,R: role + N,N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34: nat + AT,servicetask1,servicetask2,servicetask3,servicetask4,servicetask5: automatedTaskName + user1_manager,user2_manager,user1_supervisor,user2_supervisor,user1_clerk,user2_clerk,A,U0,U1: user + +section inits: + + initial_state init_1 := + + user_to_role(user1_manager,manager). + user_to_role(user2_manager,manager). + user_to_role(user1_supervisor,supervisor). + user_to_role(user2_supervisor,supervisor). + user_to_role(user1_clerk,clerk). + user_to_role(user2_clerk,clerk). + task_to_data(usertask1,in_usertask1,out_usertask1). + task_to_data(servicetask1,in_servicetask1,out_servicetask1). + task_to_data(usertask2,in_usertask2,out_usertask2). + task_to_data(servicetask2,in_servicetask2,out_servicetask2). + task_to_data(usertask3,in_usertask3,out_usertask3). + task_to_data(usertask4,in_usertask4,out_usertask4). + task_to_data(usertask5,in_usertask5,out_usertask5). + task_to_data(usertask6,in_usertask6,out_usertask6). + task_to_data(usertask7,in_usertask7,out_usertask7). + task_to_data(servicetask3,in_servicetask3,out_servicetask3). + task_to_data(servicetask4,in_servicetask4,out_servicetask4). + task_to_data(usertask8,in_usertask8,out_usertask8). + task_to_data(usertask9,in_usertask9,out_usertask9). + task_to_data(servicetask5,in_servicetask5,out_servicetask5). + start_event_startevent2 + +section hornClauses: + + hc rbac_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(R,HT) + hc direct_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(A,HT) + hc poto_usertask1:= poto(clerk,usertask1) + hc poto_usertask2:= poto(clerk,usertask2) + hc poto_usertask3:= poto(manager,usertask3) + hc poto_usertask4:= poto(manager,usertask4) + hc poto_usertask5:= poto(clerk,usertask5) + hc poto_usertask6:= poto(manager,usertask6) + hc poto_usertask7:= poto(clerk,usertask7) + hc poto_usertask8:= poto(supervisor,usertask8) + hc poto_usertask9:= poto(supervisor,usertask9) + +section rules: + + step authorizeTaskExecution(A,R,HT,N) := canExecute(A,R,HT). ready(task(HT,N)) => granted(A,R,task(HT,N)) + step h_taskExecution(A,R,HT,N,IN,OUT) := granted(A,R,task(HT,N)). task_to_data(HT,IN,OUT) => executed(A,task(HT,N)). done(task(HT,N)). task_to_data(HT,IN,OUT). aknows(A,IN). aknows(A,OUT) + step atask_execution(AT,N,IN,OUT) := ready(task(AT,N)). task_to_data(AT,IN,OUT) => done(task(AT,N)). task_to_data(AT,IN,OUT) + step w_usertask1(N0) := start_event_startevent2=[exists N0] => ready(task(usertask1,N0)) + step w_servicetask1(N2,N1) := done(task(usertask1,N2))=[exists N1] => ready(task(servicetask1,N1)) + step w_usertask2(N4,N3) := done(task(servicetask1,N4))=[exists N3] => ready(task(usertask2,N3)) + step w_servicetask2(N6,N5) := done(task(usertask2,N6))=[exists N5] => ready(task(servicetask2,N5)) + step w_usertask3(N8,N7) := done(task(servicetask2,N8))=[exists N7] => ready(task(usertask3,N7)) + step w_usertask4(N10,N9) := done(task(usertask3,N10))=[exists N9] => ready(task(usertask4,N9)) + step w_usertask5(N12,N11) := done(task(usertask4,N12))=[exists N11] => ready(task(usertask5,N11)) + step w_usertask6(N14,N13) := done(task(usertask5,N14))=[exists N13] => ready(task(usertask6,N13)) + step w_parallelgateway1(N15) := done(task(usertask6,N15)) => parallelgateway1_to_usertask7. parallelgateway1_to_servicetask3 + step w_usertask7(N16) := parallelgateway1_to_usertask7=[exists N16] => ready(task(usertask7,N16)) + step w_servicetask3(N17) := parallelgateway1_to_servicetask3=[exists N17] => ready(task(servicetask3,N17)) + step w_parallelgateway2(N18,N19) := done(task(usertask7,N18)). done(task(servicetask3,N19)) => parallelgateway2_to_servicetask4 + step w_servicetask4(N20) := parallelgateway2_to_servicetask4=[exists N20] => ready(task(servicetask4,N20)) + step w_usertask8(N22,N21) := done(task(servicetask4,N22))=[exists N21] => ready(task(usertask8,N21)) + step w_usertask9(N24,N23) := done(task(usertask8,N24))=[exists N23] => ready(task(usertask9,N23)) + step w_servicetask5(N26,N25) := done(task(usertask9,N26))=[exists N25] => ready(task(servicetask5,N25)) + +section goals: + + attack_state sod_securitySod1_1(U0,N27,N28):= executed(U0,task(usertask9,N27)). executed(U0,task(usertask2,N28)) + attack_state sod_securitySod2_1(U0,N29,N30):= executed(U0,task(usertask4,N29)). executed(U0,task(usertask3,N30)) + attack_state bod_securityBod1_1(U0,U1,N31,N32):= executed(U0,task(usertask8,N31)). executed(U1,task(usertask9,N32))& not(equal(U0,U1)) + attack_state bod_securityBod1_2(U0,U1,N33,N34):= executed(U0,task(usertask9,N33)). executed(U1,task(usertask8,N34))& not(equal(U0,U1)) diff --git a/designer/examples/JobApplication/generated/JobApplication.res b/designer/examples/JobApplication/generated/JobApplication.res new file mode 100644 index 0000000..f3d481d --- /dev/null +++ b/designer/examples/JobApplication/generated/JobApplication.res @@ -0,0 +1,455 @@ +% PARAMETERS: + + Protocol: JobApplication + Problem category: if + + Compound types: on + Step compression: on + Intruder Knowledge As Axioms: off + Weak Type-Flaws (iff newgp): off + + Technique: Graphplan-based Encoding using the EFA schema + Min Steps: 0 + Max Steps: 80 + Delta Steps: 1 + Level Mutex: 0 + Solver: minisat + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% SATE file generated in 0.1 sec... + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: INIT + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Initial Facts: 63 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 1 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 0 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 2 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 1 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 3 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 2 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 4 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 3 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 5 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 4 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 6 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 5 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 7 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 6 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 8 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 7 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 9 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 8 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 10 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 9 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 11 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 10 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 12 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 11 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 13 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 12 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 14 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 13 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 15 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 14 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 16 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 15 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Goals: 25 0.0 + Refinement Schema: 0 0.0 + Horn Clauses Axioms: 1728 0.14 + User Axioms: 0 0.0 + Ape Schema: 15270 1.2 + Explanatory Frame Schema: 5335 0.94 + ------ + Total: 2.28 + +* SUB-PHASE: Solver SAT formula Updated + + STATISTICS + Depth: 16 + Atoms: 6388 + Clauses: 22421 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 17 + +* SUB-PHASE: Search for SAT models.. + + Found 1 models in 0.0 sec. + +* SUB-PHASE: Models into Partial Order Plans (POPs) + + STATISTICS RUNTIME(sec) + model2pop 1 3.0 + ------ + Total: 3.0 + +* SUB-PHASE: Partial Order Plans (POPs) validations + + STATISTICS VALID RUNTIME(sec) + POP 1: true 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Partial Order Plans (POPs) printing + + -------------------------------------------------------------------- + pop 1: + + GOALS: [sod_securitySod2_1(user1_manager,fnat(n9,0,0),fnat(n7,0,0))] + + Step 0: [sc_w_usertask1_1(0)] + Step 1: [sc_authorizeTaskExecution_1(user1_clerk,clerk,usertask1,fnat(n0,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 2: [sc_h_taskExecution_1(user1_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 3: [sc_w_servicetask1_1(fnat(n0,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 4: [sc_atask_execution_1(servicetask1,fnat(n1,0,0),in_servicetask1,out_servicetask1),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 5: [sc_w_usertask2_1(fnat(n1,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 6: [sc_authorizeTaskExecution_1(user1_clerk,clerk,usertask2,fnat(n3,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 7: [sc_h_taskExecution_1(user1_clerk,clerk,usertask2,fnat(n3,0,0),in_usertask2,out_usertask2),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 8: [sc_w_servicetask2_1(fnat(n3,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 9: [sc_atask_execution_1(servicetask2,fnat(n5,0,0),in_servicetask2,out_servicetask2),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 10: [sc_w_usertask3_1(fnat(n5,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 11: [sc_authorizeTaskExecution_1(user1_manager,manager,usertask3,fnat(n7,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 12: [sc_h_taskExecution_1(user1_manager,manager,usertask3,fnat(n7,0,0),in_usertask3,out_usertask3),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 13: [sc_w_usertask4_1(fnat(n7,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 14: [sc_authorizeTaskExecution_1(user1_manager,manager,usertask4,fnat(n9,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 15: [sc_h_taskExecution_1(user1_manager,manager,usertask4,fnat(n9,0,0),in_usertask4,out_usertask4),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + Step 16: [rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9)] + -------------------------------------------------------------------- + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +RESULTS + +Attacks Found: true +Stop Condition Reached: false +Formula statistics: + Graph Construction Time: 0.4 + Graph Leveled Off: no + Graph2SAT Time (sec): 2.28 + Encoding Time (sec): 2.679 + Depth: 16 + Atoms: 6388 + Clauses: 22421 +Solving statistics: + Total Solving Time (sec): 0.0 + Last Solving Time (sec): 0.0 +Abstraction/Refinement statistics: + Validation Time (sec): 0.0 + Models into POPs Time (sec): 3.0 + Refinement iterations: 0 + +Total Time: 5.679 + + diff --git a/designer/examples/JobApplication/generated/JobApplication.result b/designer/examples/JobApplication/generated/JobApplication.result new file mode 100644 index 0000000..2c8eb56 --- /dev/null +++ b/designer/examples/JobApplication/generated/JobApplication.result @@ -0,0 +1,77 @@ +INPUT JobApplication.aslan +SUMMARY ATTACK_FOUND + GOAL: sod_securitySod2_1(user1_manager,fnat(n9,0,0),fnat(n7,0,0)) + +DETAILS + STRONGLY_TYPED_MODEL + BOUNDED_NUMBER_OF_SESSIONS + BOUNDED_SEARCH_DEPTH + BOUNDED_MESSAGE_DEPTH + +BACKEND SATMC VERSION 3.3.1_(September_2011) + +STATISTICS TIME 2779 ms + upperBoundReached false boolean + graphLeveledOff no boolean + satSolver minisat solver + maxStepsNumber 80 steps + stepsNumber 16 steps + atomsNumber 6388 atoms + clausesNumber 22421 clauses + encodingTime 2.679 seconds + solvingTime 0.0 seconds + if2sateCompilationTime 0.1 seconds + +TRACE: +0 + CLAUSES:{ } + RULES: w_usertask1(fnat(n0,0,0)) +1 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: authorizeTaskExecution(user1_clerk,clerk,usertask1,fnat(n0,0,0)) +2 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: h_taskExecution(user1_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1) +3 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: w_servicetask1(fnat(n0,0,0),fnat(n1,0,0)) +4 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: atask_execution(servicetask1,fnat(n1,0,0),in_servicetask1,out_servicetask1) +5 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: w_usertask2(fnat(n1,0,0),fnat(n3,0,0)) +6 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: authorizeTaskExecution(user1_clerk,clerk,usertask2,fnat(n3,0,0)) +7 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: h_taskExecution(user1_clerk,clerk,usertask2,fnat(n3,0,0),in_usertask2,out_usertask2) +8 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: w_servicetask2(fnat(n3,0,0),fnat(n5,0,0)) +9 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: atask_execution(servicetask2,fnat(n5,0,0),in_servicetask2,out_servicetask2) +10 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: w_usertask3(fnat(n5,0,0),fnat(n7,0,0)) +11 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: authorizeTaskExecution(user1_manager,manager,usertask3,fnat(n7,0,0)) +12 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: h_taskExecution(user1_manager,manager,usertask3,fnat(n7,0,0),in_usertask3,out_usertask3) +13 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: w_usertask4(fnat(n7,0,0),fnat(n9,0,0)) +14 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: authorizeTaskExecution(user1_manager,manager,usertask4,fnat(n9,0,0)) +15 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } + RULES: h_taskExecution(user1_manager,manager,usertask4,fnat(n9,0,0),in_usertask4,out_usertask4) +16 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9) } +CLOSED_FINAL_STATE: +{ counter_w_servicetask1(s(0)),counter_w_servicetask2(s(0)),counter_w_servicetask3(0),counter_w_servicetask4(0),counter_w_servicetask5(0),counter_w_usertask1(s(0)),counter_w_usertask2(s(0)),counter_w_usertask3(s(0)),counter_w_usertask4(s(0)),counter_w_usertask5(0),counter_w_usertask6(0),counter_w_usertask7(0),counter_w_usertask8(0),counter_w_usertask9(0),done(task(usertask4,fnat(n9,0,0))),initial_state(init_1),aknows(user1_clerk,in_usertask1),aknows(user1_clerk,in_usertask2),aknows(user1_clerk,out_usertask1),aknows(user1_clerk,out_usertask2),aknows(user1_manager,in_usertask3),aknows(user1_manager,in_usertask4),aknows(user1_manager,out_usertask3),aknows(user1_manager,out_usertask4),executed(user1_clerk,task(usertask1,fnat(n0,0,0))),executed(user1_clerk,task(usertask2,fnat(n3,0,0))),executed(user1_manager,task(usertask3,fnat(n7,0,0))),executed(user1_manager,task(usertask4,fnat(n9,0,0))),poto(clerk,usertask1),poto(clerk,usertask2),poto(clerk,usertask5),poto(clerk,usertask7),poto(manager,usertask3),poto(manager,usertask4),poto(manager,usertask6),poto(supervisor,usertask8),poto(supervisor,usertask9),user_to_role(user1_clerk,clerk),user_to_role(user1_manager,manager),user_to_role(user1_supervisor,supervisor),user_to_role(user2_clerk,clerk),user_to_role(user2_manager,manager),user_to_role(user2_supervisor,supervisor),canExecute(user1_clerk,clerk,usertask1),canExecute(user1_clerk,clerk,usertask2),canExecute(user1_clerk,clerk,usertask5),canExecute(user1_clerk,clerk,usertask7),canExecute(user1_manager,manager,usertask3),canExecute(user1_manager,manager,usertask4),canExecute(user1_manager,manager,usertask6),canExecute(user1_supervisor,supervisor,usertask8),canExecute(user1_supervisor,supervisor,usertask9),canExecute(user2_clerk,clerk,usertask1),canExecute(user2_clerk,clerk,usertask2),canExecute(user2_clerk,clerk,usertask5),canExecute(user2_clerk,clerk,usertask7),canExecute(user2_manager,manager,usertask3),canExecute(user2_manager,manager,usertask4),canExecute(user2_manager,manager,usertask6),canExecute(user2_supervisor,supervisor,usertask8),canExecute(user2_supervisor,supervisor,usertask9),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask2),rbac_ac(user1_clerk,clerk,usertask5),rbac_ac(user1_clerk,clerk,usertask7),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user1_manager,manager,usertask4),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_supervisor,supervisor,usertask8),rbac_ac(user1_supervisor,supervisor,usertask9),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask2),rbac_ac(user2_clerk,clerk,usertask5),rbac_ac(user2_clerk,clerk,usertask7),rbac_ac(user2_manager,manager,usertask3),rbac_ac(user2_manager,manager,usertask4),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_supervisor,supervisor,usertask8),rbac_ac(user2_supervisor,supervisor,usertask9),sod_securitySod2_1(user1_manager,fnat(n9,0,0),fnat(n7,0,0)),task_to_data(servicetask1,in_servicetask1,out_servicetask1),task_to_data(servicetask2,in_servicetask2,out_servicetask2),task_to_data(servicetask3,in_servicetask3,out_servicetask3),task_to_data(servicetask4,in_servicetask4,out_servicetask4),task_to_data(servicetask5,in_servicetask5,out_servicetask5),task_to_data(usertask1,in_usertask1,out_usertask1),task_to_data(usertask2,in_usertask2,out_usertask2),task_to_data(usertask3,in_usertask3,out_usertask3),task_to_data(usertask4,in_usertask4,out_usertask4),task_to_data(usertask5,in_usertask5,out_usertask5),task_to_data(usertask6,in_usertask6,out_usertask6),task_to_data(usertask7,in_usertask7,out_usertask7),task_to_data(usertask8,in_usertask8,out_usertask8),task_to_data(usertask9,in_usertask9,out_usertask9) } diff --git a/designer/examples/JobApplication/generated/JobApplication.sate b/designer/examples/JobApplication/generated/JobApplication.sate new file mode 100644 index 0000000..d428a19 --- /dev/null +++ b/designer/examples/JobApplication/generated/JobApplication.sate @@ -0,0 +1,727 @@ +% SATE OUTPUT + +% SORTS +sort(hc_axiom). +sort(action). +sort(fresh_const). +sort(fresh_nat). +sort(message). +sort(nat). +sort(set). +sort(set_typed). +sort(humanTaskName). +sort(humanTaskName_temp). +sort(humanTaskName_typed). +sort(role). +sort(role_temp). +sort(role_typed). +sort(automatedTaskName). +sort(automatedTaskName_temp). +sort(automatedTaskName_typed). +sort(user). +sort(user_temp). +sort(user_typed). +sort(data_typed). +sort(taskInstance_typed). +sort(fluent). +sort(userORrole). +sort(taskName). +sort(entity). +sort(data). + +% CONSTANTS +constant(initial_state(initial_state_id),fluent). +constant(fpk(fresh_public_key_id,nat,nat),fresh_public_key_typed). +constant(puk(fresh_public_key_typed),fresh_public_key). +constant(fsk(fresh_symmetric_key_id,nat,nat),fresh_symmetric_key_typed). +constant(sk(fresh_symmetric_key_typed),fresh_symmetric_key). +constant(fn(fresh_nonce_id,nat,nat),fresh_nonce_typed). +constant(nonce(fresh_nonce_typed),fresh_nonce). +constant(fmr(fresh_agent_id,nat,nat),fresh_agent_typed). +constant(mr(fresh_agent_typed),fresh_agent). +constant(ff(fresh_function_id,nat,nat),fresh_function_typed). +constant(fu(fresh_function_typed),fresh_function). +constant(fnat(fresh_nat_id,nat,nat),fresh_nat). +constant(fmsg(fresh_message_id,nat,nat),fresh_message). +constant(f_protocol_id_typed(fresh_protocol_id_typed_id,nat,nat),fresh_protocol_id_typed). +constant(pid(fresh_protocol_id_typed),fresh_protocol_id). +constant(fresh(fresh_const),fluent). +constant(s,nat). +constant(0,nat). +constant(mc_pair,data_typed). +constant(task,taskInstance_typed). +constant(parallelgateway1_to_usertask7,fluent). +constant(parallelgateway1_to_servicetask3,fluent). +constant(parallelgateway2_to_servicetask4,fluent). +constant(start_event_startevent2,fluent). +constant(usertask1,humanTaskName_typed). +constant(usertask2,humanTaskName_typed). +constant(usertask3,humanTaskName_typed). +constant(usertask4,humanTaskName_typed). +constant(usertask5,humanTaskName_typed). +constant(usertask6,humanTaskName_typed). +constant(usertask7,humanTaskName_typed). +constant(usertask8,humanTaskName_typed). +constant(usertask9,humanTaskName_typed). +constant(in_usertask1,set_typed). +constant(out_usertask1,set_typed). +constant(in_servicetask1,set_typed). +constant(out_servicetask1,set_typed). +constant(in_usertask2,set_typed). +constant(out_usertask2,set_typed). +constant(in_servicetask2,set_typed). +constant(out_servicetask2,set_typed). +constant(in_usertask3,set_typed). +constant(out_usertask3,set_typed). +constant(in_usertask4,set_typed). +constant(out_usertask4,set_typed). +constant(in_usertask5,set_typed). +constant(out_usertask5,set_typed). +constant(in_usertask6,set_typed). +constant(out_usertask6,set_typed). +constant(in_usertask7,set_typed). +constant(out_usertask7,set_typed). +constant(in_servicetask3,set_typed). +constant(out_servicetask3,set_typed). +constant(in_servicetask4,set_typed). +constant(out_servicetask4,set_typed). +constant(in_usertask8,set_typed). +constant(out_usertask8,set_typed). +constant(in_usertask9,set_typed). +constant(out_usertask9,set_typed). +constant(in_servicetask5,set_typed). +constant(out_servicetask5,set_typed). +constant(manager,role_typed). +constant(supervisor,role_typed). +constant(clerk,role_typed). +constant(servicetask1,automatedTaskName_typed). +constant(servicetask2,automatedTaskName_typed). +constant(servicetask3,automatedTaskName_typed). +constant(servicetask4,automatedTaskName_typed). +constant(servicetask5,automatedTaskName_typed). +constant(user1_manager,user_typed). +constant(user2_manager,user_typed). +constant(user1_supervisor,user_typed). +constant(user2_supervisor,user_typed). +constant(user1_clerk,user_typed). +constant(user2_clerk,user_typed). +constant(mr(agent_typed),agent). +constant(nonce(nonce_typed),nonce). +constant(sk(sk_typed),symmetric_key). +constant(puk(puk_typed),public_key). +constant(private_key_lb(private_key_typed),private_key). +constant(fu(function_typed),function). +constant(pid(protocol_id_typed),protocol_id). +constant(bool_lb(bool_typed),bool). +constant(set_lb(set_typed),set). +constant(ch(channel_typed),channel). +constant(s(nat),nat). +constant(contains(message,set),fluent). +constant(user_to_role(user,role),fluent). +constant(poto(userORrole,taskName),fluent). +constant(task_to_data(taskName,set,set),fluent). +constant(aknows(entity,data),fluent). +constant(mc_pair(data,data),data_typed). +constant(contains(set,data),fluent). +constant(task(taskName,nat),taskInstance_typed). +constant(canExecute(user,role,humanTaskName),fluent). +constant(granted(user,role,taskInstance),fluent). +constant(executed(user,taskInstance),fluent). +constant(ready(taskInstance),fluent). +constant(done(taskInstance),fluent). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(humanTaskName_lb(humanTaskName_typed),humanTaskName_temp). +constant(userORrole_lb(role_temp),role). +constant(userORrole_lb(role_temp),role). +constant(role_lb(role_typed),role_temp). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(automatedTaskName_lb(automatedTaskName_typed),automatedTaskName_temp). +constant(entity_lb(user_temp),user). +constant(entity_lb(user_temp),user). +constant(user_lb(user_typed),user_temp). +constant(init_1,initial_state_id). +constant(counter_w_usertask1(nat),fluent). +constant(counter_w_servicetask1(nat),fluent). +constant(counter_w_usertask2(nat),fluent). +constant(counter_w_servicetask2(nat),fluent). +constant(counter_w_usertask3(nat),fluent). +constant(counter_w_usertask4(nat),fluent). +constant(counter_w_usertask5(nat),fluent). +constant(counter_w_usertask6(nat),fluent). +constant(counter_w_usertask7(nat),fluent). +constant(counter_w_servicetask3(nat),fluent). +constant(counter_w_servicetask4(nat),fluent). +constant(counter_w_usertask8(nat),fluent). +constant(counter_w_usertask9(nat),fluent). +constant(counter_w_servicetask5(nat),fluent). +constant(n0,fresh_nat_id). +constant(n1,fresh_nat_id). +constant(n3,fresh_nat_id). +constant(n5,fresh_nat_id). +constant(n7,fresh_nat_id). +constant(n9,fresh_nat_id). +constant(n11,fresh_nat_id). +constant(n13,fresh_nat_id). +constant(n16,fresh_nat_id). +constant(n17,fresh_nat_id). +constant(n20,fresh_nat_id). +constant(n21,fresh_nat_id). +constant(n23,fresh_nat_id). +constant(n25,fresh_nat_id). + +% SUPERSORTS +super_sort(puk_typed,fresh_public_key_typed). +super_sort(fresh_const,fresh_public_key). +super_sort(sk_typed,fresh_symmetric_key_typed). +super_sort(fresh_const,fresh_symmetric_key). +super_sort(nonce_typed,fresh_nonce_typed). +super_sort(fresh_const,fresh_nonce). +super_sort(agent_typed,fresh_agent_typed). +super_sort(fresh_const,fresh_agent). +super_sort(function_typed,fresh_function_typed). +super_sort(fresh_const,fresh_function). +super_sort(nat,fresh_nat). +super_sort(fresh_const,fresh_nat). +super_sort(message,fresh_message). +super_sort(fresh_const,fresh_message). +super_sort(protocol_id_typed,fresh_protocol_id_typed). +super_sort(fresh_const,fresh_protocol_id). +super_sort(message,agent). +super_sort(message,nonce). +super_sort(message,symmetric_key). +super_sort(message,public_key). +super_sort(message,private_key). +super_sort(message,function). +super_sort(message,nat). +super_sort(message,protocol_id). +super_sort(message,bool). +super_sort(entity,organization). +super_sort(entity,user). +super_sort(data,object). +super_sort(data,set). +super_sort(userORrole,user). +super_sort(userORrole,role). +super_sort(taskName,automatedTaskName). +super_sort(taskName,humanTaskName). +super_sort(taskName_typed,humanTaskName_temp). +super_sort(userORrole_typed,role_temp). +super_sort(taskName_typed,automatedTaskName_temp). +super_sort(entity_typed,user_temp). + +% INITIAL STATES +facts([initial_state(init_1), + user_to_role(entity_lb(user_lb(user1_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user2_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user1_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user2_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user1_clerk)),userORrole_lb(role_lb(clerk))), + user_to_role(entity_lb(user_lb(user2_clerk)),userORrole_lb(role_lb(clerk))), + task_to_data(taskName_lb(humanTaskName_lb(usertask1)),set_lb(in_usertask1),set_lb(out_usertask1)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask1)),set_lb(in_servicetask1),set_lb(out_servicetask1)), + task_to_data(taskName_lb(humanTaskName_lb(usertask2)),set_lb(in_usertask2),set_lb(out_usertask2)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask2)),set_lb(in_servicetask2),set_lb(out_servicetask2)), + task_to_data(taskName_lb(humanTaskName_lb(usertask3)),set_lb(in_usertask3),set_lb(out_usertask3)), + task_to_data(taskName_lb(humanTaskName_lb(usertask4)),set_lb(in_usertask4),set_lb(out_usertask4)), + task_to_data(taskName_lb(humanTaskName_lb(usertask5)),set_lb(in_usertask5),set_lb(out_usertask5)), + task_to_data(taskName_lb(humanTaskName_lb(usertask6)),set_lb(in_usertask6),set_lb(out_usertask6)), + task_to_data(taskName_lb(humanTaskName_lb(usertask7)),set_lb(in_usertask7),set_lb(out_usertask7)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask3)),set_lb(in_servicetask3),set_lb(out_servicetask3)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask4)),set_lb(in_servicetask4),set_lb(out_servicetask4)), + task_to_data(taskName_lb(humanTaskName_lb(usertask8)),set_lb(in_usertask8),set_lb(out_usertask8)), + task_to_data(taskName_lb(humanTaskName_lb(usertask9)),set_lb(in_usertask9),set_lb(out_usertask9)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask5)),set_lb(in_servicetask5),set_lb(out_servicetask5)), + start_event_startevent2, + counter_w_usertask1(0), + counter_w_servicetask1(0), + counter_w_usertask2(0), + counter_w_servicetask2(0), + counter_w_usertask3(0), + counter_w_usertask4(0), + counter_w_usertask5(0), + counter_w_usertask6(0), + counter_w_usertask7(0), + counter_w_servicetask3(0), + counter_w_servicetask4(0), + counter_w_usertask8(0), + counter_w_usertask9(0), + counter_w_servicetask5(0)]). + + +% RULES +constant(sc_authorizeTaskExecution_1(user_typed,role_typed,humanTaskName_typed,nat),action). +action(sc_authorizeTaskExecution_1(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_h_taskExecution_1(user_typed,role_typed,humanTaskName_typed,nat,set_typed,set_typed),action). +action(sc_h_taskExecution_1(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_atask_execution_1(automatedTaskName_typed,nat,set_typed,set_typed),action). +action(sc_atask_execution_1(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +constant(sc_w_usertask1_1(nat),action). +action(sc_w_usertask1_1(Xvar), + true, + [start_event_startevent2, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent2, + counter_w_usertask1(Xvar)]). + +constant(sc_w_servicetask1_1(nat,nat),action). +action(sc_w_servicetask1_1(N2,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_servicetask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),fnat(n1,Xvar,0)))), + counter_w_servicetask1(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_servicetask1(Xvar)]). + +constant(sc_w_usertask2_1(nat,nat),action). +action(sc_w_usertask2_1(N4,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),N4))), + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n3,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),N4))), + counter_w_usertask2(Xvar)]). + +constant(sc_w_servicetask2_1(nat,nat),action). +action(sc_w_servicetask2_1(N6,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N6))), + counter_w_servicetask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),fnat(n5,Xvar,0)))), + counter_w_servicetask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N6))), + counter_w_servicetask2(Xvar)]). + +constant(sc_w_usertask3_1(nat,nat),action). +action(sc_w_usertask3_1(N8,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N8))), + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n7,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N8))), + counter_w_usertask3(Xvar)]). + +constant(sc_w_usertask4_1(nat,nat),action). +action(sc_w_usertask4_1(N10,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N10))), + counter_w_usertask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),fnat(n9,Xvar,0)))), + counter_w_usertask4(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N10))), + counter_w_usertask4(Xvar)]). + +constant(sc_w_usertask5_1(nat,nat),action). +action(sc_w_usertask5_1(N12,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N12))), + counter_w_usertask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),fnat(n11,Xvar,0)))), + counter_w_usertask5(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N12))), + counter_w_usertask5(Xvar)]). + +constant(sc_w_usertask6_1(nat,nat),action). +action(sc_w_usertask6_1(N14,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N14))), + counter_w_usertask6(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),fnat(n13,Xvar,0)))), + counter_w_usertask6(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N14))), + counter_w_usertask6(Xvar)]). + +constant(sc_w_parallelgateway1_1(nat),action). +action(sc_w_parallelgateway1_1(N15), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N15)))], + [parallelgateway1_to_usertask7, + parallelgateway1_to_servicetask3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N15)))]). + +constant(sc_w_usertask7_1(nat),action). +action(sc_w_usertask7_1(Xvar), + true, + [parallelgateway1_to_usertask7, + counter_w_usertask7(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),fnat(n16,Xvar,0)))), + counter_w_usertask7(s(Xvar))], + [parallelgateway1_to_usertask7, + counter_w_usertask7(Xvar)]). + +constant(sc_w_servicetask3_1(nat),action). +action(sc_w_servicetask3_1(Xvar), + true, + [parallelgateway1_to_servicetask3, + counter_w_servicetask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),fnat(n17,Xvar,0)))), + counter_w_servicetask3(s(Xvar))], + [parallelgateway1_to_servicetask3, + counter_w_servicetask3(Xvar)]). + +constant(sc_w_parallelgateway2_1(nat,nat),action). +action(sc_w_parallelgateway2_1(N18,N19), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N18))), + done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),N19)))], + [parallelgateway2_to_servicetask4], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N18))), + done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),N19)))]). + +constant(sc_w_servicetask4_1(nat),action). +action(sc_w_servicetask4_1(Xvar), + true, + [parallelgateway2_to_servicetask4, + counter_w_servicetask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),fnat(n20,Xvar,0)))), + counter_w_servicetask4(s(Xvar))], + [parallelgateway2_to_servicetask4, + counter_w_servicetask4(Xvar)]). + +constant(sc_w_usertask8_1(nat,nat),action). +action(sc_w_usertask8_1(N22,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),N22))), + counter_w_usertask8(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),fnat(n21,Xvar,0)))), + counter_w_usertask8(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),N22))), + counter_w_usertask8(Xvar)]). + +constant(sc_w_usertask9_1(nat,nat),action). +action(sc_w_usertask9_1(N24,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N24))), + counter_w_usertask9(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),fnat(n23,Xvar,0)))), + counter_w_usertask9(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N24))), + counter_w_usertask9(Xvar)]). + +constant(sc_w_servicetask5_1(nat,nat),action). +action(sc_w_servicetask5_1(N26,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N26))), + counter_w_servicetask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask5)),fnat(n25,Xvar,0)))), + counter_w_servicetask5(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N26))), + counter_w_servicetask5(Xvar)]). + + +% CONSTRAINTS + +% GOALS +goal(sod_securitySod1_1(U0,N27,N28),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N27))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N28)))]). + +goal(sod_securitySod2_1(U0,N29,N30),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N29))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N30)))]). + +goal(bod_securityBod1_1(U0,U1,N31,N32),on_the_fly_conditions([\+entity_lb(user_lb(U0))=entity_lb(user_lb(U1))]), + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N31))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N32)))]). + +goal(bod_securityBod1_2(U0,U1,N33,N34),on_the_fly_conditions([\+entity_lb(user_lb(U0))=entity_lb(user_lb(U1))]), + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N33))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N34)))]). + + +% EQUATIONS + +% USER_AXIOMS + +% HC_AXIOMS +constant(rbac_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(rbac_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(direct_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(direct_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(entity_lb(user_lb(A)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(poto_usertask1,hc_axiom). +hc_axiom(poto_usertask1, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask1)))]). + +constant(poto_usertask2,hc_axiom). +hc_axiom(poto_usertask2, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask2)))]). + +constant(poto_usertask3,hc_axiom). +hc_axiom(poto_usertask3, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask3)))]). + +constant(poto_usertask4,hc_axiom). +hc_axiom(poto_usertask4, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask4)))]). + +constant(poto_usertask5,hc_axiom). +hc_axiom(poto_usertask5, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask5)))]). + +constant(poto_usertask6,hc_axiom). +hc_axiom(poto_usertask6, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask6)))]). + +constant(poto_usertask7,hc_axiom). +hc_axiom(poto_usertask7, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask7)))]). + +constant(poto_usertask8,hc_axiom). +hc_axiom(poto_usertask8, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask8)))]). + +constant(poto_usertask9,hc_axiom). +hc_axiom(poto_usertask9, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask9)))]). + + + +% INVOKED DURING THE LOADING (USEFUL FOR SETTING) +init_sate :- + set(verification_abstraction,off), + set(if2sate_version,2). + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% NOTE: these prolog facts are not mandatory and are useful only for +% printing a user-friendly output when the triple_step optimization +% is enabled. The user is invited to neglect these declarations. +triple_step_action(authorizeTaskExecution(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(h_taskExecution(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(atask_execution(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +triple_step_action(w_usertask1(Xvar), + true, + [start_event_startevent2, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent2, + counter_w_usertask1(Xvar)]). + +triple_step_action(w_servicetask1(N2,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_servicetask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),fnat(n1,Xvar,0)))), + counter_w_servicetask1(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_servicetask1(Xvar)]). + +triple_step_action(w_usertask2(N4,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),N4))), + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n3,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),N4))), + counter_w_usertask2(Xvar)]). + +triple_step_action(w_servicetask2(N6,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N6))), + counter_w_servicetask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),fnat(n5,Xvar,0)))), + counter_w_servicetask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N6))), + counter_w_servicetask2(Xvar)]). + +triple_step_action(w_usertask3(N8,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N8))), + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n7,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N8))), + counter_w_usertask3(Xvar)]). + +triple_step_action(w_usertask4(N10,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N10))), + counter_w_usertask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),fnat(n9,Xvar,0)))), + counter_w_usertask4(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N10))), + counter_w_usertask4(Xvar)]). + +triple_step_action(w_usertask5(N12,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N12))), + counter_w_usertask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),fnat(n11,Xvar,0)))), + counter_w_usertask5(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N12))), + counter_w_usertask5(Xvar)]). + +triple_step_action(w_usertask6(N14,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N14))), + counter_w_usertask6(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),fnat(n13,Xvar,0)))), + counter_w_usertask6(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N14))), + counter_w_usertask6(Xvar)]). + +triple_step_action(w_parallelgateway1(N15), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N15)))], + [parallelgateway1_to_usertask7, + parallelgateway1_to_servicetask3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N15)))]). + +triple_step_action(w_usertask7(Xvar), + true, + [parallelgateway1_to_usertask7, + counter_w_usertask7(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),fnat(n16,Xvar,0)))), + counter_w_usertask7(s(Xvar))], + [parallelgateway1_to_usertask7, + counter_w_usertask7(Xvar)]). + +triple_step_action(w_servicetask3(Xvar), + true, + [parallelgateway1_to_servicetask3, + counter_w_servicetask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),fnat(n17,Xvar,0)))), + counter_w_servicetask3(s(Xvar))], + [parallelgateway1_to_servicetask3, + counter_w_servicetask3(Xvar)]). + +triple_step_action(w_parallelgateway2(N18,N19), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N18))), + done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),N19)))], + [parallelgateway2_to_servicetask4], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N18))), + done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask3)),N19)))]). + +triple_step_action(w_servicetask4(Xvar), + true, + [parallelgateway2_to_servicetask4, + counter_w_servicetask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),fnat(n20,Xvar,0)))), + counter_w_servicetask4(s(Xvar))], + [parallelgateway2_to_servicetask4, + counter_w_servicetask4(Xvar)]). + +triple_step_action(w_usertask8(N22,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),N22))), + counter_w_usertask8(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),fnat(n21,Xvar,0)))), + counter_w_usertask8(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask4)),N22))), + counter_w_usertask8(Xvar)]). + +triple_step_action(w_usertask9(N24,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N24))), + counter_w_usertask9(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),fnat(n23,Xvar,0)))), + counter_w_usertask9(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N24))), + counter_w_usertask9(Xvar)]). + +triple_step_action(w_servicetask5(N26,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N26))), + counter_w_servicetask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask5)),fnat(n25,Xvar,0)))), + counter_w_servicetask5(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),N26))), + counter_w_servicetask5(Xvar)]). + +correspondence_between_action_and_step_compressed_rule(Act,SCAct) :- + atom_concat('sc_',Act,TmpAct), + atom_concat(TmpAct,_,SCAct). + +% PREDICATE TO EVALUATE ON_THE_FLY_CONDITIONS +on_the_fly_conditions([]). +on_the_fly_conditions([C|Cs]) :- + call(C), + on_the_fly_conditions(Cs). diff --git a/designer/examples/LoanOrigination/CreditWorthinessService.java b/designer/examples/LoanOrigination/CreditWorthinessService.java new file mode 100644 index 0000000..7d1845a --- /dev/null +++ b/designer/examples/LoanOrigination/CreditWorthinessService.java @@ -0,0 +1,59 @@ +package service.impl; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.activiti.engine.delegate.JavaDelegate; +import org.activiti.engine.delegate.DelegateExecution; + +public class CreditWorthinessService implements JavaDelegate { + + @Override + public void execute(DelegateExecution execution) throws Exception { + + String country = (String) execution.getVariable("user_country"); + + if (country != null && country.equals("Germany")) { + // collect basic information + String lastname = (String) execution.getVariable("user_lastname"); + String firstname = (String) execution.getVariable("user_firstname"); + Date dateOfBirth = (Date) execution.getVariable("user_dateOfBirth"); + String locationOfBirth = (String) execution.getVariable("user_locationOfBirth"); + + // collect additional information + List addInfoList = new ArrayList(); + + addInfoList.add((String) execution.getVariable("user_address")); + + String birthname = (String) execution.getVariable("user_birthname"); + if (birthname != null && birthname.length() > 0) { + addInfoList.add(birthname); + } + + if ((Boolean) execution.getVariable("user_hasAccount")) { + addInfoList.add(((Long) execution.getVariable("user_currentAccountBalance")).toString()); + } + + // Schufa request + String result = executeSchufaRequest(lastname, firstname, dateOfBirth, locationOfBirth, (String[]) addInfoList.toArray()); + execution.createVariableLocal("externalWorthiness", ""); + execution.setVariable("externalWorthiness", result); + + } else { + // unsupported + notifyWrongCountry(country); + } + + } + + private String executeSchufaRequest(String lastname, String firstname, Date dateOfBirth, String locationOfBirth, String[] addInfo) { + // request Schufa information + return "SchufaInfo"; + } + + private void notifyWrongCountry(String country) { + // notify: wrong country provided + } + +} diff --git a/designer/examples/LoanOrigination/LoanOrigination.activiti b/designer/examples/LoanOrigination/LoanOrigination.activiti new file mode 100644 index 0000000..93b3c86 --- /dev/null +++ b/designer/examples/LoanOrigination/LoanOrigination.activiti @@ -0,0 +1,1129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/LoanOrigination/LoanOrigination.png b/designer/examples/LoanOrigination/LoanOrigination.png new file mode 100644 index 0000000000000000000000000000000000000000..495d8b5bf72f032b9ab67da0e16ad9eb81a664f7 GIT binary patch literal 67909 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 s*=Oilf%T*Bo%ORw%R2d2rjfM~8xa fact + poto : userORrole * taskName -> fact + task_to_data : taskName * set * set -> fact + aknows : entity * data -> fact + mc_pair : data * data -> data + contains : set * data -> fact + task : taskName * nat -> taskInstance + canExecute : user * role * humanTaskName -> fact + granted : user * role * taskInstance -> fact + executed : user * taskInstance -> fact + ready : taskInstance -> fact + done : taskInstance -> fact + entity > organization + entity > user + data > object + data > set + userORrole > user + userORrole > role + taskName > automatedTaskName + taskName > humanTaskName + +section types: + + start_event_startevent1,parallelgateway1_to_usertask3,parallelgateway1_to_servicetask2,parallelgateway4_to_usertask5,exclusivegateway1_to_usertask8,exclusivegateway1_to_exclusivegateway2,exclusivegateway2_to_usertask9,exclusivegateway3_to_parallelgateway1,exclusivegateway4_to_usertask7,exclusivegateway4_to_exclusivegateway3: fact + HT,usertask1,usertask2,usertask3,usertask4,usertask5,usertask6,usertask7,usertask8,usertask9: humanTaskName + IN,OUT,in_usertask1,out_usertask1,in_usertask2,out_usertask2,in_usertask3,out_usertask3,in_servicetask2,out_servicetask2,in_usertask4,out_usertask4,in_usertask5,out_usertask5,in_usertask6,out_usertask6,in_usertask7,out_usertask7,in_usertask8,out_usertask8,in_usertask9,out_usertask9: set + manager,supervisor,clerk,R: role + N,N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34,N35,N36,N37,N38,N39,N40,N41,N42: nat + AT,servicetask2: automatedTaskName + user1_manager,user2_manager,user1_supervisor,user2_supervisor,user1_clerk,user2_clerk,A,U0,U1: user + +section inits: + + initial_state init_1 := + + user_to_role(user1_manager,manager). + user_to_role(user2_manager,manager). + user_to_role(user1_supervisor,supervisor). + user_to_role(user2_supervisor,supervisor). + user_to_role(user1_clerk,clerk). + user_to_role(user2_clerk,clerk). + start_event_startevent1. + task_to_data(usertask1,in_usertask1,out_usertask1). + task_to_data(usertask2,in_usertask2,out_usertask2). + task_to_data(usertask3,in_usertask3,out_usertask3). + task_to_data(servicetask2,in_servicetask2,out_servicetask2). + task_to_data(usertask4,in_usertask4,out_usertask4). + task_to_data(usertask5,in_usertask5,out_usertask5). + task_to_data(usertask6,in_usertask6,out_usertask6). + task_to_data(usertask7,in_usertask7,out_usertask7). + task_to_data(usertask8,in_usertask8,out_usertask8). + task_to_data(usertask9,in_usertask9,out_usertask9) + +section hornClauses: + + hc rbac_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(R,HT) + hc direct_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(A,HT) + hc poto_usertask1:= poto(clerk,usertask1) + hc poto_usertask2:= poto(supervisor,usertask2) + hc poto_usertask3:= poto(supervisor,usertask3) + hc poto_usertask4:= poto(supervisor,usertask4) + hc poto_usertask5:= poto(supervisor,usertask5) + hc poto_usertask6:= poto(manager,usertask6) + hc poto_usertask7:= poto(manager,usertask7) + hc poto_usertask8:= poto(clerk,usertask8) + hc poto_usertask9:= poto(clerk,usertask9) + +section rules: + + step authorizeTaskExecution(A,R,HT,N) := canExecute(A,R,HT). ready(task(HT,N)) => granted(A,R,task(HT,N)) + step h_taskExecution(A,R,HT,N,IN,OUT) := granted(A,R,task(HT,N)). task_to_data(HT,IN,OUT) => executed(A,task(HT,N)). done(task(HT,N)). task_to_data(HT,IN,OUT). aknows(A,IN). aknows(A,OUT) + step atask_execution(AT,N,IN,OUT) := ready(task(AT,N)). task_to_data(AT,IN,OUT) => done(task(AT,N)). task_to_data(AT,IN,OUT) + step w_usertask1(N0) := start_event_startevent1=[exists N0] => ready(task(usertask1,N0)) + step w_usertask2(N2,N1) := done(task(usertask1,N2))=[exists N1] => ready(task(usertask2,N1)) + step w_parallelgateway1 := exclusivegateway3_to_parallelgateway1 => parallelgateway1_to_usertask3. parallelgateway1_to_servicetask2 + step w_usertask3(N3) := parallelgateway1_to_usertask3=[exists N3] => ready(task(usertask3,N3)) + step w_servicetask2(N4) := parallelgateway1_to_servicetask2=[exists N4] => ready(task(servicetask2,N4)) + step w_usertask4(N6,N5) := done(task(servicetask2,N6))=[exists N5] => ready(task(usertask4,N5)) + step w_parallelgateway4(N7,N8) := done(task(usertask3,N7)). done(task(usertask4,N8)) => parallelgateway4_to_usertask5 + step w_usertask5(N9) := parallelgateway4_to_usertask5=[exists N9] => ready(task(usertask5,N9)) + step w_usertask6(N11,N10) := done(task(usertask5,N11))=[exists N10] => ready(task(usertask6,N10)) + step w_usertask7(N12) := exclusivegateway4_to_usertask7=[exists N12] => ready(task(usertask7,N12)) + step exclusivegateway1_branch1(N13) := done(task(usertask7,N13)) => exclusivegateway1_to_usertask8 + step exclusivegateway1_branch2(N13) := done(task(usertask7,N13)) => exclusivegateway1_to_exclusivegateway2 + step w_usertask8(N14) := exclusivegateway1_to_usertask8=[exists N14] => ready(task(usertask8,N14)) + step exclusivegateway2_branch1(N15) := done(task(usertask8,N15)) => exclusivegateway2_to_usertask9 + step exclusivegateway2_branch2 := exclusivegateway1_to_exclusivegateway2 => exclusivegateway2_to_usertask9 + step w_usertask9(N16) := exclusivegateway2_to_usertask9=[exists N16] => ready(task(usertask9,N16)) + step exclusivegateway3_branch1(N41) := done(task(usertask2,N41)) => exclusivegateway3_to_parallelgateway1 + step exclusivegateway3_branch2 := exclusivegateway4_to_exclusivegateway3 => exclusivegateway3_to_parallelgateway1 + step exclusivegateway4_branch1(N42) := done(task(usertask6,N42)) => exclusivegateway4_to_usertask7 + step exclusivegateway4_branch2(N42) := done(task(usertask6,N42)) => exclusivegateway4_to_exclusivegateway3 + +section goals: + + attack_state sod_securitySod1_1(U0,N17,N18,N19):= executed(U0,task(usertask5,N17)). executed(U0,task(usertask6,N18)). executed(U0,task(usertask7,N19)) + attack_state sod_securitySod1_2(U0,U1,N20,N21,N22):= executed(U0,task(usertask6,N20)). executed(U0,task(usertask7,N21)). executed(U1,task(usertask5,N22)) + attack_state sod_securitySod1_3(U0,U1,N23,N24,N25):= executed(U0,task(usertask5,N23)). executed(U0,task(usertask6,N24)). executed(U1,task(usertask7,N25)) + attack_state sod_securitySod1_4(U0,U1,N26,N27,N28):= executed(U0,task(usertask5,N26)). executed(U0,task(usertask7,N27)). executed(U1,task(usertask6,N28)) + attack_state sod_securitySod2_1(U0,N29,N30,N31):= executed(U0,task(usertask4,N29)). executed(U0,task(usertask5,N30)). executed(U0,task(usertask3,N31)) + attack_state sod_securitySod2_2(U0,U1,N32,N33,N34):= executed(U0,task(usertask4,N32)). executed(U0,task(usertask3,N33)). executed(U1,task(usertask5,N34)) + attack_state sod_securitySod2_3(U0,U1,N35,N36,N37):= executed(U0,task(usertask4,N35)). executed(U0,task(usertask5,N36)). executed(U1,task(usertask3,N37)) + attack_state sod_securitySod2_4(U0,U1,N38,N39,N40):= executed(U0,task(usertask5,N38)). executed(U0,task(usertask3,N39)). executed(U1,task(usertask4,N40)) diff --git a/designer/examples/LoanOrigination/generated/LoanOrigination.res b/designer/examples/LoanOrigination/generated/LoanOrigination.res new file mode 100644 index 0000000..407d756 --- /dev/null +++ b/designer/examples/LoanOrigination/generated/LoanOrigination.res @@ -0,0 +1,476 @@ +% PARAMETERS: + + Protocol: LoanOrigination + Problem category: if + + Compound types: on + Step compression: on + Intruder Knowledge As Axioms: off + Weak Type-Flaws (iff newgp): off + + Technique: Graphplan-based Encoding using the EFA schema + Min Steps: 0 + Max Steps: 80 + Delta Steps: 1 + Level Mutex: 0 + Solver: minisat + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% SATE file generated in 0.1 sec... + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: INIT + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Initial Facts: 55 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 1 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 0 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 2 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 1 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 3 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 2 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 4 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 3 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 5 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 4 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 6 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 5 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 7 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 6 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 8 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 7 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 9 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 8 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 10 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 9 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 11 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 10 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 12 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 11 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 13 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 12 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 14 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 13 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 15 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 14 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 16 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 15 no 0.04 + ------ + Total: 0.04 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.02 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 17 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 16 no 0.06 + ------ + Total: 0.06 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.14 + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Goals: 1961 0.2 + Refinement Schema: 0 0.0 + Horn Clauses Axioms: 1836 0.14 + User Axioms: 0 0.0 + Ape Schema: 15260 0.92 + Explanatory Frame Schema: 6208 0.98 + ------ + Total: 2.24 + +* SUB-PHASE: Solver SAT formula Updated + + STATISTICS + Depth: 17 + Atoms: 7425 + Clauses: 25320 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 18 + +* SUB-PHASE: Search for SAT models.. + + Found 1 models in 0.0 sec. + +* SUB-PHASE: Models into Partial Order Plans (POPs) + + STATISTICS RUNTIME(sec) + model2pop 1 3.68 + ------ + Total: 3.68 + +* SUB-PHASE: Partial Order Plans (POPs) validations + + STATISTICS VALID RUNTIME(sec) + POP 1: true 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Partial Order Plans (POPs) printing + + -------------------------------------------------------------------- + pop 1: + + GOALS: [sod_securitySod2_2(user2_supervisor,user1_supervisor,fnat(n5,0,0),fnat(n3,0,0),fnat(n9,0,0))] + + Step 0: [sc_w_usertask1_1(0)] + Step 1: [sc_authorizeTaskExecution_1(user2_clerk,clerk,usertask1,fnat(n0,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 2: [sc_h_taskExecution_1(user2_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 3: [sc_w_usertask2_1(fnat(n0,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 4: [sc_authorizeTaskExecution_1(user1_supervisor,supervisor,usertask2,fnat(n1,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 5: [sc_h_taskExecution_1(user1_supervisor,supervisor,usertask2,fnat(n1,0,0),in_usertask2,out_usertask2),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 6: [sc_exclusivegateway3_branch1_1(fnat(n1,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 7: [sc_w_parallelgateway1_1,rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 8: [sc_w_servicetask2_1(0),sc_w_usertask3_1(0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 9: [sc_atask_execution_1(servicetask2,fnat(n4,0,0),in_servicetask2,out_servicetask2),sc_authorizeTaskExecution_1(user2_supervisor,supervisor,usertask3,fnat(n3,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 10: [sc_w_usertask4_1(fnat(n4,0,0),0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 11: [sc_authorizeTaskExecution_1(user2_supervisor,supervisor,usertask4,fnat(n5,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 12: [sc_h_taskExecution_1(user2_supervisor,supervisor,usertask3,fnat(n3,0,0),in_usertask3,out_usertask3),sc_h_taskExecution_1(user2_supervisor,supervisor,usertask4,fnat(n5,0,0),in_usertask4,out_usertask4),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 13: [sc_w_parallelgateway4_1(fnat(n3,0,0),fnat(n5,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 14: [sc_w_usertask5_1(0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 15: [sc_authorizeTaskExecution_1(user1_supervisor,supervisor,usertask5,fnat(n9,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 16: [sc_h_taskExecution_1(user1_supervisor,supervisor,usertask5,fnat(n9,0,0),in_usertask5,out_usertask5),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + Step 17: [rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5)] + -------------------------------------------------------------------- + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +RESULTS + +Attacks Found: true +Stop Condition Reached: false +Formula statistics: + Graph Construction Time: 0.4 + Graph Leveled Off: no + Graph2SAT Time (sec): 2.26 + Encoding Time (sec): 2.659 + Depth: 17 + Atoms: 7425 + Clauses: 25320 +Solving statistics: + Total Solving Time (sec): 0.0 + Last Solving Time (sec): 0.0 +Abstraction/Refinement statistics: + Validation Time (sec): 0.0 + Models into POPs Time (sec): 3.68 + Refinement iterations: 0 + +Total Time: 6.339 + + diff --git a/designer/examples/LoanOrigination/generated/LoanOrigination.result b/designer/examples/LoanOrigination/generated/LoanOrigination.result new file mode 100644 index 0000000..eea6584 --- /dev/null +++ b/designer/examples/LoanOrigination/generated/LoanOrigination.result @@ -0,0 +1,80 @@ +INPUT LoanOrigination.aslan +SUMMARY ATTACK_FOUND + GOAL: sod_securitySod2_2(user2_supervisor,user1_supervisor,fnat(n5,0,0),fnat(n3,0,0),fnat(n9,0,0)) + +DETAILS + STRONGLY_TYPED_MODEL + BOUNDED_NUMBER_OF_SESSIONS + BOUNDED_SEARCH_DEPTH + BOUNDED_MESSAGE_DEPTH + +BACKEND SATMC VERSION 3.3.1_(September_2011) + +STATISTICS TIME 2759 ms + upperBoundReached false boolean + graphLeveledOff no boolean + satSolver minisat solver + maxStepsNumber 80 steps + stepsNumber 17 steps + atomsNumber 7425 atoms + clausesNumber 25320 clauses + encodingTime 2.659 seconds + solvingTime 0.0 seconds + if2sateCompilationTime 0.1 seconds + +TRACE: +0 + CLAUSES:{ } + RULES: w_usertask1(fnat(n0,0,0)) +1 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: authorizeTaskExecution(user2_clerk,clerk,usertask1,fnat(n0,0,0)) +2 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: h_taskExecution(user2_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1) +3 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: w_usertask2(fnat(n0,0,0),fnat(n1,0,0)) +4 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: authorizeTaskExecution(user1_supervisor,supervisor,usertask2,fnat(n1,0,0)) +5 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: h_taskExecution(user1_supervisor,supervisor,usertask2,fnat(n1,0,0),in_usertask2,out_usertask2) +6 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: exclusivegateway3_branch1(fnat(n1,0,0)) +7 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: w_parallelgateway1 +8 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: { w_servicetask2(fnat(n4,0,0)),w_usertask3(fnat(n3,0,0)) } +9 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: { atask_execution(servicetask2,fnat(n4,0,0),in_servicetask2,out_servicetask2),authorizeTaskExecution(user2_supervisor,supervisor,usertask3,fnat(n3,0,0)) } +10 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: w_usertask4(fnat(n4,0,0),fnat(n5,0,0)) +11 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: authorizeTaskExecution(user2_supervisor,supervisor,usertask4,fnat(n5,0,0)) +12 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: { h_taskExecution(user2_supervisor,supervisor,usertask3,fnat(n3,0,0),in_usertask3,out_usertask3),h_taskExecution(user2_supervisor,supervisor,usertask4,fnat(n5,0,0),in_usertask4,out_usertask4) } +13 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: w_parallelgateway4(fnat(n3,0,0),fnat(n5,0,0)) +14 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: w_usertask5(fnat(n9,0,0)) +15 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: authorizeTaskExecution(user1_supervisor,supervisor,usertask5,fnat(n9,0,0)) +16 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } + RULES: h_taskExecution(user1_supervisor,supervisor,usertask5,fnat(n9,0,0),in_usertask5,out_usertask5) +17 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5) } +CLOSED_FINAL_STATE: +{ counter_w_servicetask2(s(0)),counter_w_usertask1(s(0)),counter_w_usertask2(s(0)),counter_w_usertask3(s(0)),counter_w_usertask4(s(0)),counter_w_usertask5(s(0)),counter_w_usertask6(0),counter_w_usertask7(0),counter_w_usertask8(0),counter_w_usertask9(0),done(task(usertask5,fnat(n9,0,0))),initial_state(init_1),aknows(user1_supervisor,in_usertask2),aknows(user1_supervisor,in_usertask5),aknows(user1_supervisor,out_usertask2),aknows(user1_supervisor,out_usertask5),aknows(user2_clerk,in_usertask1),aknows(user2_clerk,out_usertask1),aknows(user2_supervisor,in_usertask3),aknows(user2_supervisor,in_usertask4),aknows(user2_supervisor,out_usertask3),aknows(user2_supervisor,out_usertask4),executed(user1_supervisor,task(usertask2,fnat(n1,0,0))),executed(user1_supervisor,task(usertask5,fnat(n9,0,0))),executed(user2_clerk,task(usertask1,fnat(n0,0,0))),executed(user2_supervisor,task(usertask3,fnat(n3,0,0))),executed(user2_supervisor,task(usertask4,fnat(n5,0,0))),poto(clerk,usertask1),poto(clerk,usertask8),poto(clerk,usertask9),poto(manager,usertask6),poto(manager,usertask7),poto(supervisor,usertask2),poto(supervisor,usertask3),poto(supervisor,usertask4),poto(supervisor,usertask5),user_to_role(user1_clerk,clerk),user_to_role(user1_manager,manager),user_to_role(user1_supervisor,supervisor),user_to_role(user2_clerk,clerk),user_to_role(user2_manager,manager),user_to_role(user2_supervisor,supervisor),canExecute(user1_clerk,clerk,usertask1),canExecute(user1_clerk,clerk,usertask8),canExecute(user1_clerk,clerk,usertask9),canExecute(user1_manager,manager,usertask6),canExecute(user1_manager,manager,usertask7),canExecute(user1_supervisor,supervisor,usertask2),canExecute(user1_supervisor,supervisor,usertask3),canExecute(user1_supervisor,supervisor,usertask4),canExecute(user1_supervisor,supervisor,usertask5),canExecute(user2_clerk,clerk,usertask1),canExecute(user2_clerk,clerk,usertask8),canExecute(user2_clerk,clerk,usertask9),canExecute(user2_manager,manager,usertask6),canExecute(user2_manager,manager,usertask7),canExecute(user2_supervisor,supervisor,usertask2),canExecute(user2_supervisor,supervisor,usertask3),canExecute(user2_supervisor,supervisor,usertask4),canExecute(user2_supervisor,supervisor,usertask5),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_clerk,clerk,usertask8),rbac_ac(user1_clerk,clerk,usertask9),rbac_ac(user1_manager,manager,usertask6),rbac_ac(user1_manager,manager,usertask7),rbac_ac(user1_supervisor,supervisor,usertask2),rbac_ac(user1_supervisor,supervisor,usertask3),rbac_ac(user1_supervisor,supervisor,usertask4),rbac_ac(user1_supervisor,supervisor,usertask5),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_clerk,clerk,usertask8),rbac_ac(user2_clerk,clerk,usertask9),rbac_ac(user2_manager,manager,usertask6),rbac_ac(user2_manager,manager,usertask7),rbac_ac(user2_supervisor,supervisor,usertask2),rbac_ac(user2_supervisor,supervisor,usertask3),rbac_ac(user2_supervisor,supervisor,usertask4),rbac_ac(user2_supervisor,supervisor,usertask5),task_to_data(servicetask2,in_servicetask2,out_servicetask2),task_to_data(usertask1,in_usertask1,out_usertask1),task_to_data(usertask2,in_usertask2,out_usertask2),task_to_data(usertask3,in_usertask3,out_usertask3),task_to_data(usertask4,in_usertask4,out_usertask4),task_to_data(usertask5,in_usertask5,out_usertask5),task_to_data(usertask6,in_usertask6,out_usertask6),task_to_data(usertask7,in_usertask7,out_usertask7),task_to_data(usertask8,in_usertask8,out_usertask8),task_to_data(usertask9,in_usertask9,out_usertask9),sod_securitySod2_2(user2_supervisor,user1_supervisor,fnat(n5,0,0),fnat(n3,0,0),fnat(n9,0,0)) } diff --git a/designer/examples/LoanOrigination/generated/LoanOrigination.sate b/designer/examples/LoanOrigination/generated/LoanOrigination.sate new file mode 100644 index 0000000..2e8db8b --- /dev/null +++ b/designer/examples/LoanOrigination/generated/LoanOrigination.sate @@ -0,0 +1,757 @@ +% SATE OUTPUT + +% SORTS +sort(hc_axiom). +sort(action). +sort(fresh_const). +sort(fresh_nat). +sort(message). +sort(nat). +sort(set). +sort(set_typed). +sort(humanTaskName). +sort(humanTaskName_temp). +sort(humanTaskName_typed). +sort(role). +sort(role_temp). +sort(role_typed). +sort(automatedTaskName). +sort(automatedTaskName_temp). +sort(automatedTaskName_typed). +sort(user). +sort(user_temp). +sort(user_typed). +sort(data_typed). +sort(taskInstance_typed). +sort(fluent). +sort(userORrole). +sort(taskName). +sort(entity). +sort(data). + +% CONSTANTS +constant(initial_state(initial_state_id),fluent). +constant(fpk(fresh_public_key_id,nat,nat),fresh_public_key_typed). +constant(puk(fresh_public_key_typed),fresh_public_key). +constant(fsk(fresh_symmetric_key_id,nat,nat),fresh_symmetric_key_typed). +constant(sk(fresh_symmetric_key_typed),fresh_symmetric_key). +constant(fn(fresh_nonce_id,nat,nat),fresh_nonce_typed). +constant(nonce(fresh_nonce_typed),fresh_nonce). +constant(fmr(fresh_agent_id,nat,nat),fresh_agent_typed). +constant(mr(fresh_agent_typed),fresh_agent). +constant(ff(fresh_function_id,nat,nat),fresh_function_typed). +constant(fu(fresh_function_typed),fresh_function). +constant(fnat(fresh_nat_id,nat,nat),fresh_nat). +constant(fmsg(fresh_message_id,nat,nat),fresh_message). +constant(f_protocol_id_typed(fresh_protocol_id_typed_id,nat,nat),fresh_protocol_id_typed). +constant(pid(fresh_protocol_id_typed),fresh_protocol_id). +constant(fresh(fresh_const),fluent). +constant(s,nat). +constant(0,nat). +constant(mc_pair,data_typed). +constant(task,taskInstance_typed). +constant(start_event_startevent1,fluent). +constant(parallelgateway1_to_usertask3,fluent). +constant(parallelgateway1_to_servicetask2,fluent). +constant(parallelgateway4_to_usertask5,fluent). +constant(exclusivegateway1_to_usertask8,fluent). +constant(exclusivegateway1_to_exclusivegateway2,fluent). +constant(exclusivegateway2_to_usertask9,fluent). +constant(exclusivegateway3_to_parallelgateway1,fluent). +constant(exclusivegateway4_to_usertask7,fluent). +constant(exclusivegateway4_to_exclusivegateway3,fluent). +constant(usertask1,humanTaskName_typed). +constant(usertask2,humanTaskName_typed). +constant(usertask3,humanTaskName_typed). +constant(usertask4,humanTaskName_typed). +constant(usertask5,humanTaskName_typed). +constant(usertask6,humanTaskName_typed). +constant(usertask7,humanTaskName_typed). +constant(usertask8,humanTaskName_typed). +constant(usertask9,humanTaskName_typed). +constant(in_usertask1,set_typed). +constant(out_usertask1,set_typed). +constant(in_usertask2,set_typed). +constant(out_usertask2,set_typed). +constant(in_usertask3,set_typed). +constant(out_usertask3,set_typed). +constant(in_servicetask2,set_typed). +constant(out_servicetask2,set_typed). +constant(in_usertask4,set_typed). +constant(out_usertask4,set_typed). +constant(in_usertask5,set_typed). +constant(out_usertask5,set_typed). +constant(in_usertask6,set_typed). +constant(out_usertask6,set_typed). +constant(in_usertask7,set_typed). +constant(out_usertask7,set_typed). +constant(in_usertask8,set_typed). +constant(out_usertask8,set_typed). +constant(in_usertask9,set_typed). +constant(out_usertask9,set_typed). +constant(manager,role_typed). +constant(supervisor,role_typed). +constant(clerk,role_typed). +constant(servicetask2,automatedTaskName_typed). +constant(user1_manager,user_typed). +constant(user2_manager,user_typed). +constant(user1_supervisor,user_typed). +constant(user2_supervisor,user_typed). +constant(user1_clerk,user_typed). +constant(user2_clerk,user_typed). +constant(mr(agent_typed),agent). +constant(nonce(nonce_typed),nonce). +constant(sk(sk_typed),symmetric_key). +constant(puk(puk_typed),public_key). +constant(private_key_lb(private_key_typed),private_key). +constant(fu(function_typed),function). +constant(pid(protocol_id_typed),protocol_id). +constant(bool_lb(bool_typed),bool). +constant(set_lb(set_typed),set). +constant(ch(channel_typed),channel). +constant(s(nat),nat). +constant(contains(message,set),fluent). +constant(user_to_role(user,role),fluent). +constant(poto(userORrole,taskName),fluent). +constant(task_to_data(taskName,set,set),fluent). +constant(aknows(entity,data),fluent). +constant(mc_pair(data,data),data_typed). +constant(contains(set,data),fluent). +constant(task(taskName,nat),taskInstance_typed). +constant(canExecute(user,role,humanTaskName),fluent). +constant(granted(user,role,taskInstance),fluent). +constant(executed(user,taskInstance),fluent). +constant(ready(taskInstance),fluent). +constant(done(taskInstance),fluent). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(humanTaskName_lb(humanTaskName_typed),humanTaskName_temp). +constant(userORrole_lb(role_temp),role). +constant(userORrole_lb(role_temp),role). +constant(role_lb(role_typed),role_temp). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(automatedTaskName_lb(automatedTaskName_typed),automatedTaskName_temp). +constant(entity_lb(user_temp),user). +constant(entity_lb(user_temp),user). +constant(user_lb(user_typed),user_temp). +constant(init_1,initial_state_id). +constant(counter_w_usertask1(nat),fluent). +constant(counter_w_usertask2(nat),fluent). +constant(counter_w_usertask3(nat),fluent). +constant(counter_w_servicetask2(nat),fluent). +constant(counter_w_usertask4(nat),fluent). +constant(counter_w_usertask5(nat),fluent). +constant(counter_w_usertask6(nat),fluent). +constant(counter_w_usertask7(nat),fluent). +constant(counter_w_usertask8(nat),fluent). +constant(counter_w_usertask9(nat),fluent). +constant(n0,fresh_nat_id). +constant(n1,fresh_nat_id). +constant(n3,fresh_nat_id). +constant(n4,fresh_nat_id). +constant(n5,fresh_nat_id). +constant(n9,fresh_nat_id). +constant(n10,fresh_nat_id). +constant(n12,fresh_nat_id). +constant(n14,fresh_nat_id). +constant(n16,fresh_nat_id). + +% SUPERSORTS +super_sort(puk_typed,fresh_public_key_typed). +super_sort(fresh_const,fresh_public_key). +super_sort(sk_typed,fresh_symmetric_key_typed). +super_sort(fresh_const,fresh_symmetric_key). +super_sort(nonce_typed,fresh_nonce_typed). +super_sort(fresh_const,fresh_nonce). +super_sort(agent_typed,fresh_agent_typed). +super_sort(fresh_const,fresh_agent). +super_sort(function_typed,fresh_function_typed). +super_sort(fresh_const,fresh_function). +super_sort(nat,fresh_nat). +super_sort(fresh_const,fresh_nat). +super_sort(message,fresh_message). +super_sort(fresh_const,fresh_message). +super_sort(protocol_id_typed,fresh_protocol_id_typed). +super_sort(fresh_const,fresh_protocol_id). +super_sort(message,agent). +super_sort(message,nonce). +super_sort(message,symmetric_key). +super_sort(message,public_key). +super_sort(message,private_key). +super_sort(message,function). +super_sort(message,nat). +super_sort(message,protocol_id). +super_sort(message,bool). +super_sort(entity,organization). +super_sort(entity,user). +super_sort(data,object). +super_sort(data,set). +super_sort(userORrole,user). +super_sort(userORrole,role). +super_sort(taskName,automatedTaskName). +super_sort(taskName,humanTaskName). +super_sort(taskName_typed,humanTaskName_temp). +super_sort(userORrole_typed,role_temp). +super_sort(taskName_typed,automatedTaskName_temp). +super_sort(entity_typed,user_temp). + +% INITIAL STATES +facts([initial_state(init_1), + user_to_role(entity_lb(user_lb(user1_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user2_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user1_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user2_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user1_clerk)),userORrole_lb(role_lb(clerk))), + user_to_role(entity_lb(user_lb(user2_clerk)),userORrole_lb(role_lb(clerk))), + start_event_startevent1, + task_to_data(taskName_lb(humanTaskName_lb(usertask1)),set_lb(in_usertask1),set_lb(out_usertask1)), + task_to_data(taskName_lb(humanTaskName_lb(usertask2)),set_lb(in_usertask2),set_lb(out_usertask2)), + task_to_data(taskName_lb(humanTaskName_lb(usertask3)),set_lb(in_usertask3),set_lb(out_usertask3)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask2)),set_lb(in_servicetask2),set_lb(out_servicetask2)), + task_to_data(taskName_lb(humanTaskName_lb(usertask4)),set_lb(in_usertask4),set_lb(out_usertask4)), + task_to_data(taskName_lb(humanTaskName_lb(usertask5)),set_lb(in_usertask5),set_lb(out_usertask5)), + task_to_data(taskName_lb(humanTaskName_lb(usertask6)),set_lb(in_usertask6),set_lb(out_usertask6)), + task_to_data(taskName_lb(humanTaskName_lb(usertask7)),set_lb(in_usertask7),set_lb(out_usertask7)), + task_to_data(taskName_lb(humanTaskName_lb(usertask8)),set_lb(in_usertask8),set_lb(out_usertask8)), + task_to_data(taskName_lb(humanTaskName_lb(usertask9)),set_lb(in_usertask9),set_lb(out_usertask9)), + counter_w_usertask1(0), + counter_w_usertask2(0), + counter_w_usertask3(0), + counter_w_servicetask2(0), + counter_w_usertask4(0), + counter_w_usertask5(0), + counter_w_usertask6(0), + counter_w_usertask7(0), + counter_w_usertask8(0), + counter_w_usertask9(0)]). + + +% RULES +constant(sc_authorizeTaskExecution_1(user_typed,role_typed,humanTaskName_typed,nat),action). +action(sc_authorizeTaskExecution_1(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_h_taskExecution_1(user_typed,role_typed,humanTaskName_typed,nat,set_typed,set_typed),action). +action(sc_h_taskExecution_1(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_atask_execution_1(automatedTaskName_typed,nat,set_typed,set_typed),action). +action(sc_atask_execution_1(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +constant(sc_w_usertask1_1(nat),action). +action(sc_w_usertask1_1(Xvar), + true, + [start_event_startevent1, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent1, + counter_w_usertask1(Xvar)]). + +constant(sc_w_usertask2_1(nat,nat),action). +action(sc_w_usertask2_1(N2,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n1,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_usertask2(Xvar)]). + +constant(sc_w_parallelgateway1_1,action). +action(sc_w_parallelgateway1_1, + true, + [exclusivegateway3_to_parallelgateway1], + [parallelgateway1_to_usertask3, + parallelgateway1_to_servicetask2], + [exclusivegateway3_to_parallelgateway1]). + +constant(sc_w_usertask3_1(nat),action). +action(sc_w_usertask3_1(Xvar), + true, + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n3,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)]). + +constant(sc_w_servicetask2_1(nat),action). +action(sc_w_servicetask2_1(Xvar), + true, + [parallelgateway1_to_servicetask2, + counter_w_servicetask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),fnat(n4,Xvar,0)))), + counter_w_servicetask2(s(Xvar))], + [parallelgateway1_to_servicetask2, + counter_w_servicetask2(Xvar)]). + +constant(sc_w_usertask4_1(nat,nat),action). +action(sc_w_usertask4_1(N6,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N6))), + counter_w_usertask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),fnat(n5,Xvar,0)))), + counter_w_usertask4(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N6))), + counter_w_usertask4(Xvar)]). + +constant(sc_w_parallelgateway4_1(nat,nat),action). +action(sc_w_parallelgateway4_1(N7,N8), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N7))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N8)))], + [parallelgateway4_to_usertask5], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N7))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N8)))]). + +constant(sc_w_usertask5_1(nat),action). +action(sc_w_usertask5_1(Xvar), + true, + [parallelgateway4_to_usertask5, + counter_w_usertask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),fnat(n9,Xvar,0)))), + counter_w_usertask5(s(Xvar))], + [parallelgateway4_to_usertask5, + counter_w_usertask5(Xvar)]). + +constant(sc_w_usertask6_1(nat,nat),action). +action(sc_w_usertask6_1(N11,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N11))), + counter_w_usertask6(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),fnat(n10,Xvar,0)))), + counter_w_usertask6(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N11))), + counter_w_usertask6(Xvar)]). + +constant(sc_w_usertask7_1(nat),action). +action(sc_w_usertask7_1(Xvar), + true, + [exclusivegateway4_to_usertask7, + counter_w_usertask7(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),fnat(n12,Xvar,0)))), + counter_w_usertask7(s(Xvar))], + [exclusivegateway4_to_usertask7, + counter_w_usertask7(Xvar)]). + +constant(sc_exclusivegateway1_branch1_1(nat),action). +action(sc_exclusivegateway1_branch1_1(N13), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))], + [exclusivegateway1_to_usertask8], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))]). + +constant(sc_exclusivegateway1_branch2_1(nat),action). +action(sc_exclusivegateway1_branch2_1(N13), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))], + [exclusivegateway1_to_exclusivegateway2], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))]). + +constant(sc_w_usertask8_1(nat),action). +action(sc_w_usertask8_1(Xvar), + true, + [exclusivegateway1_to_usertask8, + counter_w_usertask8(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),fnat(n14,Xvar,0)))), + counter_w_usertask8(s(Xvar))], + [exclusivegateway1_to_usertask8, + counter_w_usertask8(Xvar)]). + +constant(sc_exclusivegateway2_branch1_1(nat),action). +action(sc_exclusivegateway2_branch1_1(N15), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N15)))], + [exclusivegateway2_to_usertask9], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N15)))]). + +constant(sc_exclusivegateway2_branch2_1,action). +action(sc_exclusivegateway2_branch2_1, + true, + [exclusivegateway1_to_exclusivegateway2], + [exclusivegateway2_to_usertask9], + [exclusivegateway1_to_exclusivegateway2]). + +constant(sc_w_usertask9_1(nat),action). +action(sc_w_usertask9_1(Xvar), + true, + [exclusivegateway2_to_usertask9, + counter_w_usertask9(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),fnat(n16,Xvar,0)))), + counter_w_usertask9(s(Xvar))], + [exclusivegateway2_to_usertask9, + counter_w_usertask9(Xvar)]). + +constant(sc_exclusivegateway3_branch1_1(nat),action). +action(sc_exclusivegateway3_branch1_1(N41), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N41)))], + [exclusivegateway3_to_parallelgateway1], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N41)))]). + +constant(sc_exclusivegateway3_branch2_1,action). +action(sc_exclusivegateway3_branch2_1, + true, + [exclusivegateway4_to_exclusivegateway3], + [exclusivegateway3_to_parallelgateway1], + [exclusivegateway4_to_exclusivegateway3]). + +constant(sc_exclusivegateway4_branch1_1(nat),action). +action(sc_exclusivegateway4_branch1_1(N42), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))], + [exclusivegateway4_to_usertask7], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))]). + +constant(sc_exclusivegateway4_branch2_1(nat),action). +action(sc_exclusivegateway4_branch2_1(N42), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))], + [exclusivegateway4_to_exclusivegateway3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))]). + + +% CONSTRAINTS + +% GOALS +goal(sod_securitySod1_1(U0,N17,N18,N19),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N17))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N18))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N19)))]). + +goal(sod_securitySod1_2(U0,U1,N20,N21,N22),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N20))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N21))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N22)))]). + +goal(sod_securitySod1_3(U0,U1,N23,N24,N25),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N23))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N24))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N25)))]). + +goal(sod_securitySod1_4(U0,U1,N26,N27,N28),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N26))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N27))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N28)))]). + +goal(sod_securitySod2_1(U0,N29,N30,N31),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N29))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N30))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N31)))]). + +goal(sod_securitySod2_2(U0,U1,N32,N33,N34),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N32))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N33))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N34)))]). + +goal(sod_securitySod2_3(U0,U1,N35,N36,N37),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N35))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N36))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N37)))]). + +goal(sod_securitySod2_4(U0,U1,N38,N39,N40),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N38))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N39))), + executed(entity_lb(user_lb(U1)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N40)))]). + + +% EQUATIONS + +% USER_AXIOMS + +% HC_AXIOMS +constant(rbac_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(rbac_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(direct_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(direct_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(entity_lb(user_lb(A)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(poto_usertask1,hc_axiom). +hc_axiom(poto_usertask1, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask1)))]). + +constant(poto_usertask2,hc_axiom). +hc_axiom(poto_usertask2, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask2)))]). + +constant(poto_usertask3,hc_axiom). +hc_axiom(poto_usertask3, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask3)))]). + +constant(poto_usertask4,hc_axiom). +hc_axiom(poto_usertask4, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask4)))]). + +constant(poto_usertask5,hc_axiom). +hc_axiom(poto_usertask5, + true, + [], + [poto(userORrole_lb(role_lb(supervisor)),taskName_lb(humanTaskName_lb(usertask5)))]). + +constant(poto_usertask6,hc_axiom). +hc_axiom(poto_usertask6, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask6)))]). + +constant(poto_usertask7,hc_axiom). +hc_axiom(poto_usertask7, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask7)))]). + +constant(poto_usertask8,hc_axiom). +hc_axiom(poto_usertask8, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask8)))]). + +constant(poto_usertask9,hc_axiom). +hc_axiom(poto_usertask9, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask9)))]). + + + +% INVOKED DURING THE LOADING (USEFUL FOR SETTING) +init_sate :- + set(verification_abstraction,off), + set(if2sate_version,2). + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% NOTE: these prolog facts are not mandatory and are useful only for +% printing a user-friendly output when the triple_step optimization +% is enabled. The user is invited to neglect these declarations. +triple_step_action(authorizeTaskExecution(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(h_taskExecution(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(atask_execution(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +triple_step_action(w_usertask1(Xvar), + true, + [start_event_startevent1, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent1, + counter_w_usertask1(Xvar)]). + +triple_step_action(w_usertask2(N2,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n1,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N2))), + counter_w_usertask2(Xvar)]). + +triple_step_action(w_parallelgateway1, + true, + [exclusivegateway3_to_parallelgateway1], + [parallelgateway1_to_usertask3, + parallelgateway1_to_servicetask2], + [exclusivegateway3_to_parallelgateway1]). + +triple_step_action(w_usertask3(Xvar), + true, + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n3,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)]). + +triple_step_action(w_servicetask2(Xvar), + true, + [parallelgateway1_to_servicetask2, + counter_w_servicetask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),fnat(n4,Xvar,0)))), + counter_w_servicetask2(s(Xvar))], + [parallelgateway1_to_servicetask2, + counter_w_servicetask2(Xvar)]). + +triple_step_action(w_usertask4(N6,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N6))), + counter_w_usertask4(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),fnat(n5,Xvar,0)))), + counter_w_usertask4(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask2)),N6))), + counter_w_usertask4(Xvar)]). + +triple_step_action(w_parallelgateway4(N7,N8), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N7))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N8)))], + [parallelgateway4_to_usertask5], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N7))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask4)),N8)))]). + +triple_step_action(w_usertask5(Xvar), + true, + [parallelgateway4_to_usertask5, + counter_w_usertask5(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),fnat(n9,Xvar,0)))), + counter_w_usertask5(s(Xvar))], + [parallelgateway4_to_usertask5, + counter_w_usertask5(Xvar)]). + +triple_step_action(w_usertask6(N11,Xvar), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N11))), + counter_w_usertask6(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),fnat(n10,Xvar,0)))), + counter_w_usertask6(s(Xvar))], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask5)),N11))), + counter_w_usertask6(Xvar)]). + +triple_step_action(w_usertask7(Xvar), + true, + [exclusivegateway4_to_usertask7, + counter_w_usertask7(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),fnat(n12,Xvar,0)))), + counter_w_usertask7(s(Xvar))], + [exclusivegateway4_to_usertask7, + counter_w_usertask7(Xvar)]). + +triple_step_action(exclusivegateway1_branch1(N13), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))], + [exclusivegateway1_to_usertask8], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))]). + +triple_step_action(exclusivegateway1_branch2(N13), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))], + [exclusivegateway1_to_exclusivegateway2], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask7)),N13)))]). + +triple_step_action(w_usertask8(Xvar), + true, + [exclusivegateway1_to_usertask8, + counter_w_usertask8(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),fnat(n14,Xvar,0)))), + counter_w_usertask8(s(Xvar))], + [exclusivegateway1_to_usertask8, + counter_w_usertask8(Xvar)]). + +triple_step_action(exclusivegateway2_branch1(N15), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N15)))], + [exclusivegateway2_to_usertask9], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask8)),N15)))]). + +triple_step_action(exclusivegateway2_branch2, + true, + [exclusivegateway1_to_exclusivegateway2], + [exclusivegateway2_to_usertask9], + [exclusivegateway1_to_exclusivegateway2]). + +triple_step_action(w_usertask9(Xvar), + true, + [exclusivegateway2_to_usertask9, + counter_w_usertask9(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask9)),fnat(n16,Xvar,0)))), + counter_w_usertask9(s(Xvar))], + [exclusivegateway2_to_usertask9, + counter_w_usertask9(Xvar)]). + +triple_step_action(exclusivegateway3_branch1(N41), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N41)))], + [exclusivegateway3_to_parallelgateway1], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N41)))]). + +triple_step_action(exclusivegateway3_branch2, + true, + [exclusivegateway4_to_exclusivegateway3], + [exclusivegateway3_to_parallelgateway1], + [exclusivegateway4_to_exclusivegateway3]). + +triple_step_action(exclusivegateway4_branch1(N42), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))], + [exclusivegateway4_to_usertask7], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))]). + +triple_step_action(exclusivegateway4_branch2(N42), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))], + [exclusivegateway4_to_exclusivegateway3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask6)),N42)))]). + +correspondence_between_action_and_step_compressed_rule(Act,SCAct) :- + atom_concat('sc_',Act,TmpAct), + atom_concat(TmpAct,_,SCAct). + +% PREDICATE TO EVALUATE ON_THE_FLY_CONDITIONS +on_the_fly_conditions([]). +on_the_fly_conditions([C|Cs]) :- + call(C), + on_the_fly_conditions(Cs). diff --git a/designer/examples/OrderPlacement/.access^ b/designer/examples/OrderPlacement/.access^ new file mode 100644 index 0000000..e69de29 diff --git a/designer/examples/OrderPlacement/OrderPlacementProcess.activiti b/designer/examples/OrderPlacement/OrderPlacementProcess.activiti new file mode 100644 index 0000000..3aecd89 --- /dev/null +++ b/designer/examples/OrderPlacement/OrderPlacementProcess.activiti @@ -0,0 +1,625 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/OrderPlacement/OrderPlacementProcess.bpmn20.xml b/designer/examples/OrderPlacement/OrderPlacementProcess.bpmn20.xml new file mode 100644 index 0000000..f2f0773 --- /dev/null +++ b/designer/examples/OrderPlacement/OrderPlacementProcess.bpmn20.xml @@ -0,0 +1,121 @@ + + + + Place documentation for the 'OrderPlacementProcess' process here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designer/examples/OrderPlacement/OrderPlacementProcess.png b/designer/examples/OrderPlacement/OrderPlacementProcess.png new file mode 100644 index 0000000000000000000000000000000000000000..7547f6190823f6b0ece684fcdaf1a4b7dfc65a75 GIT binary patch literal 16036 zcmeHucT`hZ+b_x}j;P?Eq9EXm1qX##DAG|B#7Gq>0fKFV2$L??rPtW4*Yu)K~`@_>4GXhV-N|tteB;PPRb^EyU%cj|MCrc&V zbpr_4!Kl*y;MZRT9b22CbqUd>@9dr3Zpar}-7vndSZ+V;y&{M2WYr{%b#!#JiFLg8 znyYq~9or{ZEbDG z?Qa%bIwh~5U|0N&=YmpS&a$McDEMX4;^JaC-s6DktJt_WJ5%Vg6a(SZl^?=lATREd zdUtE$E?Cpm-o9}I#B=Di$UCT;t7{)U5Hi^?&(E{$77~J4l<;*%Dygbs;3Tzx{U4lw zh40(j+uPdyraN1ryp!iqIiyC-$yuqDS^*PiRgqR4S`EtxE8p&WGQa_e#-AQHhVu1%tuBT45sZk_(E9vz;x%_wMSm zv|7IFyzk@rma+3NoBj!ka914Yc{`~n6hUY9O{`qa0DMoeE0 zReNsfnV3L-Eg~o`Fdz#vGC$N=Ai)Z>3Op9B>fTbFrbVrDyvTF?)a5rVjd}*b(zMeR z@MFfvgz~#`VlVr}B&su0l^Hh8p6IDP7~?#1yMFuBNRF%G*GN0!;=5V<)Nofa=h&OC zVLXN{x9=w;BtWdJkfZ!zDfjz}KJgcw+WG7z_e{*W6AEMNNNHSOQizv&_l?O6 z1hlF_>{*UG^JSC#-{qv@8B_wgs_IycFppsP>evq35^l6k;O-CQr>=&X72xhir|dW@ zts{8i$Q&sCqa)8P@Gn0-Yh;4YkdKA+ME~^9>;FjRA0znZc>LoD{_>FwTS_#PG1BYPe&TuLc6+jCj)zsD=uW{Ljl(}mkR5%39 z^&P=YbSI$8<7&*CDK6kv&HKq^d4@L2e~^&|DdaBeZ+Lr!Gx>1~{H#?PX=LQpsN7R6 z8ZEejUBQuVpXZ~QE&3uFtOj$eQbr^73tNl(atzFNZaK!n&^dJIoLq5$Ziew%zcr_S zeSLi>+4eo9T5ELiicYqXd`qU*ikj40B+ph@;e!YECeCJ0C=mVaGL3Rg@;z8FzW1D+ zoqc_MVK6CbraH$T57u^-e%VKTs>xnAX9`9 zi^6kqum&|(clVC=b}<$I1u{)7gfU`XSf$FUckE4id!VDKNvmP-nYiMx+nMqw3PN?BEH_P2Q1!@7EU#DKx<&J^VgdsOE}<4iG*%UoGmF#`#ydX^GS z0H1ymtaxI(`Ki=^^`*N~@18}eDJYnNZxlO?5>!`1$5d(Sjt8xO|M9Zx2)_Or5^^^7 z0GKb+mXle=JSzzQf)J|k?cA=AgZOJf&vFc3*7w+u zKe!g)ykEy=(SX`vzILuCH#e8v+6O~Ha*eU9Hf9waA>|l(UQ4ws-Xvh=$Kpm?ln~PH4%%wdQMTkPR$sm!*?wTd7m7(*$E`p z^+rTa(%Cs-ARRbW&OQkyAN@$2s-Ss}EhdBuiX?fq7M7Kju^7~vv8STrq2B&p;Se~m z6zVe=2L-T8$pV*Lh|GouFc-J0JA> zdfmAe8fo=MdxZKgsu!<21B5qBPTqGfHndKfohtamD^sq0zC5w_kRI&CqwQH0DA(UZ{M(7WDR7jrnpue78$OO2?j0-mhkRc39;Y)+_l^%pebdBO&Zp zpl1QAlf5dg7F-D_oF3>e*eSPh$%ljuQ4gMv_nNWJLCb!r_5M}S%Vy4W2IS6R%`|Ux zs^E51ZN(>eUyzu%Uzj~IpgSJJ{w+)$e6-r!fq(P z@yUxT8yBeT5=VBqo4f|Nw+FcY`pNr{Bl#w{w_Ij)u`^6kQj%6V5vf9QvROW)K;Ms& zJrA!OdzzVY~IMdF@ zM^5!5bulAv7N{>Fy$3!CyuEexGU-!da`I?UIR5KPa=PIBMtUH~z^kxckt7d)RYgNP6*xy7$sB;475wvmP70FUS?(*jWYm87W zPdq$3n}`uD$-ZoRUd$sda`}+AyL%BQxreldB)M{b>M9=vP6(fXxa+W&gM(JzC;l64 z!S(Y)C3Zno4QNazSVLs&*J?aGJV8ID$o_4+78nt{Zo8B*JFxLyjdjbDHaI}^p!%q< z3J}+xh9GEB+(~_FooL~XQ=sJG>WL6Z?0_f92=y@Ot5SdKu;6|`C$oS~%Jbn2CqO4Z zO1!UIDgpKmA*ykPnnO9uLi*l6$2cO^MkI)#EG~zYNHS0jSehg%Yvvx3q3^Ge-2*6& z&+NkhpPWd5p`d zdaduq$td-Oc1i5=cQkjlTN1alFkv0Cro5`Ylq^K@XLsL01hEj9xkn127XnR=5?#x+ zH`VQ(`LIj8r^`L|@N_%8Y@gvLVY=;a5HqFp^I|JeCe95jlI}Hb!r8^C9LmPc{NART zT(zY*;^DJ&WEitKd4H`&Av!9AGAMlH$nKub$X&3IgF5HN7?)7c4+C-UkALff$TJPS zSSV}OS2F?b3ZGh+XR{Hia@*8iZSLLFk z9@#1toAsp>PQo%hdUB5S72KOVe437YD$8JUr22@2UQ&p|2A2~=yC1g`Rg`(#O~zpE zT3jy5bvbDO{?dQ@JVB)PP}BIS4x{zK&CgBC?}3&Yua|%Fp2T?rAcVqifqt|P@@Uyg z5pB^vg7mA}Yxl9;ug~NGP|hwXgE=a5u9!5@&j!@7E(~?$)-Yl(p)eX^`5eQmkP8v5 zy%xhi>I6`s76n4)*@23pM5C)t0;Wz1gvE`tznYumz`0JPN+-(MHy+3BZ1ros_ zuuG`+Xh8<=i_R@Yrq-U1IgHQ<;u`+8*39$gZ13m{9-I?zDC&>-V8Tz z1>GsGp3MVX+2|Bm=7x{7C`V%sJ%!jddMF@No1du;s?Zh^tKp?6MbqQrLFw~iiXbs^ zaFPDXrdja$|B~pyX4>=$b$sa%)QT4IxtEolT{erpijuX@dS1p!%kQ7fhpyxWPU0A- z;t&>rL^R^AtnGh6wTDIRg5d(HgAA=&wMc_ZH^tN~SFq>p-fJ}mX_z>`6I@xm)`l^x z-a2S1agp943J$Cf#OrS5vIVo+P%A63Wm%iP97Db{UFZ&3bouU^Wp>Tl@Z9~-)#|~J zwR(vn>qXL_!dZuRxyna!LZ-;`n>@NXaVoARZ|-FtaBEkZm_m6Xl{1^Ds#p7^17ov& zs)5a9GBA~uW~o$iu=rX4rCkAzIN>#5U3B#kz+;b;$M=n~zD1P}9{aUGJ;}WVBdqNG z2dAT_r+(ebP+D}qis(uQpwL@)0oguF8?`-Q zN}_m-?|(4Ae{@@+Ro>nb)cOd4K}5}J6rJk-!c2W_zru*%{WBM@_2uwhzIbtQFiKT^ z!QWk7;K$kzxPQHv&iwP6K;z=&yamr&qv z2-+?l0y5}rp0%&6KGaW+FGpn!X_?5_neq|TY(*K4onWqfwevG zW{jS0`*Kl|lF$#@pol>AT<$fU_rLMRocTB{@caJm`I?RJxndlala?Ado4Z_#2n?(? z%5CfH^iyf2K(l<$8vrUS%>>8eO~dh+oFe-S$MR5uS?XZ;>N(&9c1hm7Z?!x4Ciuz4 zG_e!qz4q$)A9c!%;>J%E-W26q&z2)skyF_%sUL5^O|W||E;7G~Ssj|SO3oKi;5SvVSZuy{0sl$(b8@k-lo6bOOakuz%z0Z~p3Xl;S z)eZs@7PbD31qOjHR4Os$)S!TxqT;a!Y8QX$%XxHY*^@+KO-lAY68M;E^{uaAmanyC=Ma8KHrEz8jBEtbFmum{ z*om|!8GL~+e*CuE|APohTeSm&Jp*mH0O|lFyQj?Ca#&AH^})J*t^1g%J4@WbyO&&vm9Sw6FjY<1%Kv!Kdgm7tV`LnVkqvQ3^fV ze*5L9pPF|tsM94Pmj1lp4kihyk^70zMbx~$dg$v7frUyrSPx-jE@b?M0DT+?R4-Li z4|_udBR7`J0)zCy*T)84gr64!yvIsFiXN*;MZy@YSsc1heog!j=j!V0On#(5ys{wT z69!M0FP|aLr(Wg)UMN=Igb1X*gMK8vL8FdL3H@ZKicd9mQ8S`~n@HDe?xi-XmxmO2 z(8n3>{4^MTX^OfbSSXS0HWMk}J!TuouvA`q7ljI$#K&qjy98An|Kz-ZQCVc`-%p;M zavcIcv3ly;{LKBuFfYF~kw~2u5Uc*pSQw4CeX=C<_4H6}u(E31cwKmw=Hc_7=>k+= zaIHU2J*A7UeKWg5{2NBt1) zVcDffkhbo-v6oXr8Ef(IWp)pXq&}3R_p%y$+=dO5{5XzpGy(u(!))J5A=zrPnC%99d`*R$kK*W za1non^C5dDM=fvZ(hA#(gMLWq6;ZeF5s^gG-L7|Bk4SxfX^?S7xg7&N15K-|{rU$p z?Q>cun|gVQi+@HUip^AIq|Xbdj^s)AX5RDH+s(jw1I}#Ft}1j%F{f;JdATxl2*6A> zW3th&mq^csM@DM7%sIZ5F`bn;NqzOj>mP^=i>&F_?_7p|z4B+DG5a{$65I4$G$gY?+d6`qXPc zQG@>Q!YN7KAZw)_`cM=4{bqKw+fzP>#1W89DfpZwe4{1!qyx|)lfJXcU1@ec!p>a9 zsjChO;0ajl@}-DPhoMiwCUcW{`9f!m_j0Mqj%o&h zB>dHciou>9;W_2L9;0ktU&@0G>G7>Iv)?)QQ)}1!(G$8Jek@z+PmAAJ18`Z1 zyeU(vfbn}CkRCGOekW#LsQ8l&wC&|{r;@?4hcaKxNIg@>KlCQtS%?V-&JjO9|H=b# z2?-J_uIuAWJu-cDVXU4vN%YmHo%Yy+F%HFmRWYzEi6Nhx*)xmIX`_I`&haW@ zx_?P*$5juBKfm$w!nOV!9flu69+KuT8oAdWaIuVFlLxsdKD!VwOHsqlCKp~%EUxK! z=|WEC1kf+c$&N0s9cfLJ>BKGAPS6kaYVKc{P(S9@_zh5&m)GU?VCTB|)dp4M%%%&T z6W%v7KoG+%UqWxHE1NMeU%PDnyEDGh(WRBqgK&o?(xh$JNbx9v{7v zZ&*Cye*=jpny zeY-pfMFhYDs`b4$u~`Uz7IhOwASz0GSdF*J0FcT-Lsk9M(DCPHTSO-ez|Zwr+PNK?x(E?&!7`7$CKM^YGI5gz)gOd#Jr^%Ta24HOz1W0mk zz3gvkX^E{a2eQbvwh@nJF`}|P?db`+p*&e+butDKusCi9EcJeSsY$>JG7jOXzd=KU z>Huk_IgpQ1GkKLRh5Vibzy=!_&*sL-Vib{p9^?iC69NqIU_21Y5Bq+8!g%(?x2CG9 zYRKx|Pv%Nmq2w@MnDO2jAhn>=B_gp{0aI4nxa5mqU$aRp@}unm07$`fxih{$5{N`1 z50CYdH!ZFks`TNcoYa#tELQE}A{}HZQT<*eZ)M2AA=D!vK#>8CYdNf~cy1bye>YG^ z4_bQZDlMupyQ6?9fsCe}i+C`fw{Zjg=#}cJg~rK52#AW1;badFlZQYMg~s#oT4pwU zmQGP-P71-ZcT)2ZPTvwq?CG6Q$Bs{BThOBU-av89mb>}=xw(F+R~AVzlcJE-iV_c6 zLqjLrohZz@F_-n}bZ?FnWzz)ssnzZ6?M>*DP@n$0gI0c46!D9&^I|8fyfuV(sYZnZ z4f&Q9bWx$SWQ&e;erE1jT|$07&@=a>e%M-M30TB%FSQy7fz!0q%IO4`Bf`RVelHB| z$VV}mywzvt1NJ3d@%T;mW^*Jb@l?Qd7kF!HYSR0hf+8+@2-Mf{!txUGX(g#k^ThX8|R-Wq;4 z)T6?U1B)&ztQIq98!YOEh4nQS!%9_|g_ZraG1Q!S!DKDkxnW-`z@$U{QGD)Z%~_1# z%$7&FcN3X-${|#&7_iJEw}9 z&C4&UnXkTpd9);w<-K!X?wFF7*bacYr%vN?eyC!1fl0+_MFX*O^+~L*63J0Sn|2%@ zm6*Dz@|~;%mm+gZ%j3Zt9~z#XN#?0{dDda6{b+~e3!8XH%6hcr+DkqE1NF1F4eNUO~ij?Ayx3bBYf- zE%pOuu~Li($ut5&h;=oAo1lPQM8b@Zei*wc`Po1;_VVBxo6pZ}&CWnO$IR#{10o~v5EyRx!YDVA!udeV;+Fo@ZNS^=EX4!v9v#dz{%n{69KFR^3WDxp?O z5x_`1H*y>b>tkg21T;iOz=${u7^Bh)b@!tHlQ|)(0Lv}a-C$(G%K5OX2O$~{O8q-F z#WvXB5&$X*Y5f4}`&hU{HY=E4>yqY-ln5xt)<|pr$TVsf$(LbyQyg2b;;o;^Ji0t2 zjajY85clI{o-Pmjet&V(zAh|2H8!Dsi`;kUr{Dhl$G0Lrga7f{Sy3fBeS(RWDj*b8G>IsxB{=RaRD(le?R1-1JQIa~iy5#pC z-@z!tj&VK%ffBR^1hdzHFP-Q67n9IXnj^zc6b=(?zWzZUj#fr10X7%4lia);huefCXhA$XE zL`^7|N@)wN!OSp~47l5R#Mtv10Bb-B1 zUh~sg>U%QTS2bzj7!6O-5f2<=*Uezp;yT%rU&>lG3eO0b#IT^Zut39`wW=COAB(yU z63!?uRu8uI^t=RAPWiTaDtns$6~N1E53K#$3`MN((vwpGi?&NK^p>cOGoaHgI1bgK z8M?w0B`VO{swT;oTY8I6&Gk<%uTSc4%!;DWM%L$Tg2ozWnwp#KaNZcH>4rxS{tE6u z)kGtpX%U^OUh{1J6=3~L{+4)t3!D4#$Y*Rk@TWEjla|+ucijb-flJhZed3-w!25dS|wFw)zgzv$2b6F zp&L^I+#h}$bO{v>2D#kqB^*Y#Z@O|$Rr(LI0VIe(4=m*@4zZxnY|!20-G z%0Q<{h+h@sPC0fa#rw}$G&ez2<>k5I0;7Gw%@N|EA2+8a{`*pABqjAzRDcQMLYU9A zzDQwcAq&P5iMxJMS4~Gu4wFnxwUn%u@o?TUL_K{ z@Hp+{c6yn)3kJz*n!k}BtK{{6)~zqh(W1HoR|A02G+)pO)B0ahE_iPzpJjiJo;%&m zH$?P}gi;69E)6_FaKZ)3M@o#{%<5*GbSY4cqNk@-Y<_HKu!vpkp^p$G6X=fvv;#v` zP;>L=qx@g{KRuS*C$^ok!fkBEfNpU~kjIlkk(JHvHo@RAQ2l6S8vXtqy>!h$^I*z_ zSKBn;${{yho|bz)8-3FXlbbDr;M~sEWruA@?o>SbV&SpPsV#Aw1+w^|mtgZZ~)LEIAk?S5IF*TLEB+SG8+%)&z%N_9+e;jZkNgF`F?1us&Qb zu>ZbPZzbvT=RfwgoW{Pj+)*#2^=PXA;Qy`gu&IejkBAQp20L%PqFwu7EC_(+u8fsc zR|istN&tUXuB7TY`Ak6P;rL_8S4X$B64xwBTzINwrF198BpYbR=(vekRxZ36fV&v4 zb!U#gPffLkLOW(U6Vuk3?knuk+@kpOn^>6@TL)X)@vbyYG7h*8f+R({_2-cKnQnD_ zd%^zKw#ydK^X!yBSa5LgpPf&1Ex{z;Fm>QRUW)<{LZBTRY5fM0Z@6JHhyGdO?D?^u zx2vP1`vP*ai<)+PN3g%34A|f5!oi5Q0Y9SrM(AB0a#C*}E(tL^lcQOM9?rz+jQ0=6mEpXmd zqPl*?C{RDFPjA#I^cjO!-Y+-xOz;Qb#BNuN9??{hmFJ;&tB9r|@9%zknFRffj&LUO zrGDRwdXO*4b8OAE@assm)wvTOxa)d}mqLO7YBYa%Lae5nEeNy&RP~B=*E9gv_(w^4 ziXb;jR>Pab`#JW;1_>Xi^%`3y^JlAv-Yf96a{)sH9b6R`7VoSmyL03VrFsc|;&@`A zFYB`_KGK>v^X;VNVkKY&^MxDlV?Piu--4fsSNG`){ktk#e35~9s}&EvH%&;3Mv*G- zO1K{mQh+iae^f?S_z|OzJSO<5pcXo)ph(5gb*H$z_N+%ya$;jId^@LTDbDN)x@Il? zb2vDv$Mf^KRT}1R68^X$B3FhI4yuvfc$)tAC-VDcpuxdB)MdEDl?6g}4g6Tzf0Lv# z1oz*h0l?7zNk7xAko322jQ|W9gkygNpzt0h>~9tYq>?GYOCS(5`1V}>-ze%^US8gS zR!!J04MJ#Cf(t_J;>Ck30Q`*^J+X}-!~jE=Lu__LhG|HBzgpSa^G&!Hm|%^k?Ed52 z^)Z=D04c>;hWxNy${Darj9+gA4(i`us?M-DV0{~#yVAp*=|KP(c_b%&M?Byuwo!<_ z{~h|ud#T0!5BS0v$n6r7g6Hsf&*-GSQV8TjRwH|MHrozosi9CR`iDU#Bm?-V^qnX% zmV(aGvjJjkoVwygLvt$*yu|wKJ-&av2LXVx_4TUU+_@vd8=R&l;pj;lH!pfC7`)-( z%lO{bW*n%@0RKd}?fd8t*P#tu&hzrxfNgMb>PgpC26*bN8;@Q^*z+IU}K;S&83o|}Z38(~ci(B8Ao0|hsHS*6V zn}Vf?d(`#{cI{ z(4!&9R^gywFJV5?-Rx^(wNo-yDM75_z~P-521hJ;j(Ys-lEmo|8D`8%Fu`RomVj~H zaY8mpSgW3#)MtY-{Las3=Zx-F z48EYggEe!M#R~(#K~;%9ZP2m<2f)eZtqj4rUzot0QVx*ug>0<}HMv0QIto z(^#>nF07+9fT610S4A{rwDgpcb-wHw5<> zTFmvyZ6UCFL-={Fnm^bP=4tp~=b?Bx5uUTca#9*^%rpMSUarnJUTb@t`}Xq_wc^}N=+a} literal 0 HcmV?d00001 diff --git a/designer/examples/TravelApproval/ResultSender.java b/designer/examples/TravelApproval/ResultSender.java new file mode 100644 index 0000000..3070200 --- /dev/null +++ b/designer/examples/TravelApproval/ResultSender.java @@ -0,0 +1,27 @@ +package com.mycompany.bpmn; + +import org.activiti.engine.delegate.JavaDelegate; +import org.activiti.engine.delegate.DelegateExecution; + +import com.mycompany.backend.DBConnection; +import com.mycompany.backend.DBManager; +import com.mycompany.backend.DBConstants; + +public class ResultSender implements JavaDelegate { + + public void execute(DelegateExecution execution) throws Exception { + + DBConnection connection = DBManager.getDBConnection(); + + String userID = (String) execution.getVariable("user_id"); + String userName = (String) execution.getVariable("user_name"); + Double userWage = (Double) execution.getVariable("user_wage"); + Double travelBudget = (Double) execution.getVariable("travel_budget"); + Integer travelDuration = (Integer) execution.getVariable("travel_duration"); + String approvingManagerID1 = (String) execution.getVariable("manager_id_first"); + String approvingManagerID2 = (String) execution.getVariable("manager_id_second"); + + connection.save(DBConstants.TRAVEL_TABLE, userID, userName, userWage, travelBudget, travelDuration, approvingManagerID1, approvingManagerID2); + } + +} diff --git a/designer/examples/TravelApproval/TravelApproval.activiti b/designer/examples/TravelApproval/TravelApproval.activiti new file mode 100644 index 0000000..d00437b --- /dev/null +++ b/designer/examples/TravelApproval/TravelApproval.activiti @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/TravelApproval/TravelApproval.png b/designer/examples/TravelApproval/TravelApproval.png new file mode 100644 index 0000000000000000000000000000000000000000..100f829c508f0852cdccdb4cb683107938f2cd60 GIT binary patch literal 33651 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 literal 0 HcmV?d00001 diff --git a/designer/examples/TravelApproval/generated/TravelApproval.aslan b/designer/examples/TravelApproval/generated/TravelApproval.aslan new file mode 100644 index 0000000..f1d8533 --- /dev/null +++ b/designer/examples/TravelApproval/generated/TravelApproval.aslan @@ -0,0 +1,74 @@ +section signature: + + user_to_role : user * role -> fact + poto : userORrole * taskName -> fact + task_to_data : taskName * set * set -> fact + aknows : entity * data -> fact + mc_pair : data * data -> data + contains : set * data -> fact + task : taskName * nat -> taskInstance + canExecute : user * role * humanTaskName -> fact + granted : user * role * taskInstance -> fact + executed : user * taskInstance -> fact + ready : taskInstance -> fact + done : taskInstance -> fact + entity > organization + entity > user + data > object + data > set + userORrole > user + userORrole > role + taskName > automatedTaskName + taskName > humanTaskName + +section types: + + start_event_startevent1,parallelgateway1_to_usertask2,parallelgateway1_to_usertask3,parallelgateway2_to_servicetask1: fact + HT,usertask1,usertask2,usertask3: humanTaskName + IN,OUT,in_usertask1,out_usertask1,in_usertask2,out_usertask2,in_usertask3,out_usertask3,in_servicetask1,out_servicetask1: set + manager,supervisor,clerk,R: role + N,N0,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12: nat + AT,servicetask1: automatedTaskName + user1_manager,user2_manager,user1_supervisor,user2_supervisor,user1_clerk,user2_clerk,A,U0: user + +section inits: + + initial_state init_1 := + + user_to_role(user1_manager,manager). + user_to_role(user2_manager,manager). + user_to_role(user1_supervisor,supervisor). + user_to_role(user2_supervisor,supervisor). + user_to_role(user1_clerk,clerk). + user_to_role(user2_clerk,clerk). + start_event_startevent1. + task_to_data(usertask1,in_usertask1,out_usertask1). + task_to_data(usertask2,in_usertask2,out_usertask2). + task_to_data(usertask3,in_usertask3,out_usertask3). + task_to_data(servicetask1,in_servicetask1,out_servicetask1) + +section hornClauses: + + hc rbac_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(R,HT) + hc direct_ac (A,R,HT) := canExecute(A,R,HT) :- user_to_role(A,R), poto(A,HT) + hc poto_usertask1:= poto(clerk,usertask1) + hc poto_usertask2:= poto(manager,usertask2) + hc poto_usertask3:= poto(manager,usertask3) + +section rules: + + step authorizeTaskExecution(A,R,HT,N) := canExecute(A,R,HT). ready(task(HT,N)) => granted(A,R,task(HT,N)) + step h_taskExecution(A,R,HT,N,IN,OUT) := granted(A,R,task(HT,N)). task_to_data(HT,IN,OUT) => executed(A,task(HT,N)). done(task(HT,N)). task_to_data(HT,IN,OUT). aknows(A,IN). aknows(A,OUT) + step atask_execution(AT,N,IN,OUT) := ready(task(AT,N)). task_to_data(AT,IN,OUT) => done(task(AT,N)). task_to_data(AT,IN,OUT) + step w_usertask1(N0) := start_event_startevent1=[exists N0] => ready(task(usertask1,N0)) + step w_parallelgateway1(N1) := done(task(usertask1,N1)) => parallelgateway1_to_usertask2. parallelgateway1_to_usertask3 + step w_usertask2(N2) := parallelgateway1_to_usertask2=[exists N2] => ready(task(usertask2,N2)) + step w_usertask3(N3) := parallelgateway1_to_usertask3=[exists N3] => ready(task(usertask3,N3)) + step w_parallelgateway2(N4,N5) := done(task(usertask2,N4)). done(task(usertask3,N5)) => parallelgateway2_to_servicetask1 + step w_servicetask1(N6) := parallelgateway2_to_servicetask1=[exists N6] => ready(task(servicetask1,N6)) + +section goals: + + attack_state sod_securitySod1_1(U0,N7,N8):= executed(U0,task(usertask2,N7)). executed(U0,task(usertask3,N8)) + attack_state sod_securitySod2_1(U0,N9,N10):= executed(U0,task(usertask1,N9)). executed(U0,task(usertask3,N10)) + attack_state sod_securitySod3_1(U0,N11,N12):= executed(U0,task(usertask1,N11)). executed(U0,task(usertask2,N12)) diff --git a/designer/examples/TravelApproval/generated/TravelApproval.res b/designer/examples/TravelApproval/generated/TravelApproval.res new file mode 100644 index 0000000..fb6cafc --- /dev/null +++ b/designer/examples/TravelApproval/generated/TravelApproval.res @@ -0,0 +1,266 @@ +% PARAMETERS: + + Protocol: TravelApproval + Problem category: if + + Compound types: on + Step compression: on + Intruder Knowledge As Axioms: off + Weak Type-Flaws (iff newgp): off + + Technique: Graphplan-based Encoding using the EFA schema + Min Steps: 0 + Max Steps: 80 + Delta Steps: 1 + Level Mutex: 0 + Solver: minisat + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% SATE file generated in 0.06 sec... + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: INIT + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Initial Facts: 25 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 1 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 0 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 2 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 1 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 3 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 2 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 4 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 3 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 5 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 4 no 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 6 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 5 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 7 + +* SUB-PHASE: Search for SAT models.. + + Find models procedure skipped. + +* SUB-PHASE: Build Graph + + STATISTICS LAYER LEVELED OFF RUNTIME(sec) + 6 no 0.02 + ------ + Total: 0.02 + +* SUB-PHASE: Assert Possible Goals Instances + + STATISTICS RUNTIME(sec) + Total: 0.0 + +* SUB-PHASE: Schemes Generation and Translation + + STATISTICS CLAUSES RUNTIME(sec) + Goals: 7 0.0 + Refinement Schema: 0 0.0 + Horn Clauses Axioms: 252 0.04 + User Axioms: 0 0.0 + Ape Schema: 768 0.06 + Explanatory Frame Schema: 789 0.08 + ------ + Total: 0.18 + +* SUB-PHASE: Solver SAT formula Updated + + STATISTICS + Depth: 7 + Atoms: 746 + Clauses: 1841 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +PHASE: LOOP ITERATION 8 + +* SUB-PHASE: Search for SAT models.. + + Found 1 models in 0.0 sec. + +* SUB-PHASE: Models into Partial Order Plans (POPs) + + STATISTICS RUNTIME(sec) + model2pop 1 0.06 + ------ + Total: 0.06 + +* SUB-PHASE: Partial Order Plans (POPs) validations + + STATISTICS VALID RUNTIME(sec) + POP 1: true 0.0 + ------ + Total: 0.0 + +* SUB-PHASE: Partial Order Plans (POPs) printing + + -------------------------------------------------------------------- + pop 1: + + GOALS: [sod_securitySod1_1(user1_manager,fnat(n2,0,0),fnat(n3,0,0))] + + Step 0: [sc_w_usertask1_1(0)] + Step 1: [sc_authorizeTaskExecution_1(user1_clerk,clerk,usertask1,fnat(n0,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 2: [sc_h_taskExecution_1(user1_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 3: [sc_w_parallelgateway1_1(fnat(n0,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 4: [sc_w_usertask2_1(0),sc_w_usertask3_1(0),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 5: [sc_authorizeTaskExecution_1(user1_manager,manager,usertask2,fnat(n2,0,0)),sc_authorizeTaskExecution_1(user1_manager,manager,usertask3,fnat(n3,0,0)),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 6: [sc_h_taskExecution_1(user1_manager,manager,usertask2,fnat(n2,0,0),in_usertask2,out_usertask2),sc_h_taskExecution_1(user1_manager,manager,usertask3,fnat(n3,0,0),in_usertask3,out_usertask3),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + Step 7: [rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3)] + -------------------------------------------------------------------- + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +RESULTS + +Attacks Found: true +Stop Condition Reached: false +Formula statistics: + Graph Construction Time: 0.08 + Graph Leveled Off: no + Graph2SAT Time (sec): 0.18 + Encoding Time (sec): 0.26 + Depth: 7 + Atoms: 746 + Clauses: 1841 +Solving statistics: + Total Solving Time (sec): 0.0 + Last Solving Time (sec): 0.0 +Abstraction/Refinement statistics: + Validation Time (sec): 0.0 + Models into POPs Time (sec): 0.06 + Refinement iterations: 0 + +Total Time: 0.32 + + diff --git a/designer/examples/TravelApproval/generated/TravelApproval.result b/designer/examples/TravelApproval/generated/TravelApproval.result new file mode 100644 index 0000000..8ee07fc --- /dev/null +++ b/designer/examples/TravelApproval/generated/TravelApproval.result @@ -0,0 +1,50 @@ +INPUT TravelApproval.aslan +SUMMARY ATTACK_FOUND + GOAL: sod_securitySod1_1(user1_manager,fnat(n2,0,0),fnat(n3,0,0)) + +DETAILS + STRONGLY_TYPED_MODEL + BOUNDED_NUMBER_OF_SESSIONS + BOUNDED_SEARCH_DEPTH + BOUNDED_MESSAGE_DEPTH + +BACKEND SATMC VERSION 3.3.1_(September_2011) + +STATISTICS TIME 320 ms + upperBoundReached false boolean + graphLeveledOff no boolean + satSolver minisat solver + maxStepsNumber 80 steps + stepsNumber 7 steps + atomsNumber 746 atoms + clausesNumber 1841 clauses + encodingTime 0.26 seconds + solvingTime 0.0 seconds + if2sateCompilationTime 0.06 seconds + +TRACE: +0 + CLAUSES:{ } + RULES: w_usertask1(fnat(n0,0,0)) +1 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: authorizeTaskExecution(user1_clerk,clerk,usertask1,fnat(n0,0,0)) +2 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: h_taskExecution(user1_clerk,clerk,usertask1,fnat(n0,0,0),in_usertask1,out_usertask1) +3 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: w_parallelgateway1(fnat(n0,0,0)) +4 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: { w_usertask2(fnat(n2,0,0)),w_usertask3(fnat(n3,0,0)) } +5 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: { authorizeTaskExecution(user1_manager,manager,usertask2,fnat(n2,0,0)),authorizeTaskExecution(user1_manager,manager,usertask3,fnat(n3,0,0)) } +6 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } + RULES: { h_taskExecution(user1_manager,manager,usertask2,fnat(n2,0,0),in_usertask2,out_usertask2),h_taskExecution(user1_manager,manager,usertask3,fnat(n3,0,0),in_usertask3,out_usertask3) } +7 + CLAUSES:{ rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3) } +CLOSED_FINAL_STATE: +{ counter_w_servicetask1(0),counter_w_usertask1(s(0)),counter_w_usertask2(s(0)),counter_w_usertask3(s(0)),done(task(usertask2,fnat(n2,0,0))),done(task(usertask3,fnat(n3,0,0))),initial_state(init_1),aknows(user1_clerk,in_usertask1),aknows(user1_clerk,out_usertask1),aknows(user1_manager,in_usertask2),aknows(user1_manager,in_usertask3),aknows(user1_manager,out_usertask2),aknows(user1_manager,out_usertask3),executed(user1_clerk,task(usertask1,fnat(n0,0,0))),executed(user1_manager,task(usertask2,fnat(n2,0,0))),executed(user1_manager,task(usertask3,fnat(n3,0,0))),poto(clerk,usertask1),poto(manager,usertask2),poto(manager,usertask3),user_to_role(user1_clerk,clerk),user_to_role(user1_manager,manager),user_to_role(user1_supervisor,supervisor),user_to_role(user2_clerk,clerk),user_to_role(user2_manager,manager),user_to_role(user2_supervisor,supervisor),canExecute(user1_clerk,clerk,usertask1),canExecute(user1_manager,manager,usertask2),canExecute(user1_manager,manager,usertask3),canExecute(user2_clerk,clerk,usertask1),canExecute(user2_manager,manager,usertask2),canExecute(user2_manager,manager,usertask3),rbac_ac(user1_clerk,clerk,usertask1),rbac_ac(user1_manager,manager,usertask2),rbac_ac(user1_manager,manager,usertask3),rbac_ac(user2_clerk,clerk,usertask1),rbac_ac(user2_manager,manager,usertask2),rbac_ac(user2_manager,manager,usertask3),sod_securitySod1_1(user1_manager,fnat(n2,0,0),fnat(n3,0,0)),task_to_data(servicetask1,in_servicetask1,out_servicetask1),task_to_data(usertask1,in_usertask1,out_usertask1),task_to_data(usertask2,in_usertask2,out_usertask2),task_to_data(usertask3,in_usertask3,out_usertask3) } diff --git a/designer/examples/TravelApproval/generated/TravelApproval.sate b/designer/examples/TravelApproval/generated/TravelApproval.sate new file mode 100644 index 0000000..bfaf68f --- /dev/null +++ b/designer/examples/TravelApproval/generated/TravelApproval.sate @@ -0,0 +1,427 @@ +% SATE OUTPUT + +% SORTS +sort(hc_axiom). +sort(action). +sort(fresh_const). +sort(fresh_nat). +sort(message). +sort(nat). +sort(set). +sort(set_typed). +sort(humanTaskName). +sort(humanTaskName_temp). +sort(humanTaskName_typed). +sort(role). +sort(role_temp). +sort(role_typed). +sort(automatedTaskName). +sort(automatedTaskName_temp). +sort(automatedTaskName_typed). +sort(user). +sort(user_temp). +sort(user_typed). +sort(data_typed). +sort(taskInstance_typed). +sort(fluent). +sort(userORrole). +sort(taskName). +sort(entity). +sort(data). + +% CONSTANTS +constant(initial_state(initial_state_id),fluent). +constant(fpk(fresh_public_key_id,nat,nat),fresh_public_key_typed). +constant(puk(fresh_public_key_typed),fresh_public_key). +constant(fsk(fresh_symmetric_key_id,nat,nat),fresh_symmetric_key_typed). +constant(sk(fresh_symmetric_key_typed),fresh_symmetric_key). +constant(fn(fresh_nonce_id,nat,nat),fresh_nonce_typed). +constant(nonce(fresh_nonce_typed),fresh_nonce). +constant(fmr(fresh_agent_id,nat,nat),fresh_agent_typed). +constant(mr(fresh_agent_typed),fresh_agent). +constant(ff(fresh_function_id,nat,nat),fresh_function_typed). +constant(fu(fresh_function_typed),fresh_function). +constant(fnat(fresh_nat_id,nat,nat),fresh_nat). +constant(fmsg(fresh_message_id,nat,nat),fresh_message). +constant(f_protocol_id_typed(fresh_protocol_id_typed_id,nat,nat),fresh_protocol_id_typed). +constant(pid(fresh_protocol_id_typed),fresh_protocol_id). +constant(fresh(fresh_const),fluent). +constant(s,nat). +constant(0,nat). +constant(mc_pair,data_typed). +constant(task,taskInstance_typed). +constant(start_event_startevent1,fluent). +constant(parallelgateway1_to_usertask2,fluent). +constant(parallelgateway1_to_usertask3,fluent). +constant(parallelgateway2_to_servicetask1,fluent). +constant(usertask1,humanTaskName_typed). +constant(usertask2,humanTaskName_typed). +constant(usertask3,humanTaskName_typed). +constant(in_usertask1,set_typed). +constant(out_usertask1,set_typed). +constant(in_usertask2,set_typed). +constant(out_usertask2,set_typed). +constant(in_usertask3,set_typed). +constant(out_usertask3,set_typed). +constant(in_servicetask1,set_typed). +constant(out_servicetask1,set_typed). +constant(manager,role_typed). +constant(supervisor,role_typed). +constant(clerk,role_typed). +constant(servicetask1,automatedTaskName_typed). +constant(user1_manager,user_typed). +constant(user2_manager,user_typed). +constant(user1_supervisor,user_typed). +constant(user2_supervisor,user_typed). +constant(user1_clerk,user_typed). +constant(user2_clerk,user_typed). +constant(mr(agent_typed),agent). +constant(nonce(nonce_typed),nonce). +constant(sk(sk_typed),symmetric_key). +constant(puk(puk_typed),public_key). +constant(private_key_lb(private_key_typed),private_key). +constant(fu(function_typed),function). +constant(pid(protocol_id_typed),protocol_id). +constant(bool_lb(bool_typed),bool). +constant(set_lb(set_typed),set). +constant(ch(channel_typed),channel). +constant(s(nat),nat). +constant(contains(message,set),fluent). +constant(user_to_role(user,role),fluent). +constant(poto(userORrole,taskName),fluent). +constant(task_to_data(taskName,set,set),fluent). +constant(aknows(entity,data),fluent). +constant(mc_pair(data,data),data_typed). +constant(contains(set,data),fluent). +constant(task(taskName,nat),taskInstance_typed). +constant(canExecute(user,role,humanTaskName),fluent). +constant(granted(user,role,taskInstance),fluent). +constant(executed(user,taskInstance),fluent). +constant(ready(taskInstance),fluent). +constant(done(taskInstance),fluent). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(taskName_lb(humanTaskName_temp),humanTaskName). +constant(humanTaskName_lb(humanTaskName_typed),humanTaskName_temp). +constant(userORrole_lb(role_temp),role). +constant(userORrole_lb(role_temp),role). +constant(role_lb(role_typed),role_temp). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(taskName_lb(automatedTaskName_temp),automatedTaskName). +constant(automatedTaskName_lb(automatedTaskName_typed),automatedTaskName_temp). +constant(entity_lb(user_temp),user). +constant(entity_lb(user_temp),user). +constant(user_lb(user_typed),user_temp). +constant(init_1,initial_state_id). +constant(counter_w_usertask1(nat),fluent). +constant(counter_w_usertask2(nat),fluent). +constant(counter_w_usertask3(nat),fluent). +constant(counter_w_servicetask1(nat),fluent). +constant(n0,fresh_nat_id). +constant(n2,fresh_nat_id). +constant(n3,fresh_nat_id). +constant(n6,fresh_nat_id). + +% SUPERSORTS +super_sort(puk_typed,fresh_public_key_typed). +super_sort(fresh_const,fresh_public_key). +super_sort(sk_typed,fresh_symmetric_key_typed). +super_sort(fresh_const,fresh_symmetric_key). +super_sort(nonce_typed,fresh_nonce_typed). +super_sort(fresh_const,fresh_nonce). +super_sort(agent_typed,fresh_agent_typed). +super_sort(fresh_const,fresh_agent). +super_sort(function_typed,fresh_function_typed). +super_sort(fresh_const,fresh_function). +super_sort(nat,fresh_nat). +super_sort(fresh_const,fresh_nat). +super_sort(message,fresh_message). +super_sort(fresh_const,fresh_message). +super_sort(protocol_id_typed,fresh_protocol_id_typed). +super_sort(fresh_const,fresh_protocol_id). +super_sort(message,agent). +super_sort(message,nonce). +super_sort(message,symmetric_key). +super_sort(message,public_key). +super_sort(message,private_key). +super_sort(message,function). +super_sort(message,nat). +super_sort(message,protocol_id). +super_sort(message,bool). +super_sort(entity,organization). +super_sort(entity,user). +super_sort(data,object). +super_sort(data,set). +super_sort(userORrole,user). +super_sort(userORrole,role). +super_sort(taskName,automatedTaskName). +super_sort(taskName,humanTaskName). +super_sort(taskName_typed,humanTaskName_temp). +super_sort(userORrole_typed,role_temp). +super_sort(taskName_typed,automatedTaskName_temp). +super_sort(entity_typed,user_temp). + +% INITIAL STATES +facts([initial_state(init_1), + user_to_role(entity_lb(user_lb(user1_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user2_manager)),userORrole_lb(role_lb(manager))), + user_to_role(entity_lb(user_lb(user1_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user2_supervisor)),userORrole_lb(role_lb(supervisor))), + user_to_role(entity_lb(user_lb(user1_clerk)),userORrole_lb(role_lb(clerk))), + user_to_role(entity_lb(user_lb(user2_clerk)),userORrole_lb(role_lb(clerk))), + start_event_startevent1, + task_to_data(taskName_lb(humanTaskName_lb(usertask1)),set_lb(in_usertask1),set_lb(out_usertask1)), + task_to_data(taskName_lb(humanTaskName_lb(usertask2)),set_lb(in_usertask2),set_lb(out_usertask2)), + task_to_data(taskName_lb(humanTaskName_lb(usertask3)),set_lb(in_usertask3),set_lb(out_usertask3)), + task_to_data(taskName_lb(automatedTaskName_lb(servicetask1)),set_lb(in_servicetask1),set_lb(out_servicetask1)), + counter_w_usertask1(0), + counter_w_usertask2(0), + counter_w_usertask3(0), + counter_w_servicetask1(0)]). + + +% RULES +constant(sc_authorizeTaskExecution_1(user_typed,role_typed,humanTaskName_typed,nat),action). +action(sc_authorizeTaskExecution_1(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_h_taskExecution_1(user_typed,role_typed,humanTaskName_typed,nat,set_typed,set_typed),action). +action(sc_h_taskExecution_1(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +constant(sc_atask_execution_1(automatedTaskName_typed,nat,set_typed,set_typed),action). +action(sc_atask_execution_1(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +constant(sc_w_usertask1_1(nat),action). +action(sc_w_usertask1_1(Xvar), + true, + [start_event_startevent1, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent1, + counter_w_usertask1(Xvar)]). + +constant(sc_w_parallelgateway1_1(nat),action). +action(sc_w_parallelgateway1_1(N1), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N1)))], + [parallelgateway1_to_usertask2, + parallelgateway1_to_usertask3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N1)))]). + +constant(sc_w_usertask2_1(nat),action). +action(sc_w_usertask2_1(Xvar), + true, + [parallelgateway1_to_usertask2, + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n2,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [parallelgateway1_to_usertask2, + counter_w_usertask2(Xvar)]). + +constant(sc_w_usertask3_1(nat),action). +action(sc_w_usertask3_1(Xvar), + true, + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n3,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)]). + +constant(sc_w_parallelgateway2_1(nat,nat),action). +action(sc_w_parallelgateway2_1(N4,N5), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N4))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N5)))], + [parallelgateway2_to_servicetask1], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N4))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N5)))]). + +constant(sc_w_servicetask1_1(nat),action). +action(sc_w_servicetask1_1(Xvar), + true, + [parallelgateway2_to_servicetask1, + counter_w_servicetask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),fnat(n6,Xvar,0)))), + counter_w_servicetask1(s(Xvar))], + [parallelgateway2_to_servicetask1, + counter_w_servicetask1(Xvar)]). + + +% CONSTRAINTS + +% GOALS +goal(sod_securitySod1_1(U0,N7,N8),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N7))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N8)))]). + +goal(sod_securitySod2_1(U0,N9,N10),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N9))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N10)))]). + +goal(sod_securitySod3_1(U0,N11,N12),true, + [executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N11))), + executed(entity_lb(user_lb(U0)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N12)))]). + + +% EQUATIONS + +% USER_AXIOMS + +% HC_AXIOMS +constant(rbac_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(rbac_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(direct_ac(user_typed,role_typed,humanTaskName_typed),hc_axiom). +hc_axiom(direct_ac(A,R,HT), + true, + [user_to_role(entity_lb(user_lb(A)),userORrole_lb(role_lb(R))), + poto(entity_lb(user_lb(A)),taskName_lb(humanTaskName_lb(HT)))], + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT)))]). + +constant(poto_usertask1,hc_axiom). +hc_axiom(poto_usertask1, + true, + [], + [poto(userORrole_lb(role_lb(clerk)),taskName_lb(humanTaskName_lb(usertask1)))]). + +constant(poto_usertask2,hc_axiom). +hc_axiom(poto_usertask2, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask2)))]). + +constant(poto_usertask3,hc_axiom). +hc_axiom(poto_usertask3, + true, + [], + [poto(userORrole_lb(role_lb(manager)),taskName_lb(humanTaskName_lb(usertask3)))]). + + + +% INVOKED DURING THE LOADING (USEFUL FOR SETTING) +init_sate :- + set(verification_abstraction,off), + set(if2sate_version,2). + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +% NOTE: these prolog facts are not mandatory and are useful only for +% printing a user-friendly output when the triple_step optimization +% is enabled. The user is invited to neglect these declarations. +triple_step_action(authorizeTaskExecution(A,R,HT,N), + true, + [canExecute(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskName_lb(humanTaskName_lb(HT))), + ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(h_taskExecution(A,R,HT,N,IN,OUT), + true, + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT))], + [executed(entity_lb(user_lb(A)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N))), + task_to_data(taskName_lb(humanTaskName_lb(HT)),set_lb(IN),set_lb(OUT)), + aknows(entity_lb(user_lb(A)),set_lb(IN)), + aknows(entity_lb(user_lb(A)),set_lb(OUT))], + [granted(entity_lb(user_lb(A)),userORrole_lb(role_lb(R)),taskInstance_lb(task(taskName_lb(humanTaskName_lb(HT)),N)))]). + +triple_step_action(atask_execution(AT,N,IN,OUT), + true, + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [done(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N))), + task_to_data(taskName_lb(automatedTaskName_lb(AT)),set_lb(IN),set_lb(OUT))], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(AT)),N)))]). + +triple_step_action(w_usertask1(Xvar), + true, + [start_event_startevent1, + counter_w_usertask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),fnat(n0,Xvar,0)))), + counter_w_usertask1(s(Xvar))], + [start_event_startevent1, + counter_w_usertask1(Xvar)]). + +triple_step_action(w_parallelgateway1(N1), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N1)))], + [parallelgateway1_to_usertask2, + parallelgateway1_to_usertask3], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask1)),N1)))]). + +triple_step_action(w_usertask2(Xvar), + true, + [parallelgateway1_to_usertask2, + counter_w_usertask2(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),fnat(n2,Xvar,0)))), + counter_w_usertask2(s(Xvar))], + [parallelgateway1_to_usertask2, + counter_w_usertask2(Xvar)]). + +triple_step_action(w_usertask3(Xvar), + true, + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),fnat(n3,Xvar,0)))), + counter_w_usertask3(s(Xvar))], + [parallelgateway1_to_usertask3, + counter_w_usertask3(Xvar)]). + +triple_step_action(w_parallelgateway2(N4,N5), + true, + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N4))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N5)))], + [parallelgateway2_to_servicetask1], + [done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask2)),N4))), + done(taskInstance_lb(task(taskName_lb(humanTaskName_lb(usertask3)),N5)))]). + +triple_step_action(w_servicetask1(Xvar), + true, + [parallelgateway2_to_servicetask1, + counter_w_servicetask1(Xvar)], + [ready(taskInstance_lb(task(taskName_lb(automatedTaskName_lb(servicetask1)),fnat(n6,Xvar,0)))), + counter_w_servicetask1(s(Xvar))], + [parallelgateway2_to_servicetask1, + counter_w_servicetask1(Xvar)]). + +correspondence_between_action_and_step_compressed_rule(Act,SCAct) :- + atom_concat('sc_',Act,TmpAct), + atom_concat(TmpAct,_,SCAct). + +% PREDICATE TO EVALUATE ON_THE_FLY_CONDITIONS +on_the_fly_conditions([]). +on_the_fly_conditions([C|Cs]) :- + call(C), + on_the_fly_conditions(Cs). diff --git a/designer/examples/misc/ASLanSoDDemo.activiti b/designer/examples/misc/ASLanSoDDemo.activiti new file mode 100644 index 0000000..df850f0 --- /dev/null +++ b/designer/examples/misc/ASLanSoDDemo.activiti @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/designer/examples/misc/AdvancedSoDDemo.activiti b/designer/examples/misc/AdvancedSoDDemo.activiti new file mode 100644 index 0000000..1df4f79 --- /dev/null +++ b/designer/examples/misc/AdvancedSoDDemo.activiti @@ -0,0 +1,771 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +